| Summary: | gfortran4.1 и русская буква 'я' | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | serpiph <serpiph> |
| Component: | gcc4.1-fortran | Assignee: | Dmitry V. Levin <ldv> |
| Status: | CLOSED WONTFIX | QA Contact: | qa-sisyphus |
| Severity: | major | ||
| Priority: | P3 | CC: | glebfm, grenka, mike |
| Version: | unstable | ||
| Hardware: | all | ||
| OS: | Linux | ||
Ещё наткнулся на букву 'ю':
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, теперь проблем с русскими буквами нет, согласен. |
Осталась ошибка с русской буквой 'я' (код 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: Правильная сборка