* [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).