From 88ce30eb515599996764efaf469b5d4e7970ba33 Mon Sep 17 00:00:00 2001 From: domob Date: Thu, 16 Oct 2008 16:28:23 +0000 Subject: [PATCH] 2008-10-16 Daniel Kraft * resolve.c (resolve_elemental_actual): Handle calls to intrinsic subroutines correctly. 2008-10-16 Daniel Kraft * gfortran.dg/elemental_intrinsic_1.f03: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@141175 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/resolve.c | 12 ++++++++++-- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gfortran.dg/elemental_intrinsic_1.f03 | 11 +++++++++++ 4 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/elemental_intrinsic_1.f03 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 1d26c1f..d4ff6b3 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2008-10-16 Daniel Kraft + + * resolve.c (resolve_elemental_actual): Handle calls to intrinsic + subroutines correctly. + 2008-10-13 Kaveh R. Ghazi * simplify.c: Remove MPFR_VERSION_NUM(2,3,0) conditionals. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 70d3ad5..1816907 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -1352,10 +1352,18 @@ resolve_elemental_actual (gfc_expr *expr, gfc_code *c) else return SUCCESS; } - else if (c && c->ext.actual != NULL && c->symtree->n.sym->attr.elemental) + else if (c && c->ext.actual != NULL) { arg0 = c->ext.actual; - esym = c->symtree->n.sym; + + if (c->resolved_sym) + esym = c->resolved_sym; + else + esym = c->symtree->n.sym; + gcc_assert (esym); + + if (!esym->attr.elemental) + return SUCCESS; } else return SUCCESS; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9148684..bb15a26 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2008-10-16 Daniel Kraft + + * gfortran.dg/elemental_intrinsic_1.f03: New test. + 2008-10-16 Jakub Jelinek PR tree-optimization/37664 diff --git a/gcc/testsuite/gfortran.dg/elemental_intrinsic_1.f03 b/gcc/testsuite/gfortran.dg/elemental_intrinsic_1.f03 new file mode 100644 index 0000000..8fdaa0f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/elemental_intrinsic_1.f03 @@ -0,0 +1,11 @@ +! { dg-do compile } + +! Conformance-checking of arguments was not done for intrinsic elemental +! subroutines, check this works now. + +! This is the test from PR fortran/35681, comment #1 (second program). + + integer, dimension(10) :: ILA1 = (/1,2,3,4,5,6,7,8,9,10/) + call mvbits ((ILA1((/9/))), 2, 4, ILA1, 3) ! { dg-error "Different shape" } + write (*,'(10(I3))') ila1 + end -- 2.7.4