aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2008-01-26 21:44:49 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2008-01-26 21:44:49 +0100
commit2c80cb0ef7df9e250a0a7826a4414d0895c65027 (patch)
treeb13b06169ec8a3793b0080fe6e734a118ac9f219 /gcc
parent987dbd1ba6138fa38e1526a66db99f62e47d3d98 (diff)
downloadgcc-2c80cb0ef7df9e250a0a7826a4414d0895c65027.zip
gcc-2c80cb0ef7df9e250a0a7826a4414d0895c65027.tar.gz
gcc-2c80cb0ef7df9e250a0a7826a4414d0895c65027.tar.bz2
re PR fortran/34848 (internal compiler error with optional argument of character type and array return type)
2008-01-26 Tobias Burnus <burnus@net-b.de> PR fortran/34848 * trans-expr.c (gfc_conv_function_call): Don't call gfc_add_interface_mapping if the expression is NULL. 2008-01-26 Tobias Burnus <burnus@net-b.de> PR fortran/34848 * gfortran.dg/missing_optional_dummy_5.f90: New. From-SVN: r131876
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-expr.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/missing_optional_dummy_5.f9029
4 files changed, 41 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 0c8f4a2..9e0c2f0 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2008-01-26 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/34848
+ * trans-expr.c (gfc_conv_function_call): Don't call
+ gfc_add_interface_mapping if the expression is NULL.
+
2008-01-26 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/31610
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index 9e30a99..89bc3c2 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -2506,7 +2506,7 @@ gfc_conv_function_call (gfc_se * se, gfc_symbol * sym,
}
}
- if (fsym && need_interface_mapping)
+ if (fsym && need_interface_mapping && e)
gfc_add_interface_mapping (&mapping, fsym, &parmse, e);
gfc_add_block_to_block (&se->pre, &parmse.pre);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6974e21..65924d2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-01-26 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/34848
+ * gfortran.dg/missing_optional_dummy_5.f90: New.
+
2008-01-26 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* gcc.dg/tree-ssa/20070302-1.c (baz): Mark with attribute
diff --git a/gcc/testsuite/gfortran.dg/missing_optional_dummy_5.f90 b/gcc/testsuite/gfortran.dg/missing_optional_dummy_5.f90
new file mode 100644
index 0000000..2be90fd
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/missing_optional_dummy_5.f90
@@ -0,0 +1,29 @@
+! { dg-do compile }
+! { dg-options "-fdump-tree-original" }
+!
+! PR fortran/34848
+!
+! This was before giving an ICE; additionally
+! the "0" for the string size of the absent optional
+! argument was missing.
+!
+module krmod
+contains
+ subroutine doit()
+ implicit none
+ real :: doit1(2)
+ doit1 = tm_doit()
+ return
+ end subroutine doit
+ function tm_doit(genloc)
+ implicit none
+ character, optional :: genloc
+ real :: tm_doit(2)
+ tm_doit = 42.0
+ end function tm_doit
+end module krmod
+
+! { dg-final { scan-tree-dump " tm_doit \\(&parm.7, 0B, 0\\);" "original" } }
+! { dg-final { cleanup-tree-dump "original" } }
+! { dg-final { cleanup-modules "pr22146" } }
+