From: Tobias Burnus Date: Tue, 16 Apr 2013 14:17:15 +0000 (+0200) Subject: re PR fortran/56969 (ISO_C_BINDING regression with current trunk) X-Git-Tag: releases/gcc-4.9.0~6413 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=326785a3e529f6a5b6d7d46c8e7ebfeb94ee12df;p=thirdparty%2Fgcc.git re PR fortran/56969 (ISO_C_BINDING regression with current trunk) 2013-04-16 Tobias Burnus PR fortran/56969 * intrinsic.c (gfc_intrinsic_func_interface): Don't set module name to "(intrinsic)" for intrinsics from intrinsic modules. 2013-04-16 Tobias Burnus PR fortran/56969 * gfortran.dg/c_assoc_5.f90: New. From-SVN: r198000 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 8baf108dd258..34719a1a9a68 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2013-04-16 Tobias Burnus + + PR fortran/56969 + * intrinsic.c (gfc_intrinsic_func_interface): Don't set + module name to "(intrinsic)" for intrinsics from intrinsic + modules. + 2013-04-15 Tobias Burnus * intrinsic.texi (SYSTEM_CLOCK): Recommend kind=8. diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c index c43127978af9..688332f212b7 100644 --- a/gcc/fortran/intrinsic.c +++ b/gcc/fortran/intrinsic.c @@ -4236,7 +4236,8 @@ gfc_intrinsic_func_interface (gfc_expr *expr, int error_flag) got_specific: expr->value.function.isym = specific; - gfc_intrinsic_symbol (expr->symtree->n.sym); + if (!expr->symtree->n.sym->module) + gfc_intrinsic_symbol (expr->symtree->n.sym); if (!error_flag) gfc_pop_suppress_errors (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1d7c65ba4580..deb85a7e36bd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-04-16 Tobias Burnus + + PR fortran/56969 + * gfortran.dg/c_assoc_5.f90: New. + 2013-04-16 Uros Bizjak * g++.dg/ipa/devirt-c-7.C: Require nonpic effective target. diff --git a/gcc/testsuite/gfortran.dg/c_assoc_5.f90 b/gcc/testsuite/gfortran.dg/c_assoc_5.f90 new file mode 100644 index 000000000000..105b8f8c398d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/c_assoc_5.f90 @@ -0,0 +1,69 @@ +! { dg-do compile } +! +! PR fortran/56969 +! +! Contributed by Salvatore Filippone +! +! Was before rejected as the different c_associated weren't recognized to +! come from the same module. +! +module test_mod + use iso_c_binding + + type(c_ptr), save :: test_context = c_null_ptr + + type, bind(c) :: s_Cmat + type(c_ptr) :: Mat = c_null_ptr + end type s_Cmat + + + interface + function FtestCreate(context) & + & bind(c,name="FtestCreate") result(res) + use iso_c_binding + type(c_ptr) :: context + integer(c_int) :: res + end function FtestCreate + end interface +contains + + function initFtest() result(res) + implicit none + integer(c_int) :: res + if (c_associated(test_context)) then + res = 0 + else + res = FtestCreate(test_context) + end if + end function initFtest +end module test_mod + +module base_mat_mod + type base_sparse_mat + integer, allocatable :: ia(:) + end type base_sparse_mat +end module base_mat_mod + +module extd_mat_mod + + use iso_c_binding + use test_mod + use base_mat_mod + + type, extends(base_sparse_mat) :: extd_sparse_mat + type(s_Cmat) :: deviceMat + end type extd_sparse_mat + +end module extd_mat_mod + +subroutine extd_foo(a) + + use extd_mat_mod + implicit none + class(extd_sparse_mat), intent(inout) :: a + + if (c_associated(a%deviceMat%Mat)) then + write(*,*) 'C Associated' + end if + +end subroutine extd_foo