Fortran: Emit correct types for CHARACTER(C_CHAR), VALUE arguments
commit906b4e15ce84790c7657405238d61358e0893676
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Sun, 26 Dec 2021 19:18:01 +0000 (26 20:18 +0100)
committerFrancois-Xavier Coudert <fxcoudert@gmail.com>
Tue, 28 Dec 2021 22:27:48 +0000 (28 23:27 +0100)
tree17a80e1edc78ee4a0c647e91bfd76c0e3f8bf232
parentdb25655fa5dd23bba684ec7db628643c19e64d6a
Fortran: Emit correct types for CHARACTER(C_CHAR), VALUE arguments

Make the front-end emit the right type for CHARACTER(C_CHAR), VALUE
arguments to BIND(C) procedures. They are scalar integers of C type
char, and should be emitted as such. They are not strings or arrays,
and are not promoted to C int, either.

gcc/fortran/ChangeLog:

PR fortran/103828
* trans-decl.c (generate_local_decl): Do not call
gfc_conv_scalar_char_value(), but check the type tree.
* trans-expr.c (gfc_conv_scalar_char_value): Rename to
conv_scalar_char_value, do not alter type tree.
(gfc_conv_procedure_call): Adjust call to renamed
conv_scalar_char_value() function.
* trans-types.c (gfc_sym_type): Take care of
CHARACTER(C_CHAR), VALUE arguments.
* trans.h (gfc_conv_scalar_char_value): Remove prototype.

gcc/testsuite/ChangeLog:

PR fortran/103828
* gfortran.dg/c_char_tests_3.f90: New file.
* gfortran.dg/c_char_tests_3_c.c: New file.
* gfortran.dg/c_char_tests_4.f90: New file.
* gfortran.dg/c_char_tests_5.f90: New file.
gcc/fortran/trans-decl.c
gcc/fortran/trans-expr.c
gcc/fortran/trans-types.c
gcc/fortran/trans.h
gcc/testsuite/gfortran.dg/c_char_tests_3.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/c_char_tests_3_c.c [new file with mode: 0644]
gcc/testsuite/gfortran.dg/c_char_tests_4.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/c_char_tests_5.f90 [new file with mode: 0644]