Логическая ошибка в Promote: если один из аргументов типа Char16, то результат операции выдаётся Char16 без учёта типа операции — для отношений это верно, а для сложения — нет.
## Код:
```
MODULE Mod;
   IMPORT Log;

   PROCEDURE Do;
   BEGIN
      Log.String(21X + 20X);
      Log.String(LONG(21X) + 20X);   (* ошибка *)
      Log.String(LONG(21X) + LONG(20X));   (* ошибка *)
      Log.String("А" + "Б");   (* ошибка *)
      Log.String("…" + "…");   (* ошибка *)
      Log.String(2026X + 2026X);   (* ошибка *)
   END Do;

BEGIN
   Do
END Mod.
```
Исправление:## Код:
```
ELSIF f IN charSet + {String8, String16} THEN
         IF g IN charSet + {String8, String16} THEN
            IF (f = String16) OR (g = String16) OR (f = Char16) & (g = String8) OR (f = String8) & (g = Char16) THEN
               new := DevCPT.string16typ
>>>> вставить            ELSIF op = plus THEN
               IF (f = Char16) OR (g = Char16) THEN new := DevCPT.string16typ
               ELSE new := DevCPT.string8typ
               END<<<<
            ELSIF (f = Char16) OR (g = Char16) THEN new := DevCPT.char16typ
            ELSIF (f = String8) OR (g = String8) THEN new := DevCPT.string8typ
>>>> вырезать            ELSIF op = plus THEN
               IF (f = Char16) OR (g = Char16) THEN new := DevCPT.string16typ
               ELSE new := DevCPT.string8typ
               END<<<<
            END;
```
