Bug 9576 - gfortran4.1 и русская буква 'я'
Summary: gfortran4.1 и русская буква 'я'
Status: CLOSED WONTFIX
Alias: None
Product: Sisyphus
Classification: Development
Component: gcc4.1-fortran (show other bugs)
Version: unstable
Hardware: all Linux
: P3 major
Assignee: Dmitry V. Levin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-05-16 17:05 MSD by serpiph
Modified: 2018-05-07 09:28 MSK (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description serpiph 2006-05-16 17:05:48 MSD
Осталась ошибка с русской буквой 'я' (код 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:  
Правильная сборка
Comment 1 serpiph 2006-05-18 15:57:03 MSD
Ещё наткнулся на букву 'ю':
        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)
С другими буквами всё нормально компилится.
Comment 2 serpiph 2006-05-18 16:11:48 MSD
Дополнительные тесты показали, что вариант с константами Холлерита:
        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.

вне зависимости от варианта константы.
Comment 3 Michael Shigorin 2010-10-09 11:38:01 MSD
На 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

Видимо, всё-таки в апстрим.
Comment 4 Grigory Ustinov 2018-05-03 15:42:41 MSK
Во-первых 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.
Comment 5 serpiph 2018-05-07 09:28:04 MSK
Проверил в версии 7.3.1, теперь проблем с русскими буквами нет, согласен.