Осталась ошибка с русской буквой 'я' (код 255). Если при компиляции в режиме фиксированной формы строки, то получается: 1) строка, например, 5 write ('длинная строка') конвертируется в 5 write ('\xE4\xEB\xE8\xED\xED\xE0\xFF \xF1\xF2\xF0\xEE\xEA\xE0') 2) если в пределах первых 72 символов полученной строки попадётся \xFF, то компилятор выдаёт ошибки: Error: Unexpected end of format string in format string at (1) и Warning: Line truncated at (1) Steps to Reproduce: 1. Собрать программу, состоящую из: program myprog 5 write ('длинная строка') end Actual Results: Ошибка компиляции Expected Results: Правильная сборка
Ещё наткнулся на букву 'ю': program test write (*,*) 'ю' end Выдаёт ошибку In file test.for:2 write (*,*) '\xFE' 1 Error: Unterminated character constant beginning at (1) А программа program test write (*,*) 'я' end Выдаёт ошибку In file test.for:2 write (*,*) '\xFF' 1 Error: Syntax error in WRITE statement at (1) С другими буквами всё нормально компилится.
Дополнительные тесты показали, что вариант с константами Холлерита: program test2 5 format (1Hя) write (*,1) end нормально собирается и работает даже без Warning. А вариант program test3 6 format (s) write (*,6) 1Hя end приводит к In file test.for:3 write (*,6) 1H\xFF 1 Warning: Extension: Hollerith constant at (1) test.for: In function 'MAIN__': test.for:1: internal compiler error: Bad IO basetype (9) Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://bugzilla.altlinux.ru/> for instructions. вне зависимости от варианта константы.
На gcc4.4-fortran-4.4.2-alt2.M51.1: f77 test.f -o test test.f:2.15: 5 write ('\xC4\xCC\xC9\xCE\xCE\xC1\xD1 \xD3\xD4\xD2\xCF\xCB\xC1') 1 Error: UNIT specification at (1) must be an INTEGER expression or a CHARACTER variable make: *** [test] Error 1 Видимо, всё-таки в апстрим.
Во-первых write ('длинная строка') синтаксически неверно. Во-вторых следующий тестовый пример прекрасно работает в gcc version 7.3.1 20180130 (ALT 7.3.1-alt3) (GCC) 1 program test 2 print *, "абвгдеёжзийклмн 3 * опрстуфхцчшщъыьэюя" 4 write (*, "(A36 A36)") "АБВГДЕЁЖЗИЙКЛМН", 5 * 'ОПРСТУФХЦЧШЩЪЫЬЭЮЯ' 6 end Багу закрываю как WONTFIX для gcc4.1-fortran.
Проверил в версии 7.3.1, теперь проблем с русскими буквами нет, согласен.