Bug 37378 - Не различается регистр переменных при привязке к именам на C
Summary: Не различается регистр переменных при привязке к именам на C
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: gcc9-fortran (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Gleb F-Malinovskiy
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-10-25 11:05 MSK by serpiph
Modified: 2019-10-25 11:05 MSK (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
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-именам при определении пересечения имён.