public inbox for fortran@gcc.gnu.org
 help / color / mirror / Atom feed
* [Patch fortran] PR32957 - C/Fortran interoperability and -fdefault-integer-8
@ 2018-02-25 23:19 Dominique d'Humières
  2018-02-25 23:35 ` Thomas Koenig
  0 siblings, 1 reply; 3+ messages in thread
From: Dominique d'Humières @ 2018-02-25 23:19 UTC (permalink / raw)
  To: gfortran; +Cc: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 584 bytes --]

Hi all,

I have noticed a recent interest to fix problems with -fdefault-integer-8. Please don’t forget to mark new PRs as blocking pr32770. I have also posted new results for the test suite.

I think it is a good time to submit the updated attached patch fixing some C/Fortran interoperability in the test suite (the variables exchanged between Fortran and C must not be changed by -fdefault-integer-8).

I have this patch in my working tree since a very long time and it has been applied before the new tests in pr32770.

OK for trunk? back port?

TIA

Dominique



[-- Attachment #2: patch-rega3 --]
[-- Type: application/octet-stream, Size: 8496 bytes --]

diff -up ../_clean/gcc/testsuite/gfortran.dg/c_f_pointer_shape_tests_2.f03 gcc/testsuite/gfortran.dg/c_f_pointer_shape_tests_2.f03
--- ../_clean/gcc/testsuite/gfortran.dg/c_f_pointer_shape_tests_2.f03	2018-02-18 00:40:40.000000000 +0100
+++ gcc/testsuite/gfortran.dg/c_f_pointer_shape_tests_2.f03	2018-02-18 11:08:56.000000000 +0100
@@ -12,7 +12,7 @@ contains
     use, intrinsic :: iso_c_binding
     type(c_ptr), value :: cPtr
     integer(c_int), value :: num_elems
-    integer, dimension(:), pointer :: myArrayPtr
+    integer(c_int), dimension(:), pointer :: myArrayPtr
     integer(c_long_long), dimension(1) :: shape
     integer :: i
     
@@ -28,7 +28,7 @@ contains
     type(c_ptr), value :: cPtr
     integer(c_int), value :: num_rows
     integer(c_int), value :: num_cols
-    integer, dimension(:,:), pointer :: myArrayPtr
+    integer(c_int), dimension(:,:), pointer :: myArrayPtr
     integer(c_long_long), dimension(2) :: shape
     integer :: i,j
     
@@ -46,7 +46,7 @@ contains
     use, intrinsic :: iso_c_binding
     type(c_ptr), value :: cPtr
     integer(c_int), value :: num_elems
-    integer, dimension(:), pointer :: myArrayPtr
+    integer(c_int), dimension(:), pointer :: myArrayPtr
     integer(c_long), dimension(1) :: shape
     integer :: i
     
@@ -61,7 +61,7 @@ contains
     use, intrinsic :: iso_c_binding
     type(c_ptr), value :: cPtr
     integer(c_int), value :: num_elems
-    integer, dimension(:), pointer :: myArrayPtr
+    integer(c_int), dimension(:), pointer :: myArrayPtr
     integer(c_int), dimension(1) :: shape
     integer :: i
     
@@ -76,7 +76,7 @@ contains
     use, intrinsic :: iso_c_binding
     type(c_ptr), value :: cPtr
     integer(c_int), value :: num_elems
-    integer, dimension(:), pointer :: myArrayPtr
+    integer(c_int), dimension(:), pointer :: myArrayPtr
     integer(c_short), dimension(1) :: shape
     integer :: i
     
@@ -91,7 +91,7 @@ contains
     use, intrinsic :: iso_c_binding
     type(c_ptr), value :: cPtr
     integer(c_int), value :: num_elems
-    integer, dimension(:), pointer :: myArrayPtr
+    integer(c_int), dimension(:), pointer :: myArrayPtr
     integer(c_int), dimension(1) :: shape1
     integer(c_long_long), dimension(1) :: shape2
     integer :: i
diff -up ../_clean/gcc/testsuite/gfortran.dg/c_f_pointer_shape_tests_4.f03 gcc/testsuite/gfortran.dg/c_f_pointer_shape_tests_4.f03
--- ../_clean/gcc/testsuite/gfortran.dg/c_f_pointer_shape_tests_4.f03	2018-02-18 00:40:34.000000000 +0100
+++ gcc/testsuite/gfortran.dg/c_f_pointer_shape_tests_4.f03	2018-02-18 11:08:48.000000000 +0100
@@ -12,7 +12,7 @@ contains
     use, intrinsic :: iso_c_binding
     type(c_ptr), value :: cPtr
     integer(c_int), value :: num_elems
-    integer, dimension(:), pointer :: myArrayPtr
+    integer(c_int), dimension(:), pointer :: myArrayPtr
     integer(c_long_long), dimension(1) :: shape
     integer :: i
     
@@ -28,7 +28,7 @@ contains
     type(c_ptr), value :: cPtr
     integer(c_int), value :: num_rows
     integer(c_int), value :: num_cols
-    integer, dimension(:,:), pointer :: myArrayPtr
+    integer(c_int), dimension(:,:), pointer :: myArrayPtr
     integer(c_long_long), dimension(3) :: shape
     integer :: i,j
     
@@ -47,7 +47,7 @@ contains
     use, intrinsic :: iso_c_binding
     type(c_ptr), value :: cPtr
     integer(c_int), value :: num_elems
-    integer, dimension(:), pointer :: myArrayPtr
+    integer(c_int), dimension(:), pointer :: myArrayPtr
     integer(c_long), dimension(1) :: shape
     integer :: i
     
@@ -62,7 +62,7 @@ contains
     use, intrinsic :: iso_c_binding
     type(c_ptr), value :: cPtr
     integer(c_int), value :: num_elems
-    integer, dimension(:), pointer :: myArrayPtr
+    integer(c_int), dimension(:), pointer :: myArrayPtr
     integer(c_int), dimension(1) :: shape
     integer :: i
     
@@ -77,7 +77,7 @@ contains
     use, intrinsic :: iso_c_binding
     type(c_ptr), value :: cPtr
     integer(c_int), value :: num_elems
-    integer, dimension(:), pointer :: myArrayPtr
+    integer(c_int), dimension(:), pointer :: myArrayPtr
     integer(c_short), dimension(1) :: shape
     integer :: i
     
@@ -92,7 +92,7 @@ contains
     use, intrinsic :: iso_c_binding
     type(c_ptr), value :: cPtr
     integer(c_int), value :: num_elems
-    integer, dimension(:), pointer :: myArrayPtr
+    integer(c_int), dimension(:), pointer :: myArrayPtr
     integer(c_int), dimension(1) :: shape1
     integer(c_long_long), dimension(1) :: shape2
     integer :: i
diff -up ../_clean/gcc/testsuite/gfortran.dg/c_funloc_tests_3.f03 gcc/testsuite/gfortran.dg/c_funloc_tests_3.f03
--- ../_clean/gcc/testsuite/gfortran.dg/c_funloc_tests_3.f03	2012-05-15 13:41:59.000000000 +0200
+++ gcc/testsuite/gfortran.dg/c_funloc_tests_3.f03	2012-05-16 00:31:51.000000000 +0200
@@ -9,11 +9,11 @@ contains
     use iso_c_binding, only: c_funptr, c_int
     integer(c_int)        :: ffunc
     integer(c_int), value :: j
-    ffunc = -17*j
+    ffunc = -17_c_int*j
   end function ffunc
 end module c_funloc_tests_3
 program main
-  use iso_c_binding, only: c_funptr, c_funloc
+  use iso_c_binding, only: c_funptr, c_funloc, c_int
   use c_funloc_tests_3, only: ffunc
   implicit none
   interface
@@ -29,7 +29,7 @@ program main
   end interface
   type(c_funptr) :: p
   p = returnFunc()
-  call callFunc(p, 13,3*13)
+  call callFunc(p, 13_c_int, 3_c_int*13_c_int)
   p = c_funloc(ffunc)
-  call callFunc(p, 21,-17*21)
+  call callFunc(p, 21_c_int, -17_c_int*21_c_int)
 end program main
diff -up ../_clean/gcc/testsuite/gfortran.dg/c_loc_test.f90 gcc/testsuite/gfortran.dg/c_loc_test.f90
--- ../_clean/gcc/testsuite/gfortran.dg/c_loc_test.f90	2012-05-15 13:41:52.000000000 +0200
+++ gcc/testsuite/gfortran.dg/c_loc_test.f90	2012-05-16 00:31:47.000000000 +0200
@@ -7,7 +7,7 @@ contains
   subroutine test0() bind(c)
     use, intrinsic :: iso_c_binding
     implicit none
-    integer, target :: x
+    integer(c_int), target :: x
     type(c_ptr) :: my_c_ptr
     interface
        subroutine test_address(x, expected_value) bind(c)
@@ -16,8 +16,8 @@ contains
          integer(c_int), value :: expected_value
        end subroutine test_address
     end interface
-    x = 100
+    x = 100_c_int
     my_c_ptr = c_loc(x)
-    call test_address(my_c_ptr, 100)
+    call test_address(my_c_ptr, 100_c_int)
   end subroutine test0
 end module c_loc_test
diff -up ../_clean/gcc/testsuite/gfortran.dg/c_loc_tests_2.f03 gcc/testsuite/gfortran.dg/c_loc_tests_2.f03
--- ../_clean/gcc/testsuite/gfortran.dg/c_loc_tests_2.f03	2018-02-18 00:40:36.000000000 +0100
+++ gcc/testsuite/gfortran.dg/c_loc_tests_2.f03	2018-02-18 11:08:52.000000000 +0100
@@ -44,13 +44,13 @@ contains
   end subroutine test0
 
   subroutine test1() bind(c)
-    integer, target, dimension(100) :: int_array_tar
+    integer(c_int), target, dimension(100) :: int_array_tar
     type(c_ptr) :: my_c_ptr_1 = c_null_ptr
     type(c_ptr) :: my_c_ptr_2 = c_null_ptr
     
-    int_array_tar = 100
+    int_array_tar = 100_c_int
     my_c_ptr_1 = c_loc(int_array_tar)
-    if(test_array_address(my_c_ptr_1, 100) .ne. 1) then
+    if(test_array_address(my_c_ptr_1, 100_c_int) .ne. 1) then
        STOP 3
     end if
   end subroutine test1
diff -up ../_clean/gcc/testsuite/gfortran.dg/proc_decl_17.f90 gcc/testsuite/gfortran.dg/proc_decl_17.f90
--- ../_clean/gcc/testsuite/gfortran.dg/proc_decl_17.f90	2018-02-18 00:40:42.000000000 +0100
+++ gcc/testsuite/gfortran.dg/proc_decl_17.f90	2018-02-18 11:08:59.000000000 +0100
@@ -35,7 +35,8 @@ contains
   end function
 
   subroutine check(p,a)
-    integer a(:)
+    use ISO_C_BINDING
+    integer(C_INT) a(:)
     procedure(abs_fun) :: p
     character(size(my_message),C_CHAR) :: c(size(a))
     integer k,l,m
@@ -55,7 +56,7 @@ program prog
 
 use m
 
-integer :: i(4) = (/0,6,12,18/)
+integer(C_INT) :: i(4) = (/0,6,12,18/)
 
 allocate(my_message(1:6))
 
diff -up ../_clean/gcc/testsuite/gfortran.dg/proc_ptr_8.f90 gcc/testsuite/gfortran.dg/proc_ptr_8.f90
--- ../_clean/gcc/testsuite/gfortran.dg/proc_ptr_8.f90	2018-02-18 00:40:41.000000000 +0100
+++ gcc/testsuite/gfortran.dg/proc_ptr_8.f90	2018-02-18 11:40:11.000000000 +0100
@@ -27,11 +27,11 @@ PROCEDURE(mytype), POINTER :: ptype,ptyp
 
 CALL init()
 CALL C_F_PROCPOINTER(funpointer,ptype)
-if (ptype(3) /= 9) STOP 1
+if (ptype(3_c_int) /= 9) STOP 1
 
 ! the stuff below was added with PR 42072
 call setpointer(ptype2)
-if (ptype2(4) /= 12) STOP 2
+if (ptype2(4_c_int) /= 12) STOP 2
 
 contains
 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Patch fortran] PR32957 - C/Fortran interoperability and -fdefault-integer-8
  2018-02-25 23:19 [Patch fortran] PR32957 - C/Fortran interoperability and -fdefault-integer-8 Dominique d'Humières
@ 2018-02-25 23:35 ` Thomas Koenig
  2018-02-26 11:00   ` Dominique d'Humières
  0 siblings, 1 reply; 3+ messages in thread
From: Thomas Koenig @ 2018-02-25 23:35 UTC (permalink / raw)
  To: Dominique d'Humières, gfortran; +Cc: gcc-patches

Hi Dominique,

> OK for trunk? back port?

OK for trunk.

The tests were non-conforming before, so this is also a
step in making our testsuite better.

For gcc-7, I'm not sure I would bother, but OK if
you want to do it.

Regards

	Thomas

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Patch fortran] PR32957 - C/Fortran interoperability and -fdefault-integer-8
  2018-02-25 23:35 ` Thomas Koenig
