Bug 37378

Summary: Не различается регистр переменных при привязке к именам на C
Product: Sisyphus Reporter: serpiph <serpiph>
Component: gcc9-fortranAssignee: Gleb F-Malinovskiy <glebfm>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: glebfm
Version: unstable   
Hardware: all   
OS: Linux   

Description serpiph 2019-10-25 11:05:17 MSK
Тестовый файл (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-именам при определении пересечения имён.