| Summary: | Не различается регистр переменных при привязке к именам на C | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | serpiph <serpiph> |
| Component: | gcc9-fortran | Assignee: | Gleb F-Malinovskiy <glebfm> |
| Status: | NEW --- | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P3 | CC: | glebfm |
| Version: | unstable | ||
| Hardware: | all | ||
| OS: | Linux | ||
Тестовый файл (test.f90): MODULE TEST USE ISO_C_BINDING INTEGER(C_INT),BIND(C,NAME='_var1') :: A INTEGER(C_INT),BIND(C,NAME='_VAR1') :: B END MODULE TEST Команда компиляции: gfortran -c -ffree-form -ffree-line-length-none -o test.o test.f90 При компиляции версией 7 проблем нет. В версии 8 и 9 при попытке собрать модуль выпадает ошибка, что имена, под которыми эти переменные видны в C, одинаковы, хотя это не так: test.f90:4:42: 3 | INTEGER(C_INT),BIND(C,NAME="_var1") :: A | 2 4 | INTEGER(C_INT),BIND(C,NAME="_VAR1") :: B | 1 Error: Variable ‘b’ from module ‘test’ with binding label ‘_VAR1’ at (1) uses the same global identifier as entity at (2) from module ‘test’ Если закомментировать одну из этих двух строчек, то можно увидеть, что в объектном файле появляется или _var1, или _VAR1. То есть регистр C-имени сохраняется. Считаю появление такой ошибки компилятора ошибкой, он не должен применять FORTRAN-правила именования переменных к C-именам при определении пересечения имён.