]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/42119 (internal compiler error: in expand_expr_addr_expr_1, at expr...
authorRichard Guenther <rguenther@suse.de>
Mon, 30 Nov 2009 10:39:36 +0000 (10:39 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 30 Nov 2009 10:39:36 +0000 (10:39 +0000)
2009-11-30  Richard Guenther  <rguenther@suse.de>

PR middle-end/42119
PR fortran/38530
* expr.c (expand_expr_addr_expr_1): Properly expand the initializer
of CONST_DECLs.

* gfortran.dg/pr42119.f90: New testcase.

From-SVN: r154778

gcc/ChangeLog
gcc/expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr42119.f90 [new file with mode: 0644]

index e9b2e7320ed9869e29b128cfaed1d29afd044bfb..0aa39ad92ba0a4f84bb3a05aad1ac3b0e455ebe2 100644 (file)
@@ -1,3 +1,10 @@
+2009-11-30  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/42119
+       PR fortran/38530
+       * expr.c (expand_expr_addr_expr_1): Properly expand the initializer
+       of CONST_DECLs.
+
 2009-11-30  Richard Guenther  <rguenther@suse.de>
 
        * tree-into-ssa.c (insert_phi_nodes): Add PHI nodes in
index 75c17923cd0651d6bb790c6f5777fa7211bb2675..13ae5fffc9f05460547b1c360fa4c62dc57bd1f2 100644 (file)
@@ -6840,9 +6840,8 @@ expand_expr_addr_expr_1 (tree exp, rtx target, enum machine_mode tmode,
       return expand_expr (TREE_OPERAND (exp, 0), target, tmode, modifier);
 
     case CONST_DECL:
-      /* Recurse and make the output_constant_def clause above handle this.  */
-      return expand_expr_addr_expr_1 (DECL_INITIAL (exp), target,
-                                     tmode, modifier, as);
+      /* Expand the initializer like constants above.  */
+      return XEXP (expand_expr_constant (DECL_INITIAL (exp), 0, modifier), 0);
 
     case REALPART_EXPR:
       /* The real part of the complex number is always first, therefore
index f09f148f3f82761714b4690fa72b32bc7722155a..6d75d60e37d39d71fa9cdf6f711c8b304a31a6a9 100644 (file)
@@ -1,3 +1,9 @@
+2009-11-30  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/42119
+       PR fortran/38530
+       * gfortran.dg/pr42119.f90: New testcase.
+
 2009-11-30  Dodji Seketeli  <dodji@redhat.com>
 
        PR c++/42069
diff --git a/gcc/testsuite/gfortran.dg/pr42119.f90 b/gcc/testsuite/gfortran.dg/pr42119.f90
new file mode 100644 (file)
index 0000000..f848e9e
--- /dev/null
@@ -0,0 +1,24 @@
+! { dg-do compile }
+
+module Test
+use ISO_C_BINDING
+
+contains
+
+subroutine Callback(arg) bind(C)
+  integer(C_INT)  :: arg
+end subroutine Callback
+
+subroutine Check(proc)
+  type(C_FUNPTR)  :: proc
+end subroutine Check
+
+end module Test
+
+
+program Main
+  use Test
+  type(C_FUNPTR)  :: proc
+
+  call Check(C_FUNLOC(Callback))
+end program Main