@ 2018-02-26 11:00   ` Dominique d'Humières
  0 siblings, 0 replies; 3+ messages in thread
From: Dominique d'Humières @ 2018-02-26 11:00 UTC (permalink / raw)
  To: Thomas Koenig; +Cc: gfortran, gcc-patches

Thanks for the quick review, committed as r257985. I have spotted a few similar issues in my recent testing and I have problem with gfortran.dg/bind_c_usage_10.f03 when using -fdefault-integer-8:

/opt/gcc/_clean/gcc/testsuite/gfortran.dg/bind_c_usage_10.f03:66:31:

   integer(c_int) function func4()
                               1
Error: FUNCTION result func4 can't be of type INTEGER(4) in FUNCTION func4 at (1)
/opt/gcc/_clean/gcc/testsuite/gfortran.dg/bind_c_usage_10.f03:59:31:

   integer(c_int) function func3() bind(c, name="myFunc3")
                               1
Error: FUNCTION result func3 can't be of type INTEGER(4) in FUNCTION func3 at (1)
/opt/gcc/_clean/gcc/testsuite/gfortran.dg/bind_c_usage_10.f03:52:31:

   integer(c_int) function func2()
                               1
Error: FUNCTION result func2 can't be of type INTEGER(4) in FUNCTION func2 at (1)
/opt/gcc/_clean/gcc/testsuite/gfortran.dg/bind_c_usage_10.f03:45:31:

   integer(c_int) function func1() bind(c, name="myFunc1")
                               1
Error: FUNCTION result func1 can't be of type INTEGER(4) in FUNCTION func1 at (1)

AFAIU the code func* are integer(c_int), then why these errors?

TIA

Dominique

> Le 26 févr. 2018 à 00:34, Thomas Koenig <tkoenig@netcologne.de> a écrit :
> 
> Hi Dominique,
> 
>> OK for trunk? back port?
> 
> OK for trunk.
> 
> The tests were non-conforming before, so this is also a
> step in making our testsuite better.
> 
> For gcc-7, I'm not sure I would bother, but OK if
> you want to do it.
> 
> Regards
> 
> 	Thomas

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-02-26 11:00 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-25 23:19 [Patch fortran] PR32957 - C/Fortran interoperability and -fdefault-integer-8 Dominique d'Humières
2018-02-25 23:35 ` Thomas Koenig
2018-02-26 11:00   ` Dominique d'Humières

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).