https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66238

            Bug ID: 66238
           Summary: C/Fortran interoperability broken with -flto
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dominiq at lps dot ens.fr
                CC: hubicka at gcc dot gnu.org
  Target Milestone: ---

When running the gfortran test suite with -flto, I get the following new
failures since r223288

FAIL: gfortran.dg/bind_c_usage_16.f03   -g -flto  (test for excess errors)
FAIL: gfortran.dg/bind_c_usage_17.f90   -g -flto  (test for excess errors)
FAIL: gfortran.dg/c_char_tests.f03   -g -flto  (test for excess errors)
FAIL: gfortran.dg/proc_ptr_7.f90   -g -flto  (test for excess errors)

The errors are

/opt/gcc/_clean/gcc/testsuite/gfortran.dg/bind_c_usage_16_c.c:8:6: warning:
type of 'returnA' does not match original declaration [-Wlto-type-mismatch]
 char returnA(char *);
      ^
lto1: note: return value type mismatch
lto1: note: type 'unsigned char' should match type 'char'
/opt/gcc/_clean/gcc/testsuite/gfortran.dg/bind_c_usage_16.f03:12:0: note: 'bar'
was previously declared here
   function bar(x)  bind(c, name="returnA")
^
/opt/gcc/_clean/gcc/testsuite/gfortran.dg/bind_c_usage_16_c.c:9:6: warning:
type of 'returnB' does not match original declaration [-Wlto-type-mismatch]
 char returnB(void);
      ^
lto1: note: return value type mismatch
lto1: note: type 'unsigned char' should match type 'char'
/opt/gcc/_clean/gcc/testsuite/gfortran.dg/bind_c_usage_16.f03:17:0: note: 'foo'
was previously declared here
   function foo()  bind(c, name="returnB")
^

/opt/gcc/_clean/gcc/testsuite/gfortran.dg/bind_c_usage_17.f90:24:0: warning:
type of 'cdir' does not match original declaration [-Wlto-type-mismatch]
   str1 = cdir()
^
lto1: note: return value type mismatch
lto1: note: type 'char' should match type 'unsigned char'
/opt/gcc/_clean/gcc/testsuite/gfortran.dg/bind_c_usage_17_c.c:4:6: note: 'cdir'
was previously declared here
 char cdir(void){return '/';}
      ^

/opt/gcc/_clean/gcc/testsuite/gfortran.dg/c_char_driver.c:1:6: warning: type of
'param_test' does not match original declaration [-Wlto-type-mismatch]
 void param_test(char my_char, char my_char_2);
      ^
lto1: note: type mismatch in parameter 1
/opt/gcc/_clean/gcc/testsuite/gfortran.dg/c_char_tests.f03:10:0: note:
'param_test' was previously declared here
   subroutine param_test(my_char, my_char_2) bind(c)
^

and

/opt/gcc/_clean/gcc/testsuite/gfortran.dg/proc_ptr_7.f90:22:0: warning: type of
'assignf' does not match original declaration [-Wlto-type-mismatch]
   call assignF(ptr)
^
lto1: note: type mismatch in parameter 1
/opt/gcc/_clean/gcc/testsuite/gfortran.dg/proc_ptr_7.c:8:6: note: 'assignf_'
was previously declared here
 void assignf_(int(**ptr)(void)) {
      ^

The first two failures can be fixed by replacing 'char' with 'unsigned char' in
the C files. I don't know how to fix the two other ones.

Reply via email to