diff options
author | Michael Matz <matz@suse.de> | 2009-09-17 11:11:58 +0000 |
---|---|---|
committer | Michael Matz <matz@gcc.gnu.org> | 2009-09-17 11:11:58 +0000 |
commit | 040c6d51daadf242937549fb7bc0e5a375fa1666 (patch) | |
tree | 6faf3b30da5c11513bde779849161da980479ec6 /gcc | |
parent | 0714aafa1fd25aa1524869f4284b752e1a0e3161 (diff) | |
download | gcc-040c6d51daadf242937549fb7bc0e5a375fa1666.zip gcc-040c6d51daadf242937549fb7bc0e5a375fa1666.tar.gz gcc-040c6d51daadf242937549fb7bc0e5a375fa1666.tar.bz2 |
re PR middle-end/41347 (ICE with -O3 or '-O2 -finline-functions')
PR middle-end/41347
* tree.c (build_type_attribute_qual_variant): Export.
* tree.h (build_type_attribute_qual_variant): Declare.
* tree-inline.c (remap_type_1): Use it to build variants with
the original qualifiers and attributes.
testsuite/
* gfortran.dg/pr41347.f90: New test.
From-SVN: r151799
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr41347.f90 | 32 | ||||
-rw-r--r-- | gcc/tree-inline.c | 8 | ||||
-rw-r--r-- | gcc/tree.c | 2 | ||||
-rw-r--r-- | gcc/tree.h | 1 |
6 files changed, 55 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6e4f28f..7a31855 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2009-09-17 Michael Matz <matz@suse.de> + + PR middle-end/41347 + * tree.c (build_type_attribute_qual_variant): Export. + * tree.h (build_type_attribute_qual_variant): Declare. + * tree-inline.c (remap_type_1): Use it to build variants with + the original qualifiers and attributes. + 2009-09-17 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * cfglayout.c (fixup_reorder_chain): Accept conditional jumps diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1a24f25..691e328 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-09-17 Michael Matz <matz@suse.de> + + PR middle-end/41347 + * gfortran.dg/pr41347.f90: New test. + 2009-09-17 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * gcc.c-torture/compile/20090917-1.c: New testcase. diff --git a/gcc/testsuite/gfortran.dg/pr41347.f90 b/gcc/testsuite/gfortran.dg/pr41347.f90 new file mode 100644 index 0000000..ae48857 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr41347.f90 @@ -0,0 +1,32 @@ +! { dg-do compile } +! { dg-options "-O3" } +module hsl_ma41_m + + implicit none + + contains + + subroutine solve_ma41 + integer, dimension(20) :: info + call prininfo(15, info) + end subroutine solve_ma41 + + subroutine prininfo (ni, info) + integer, intent(in) :: ni + integer, intent(in), dimension(:) :: info + + integer i + + call prinfo + + contains + + subroutine prinfo + do i = 1, ni + write(*,'(i5,1x,i0)') i, info(i) + end do + end subroutine prinfo + + end subroutine prininfo + +end module hsl_ma41_m diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 5ada378..feb7499 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -342,6 +342,10 @@ remap_type_1 (tree type, copy_body_data *id) new_tree = build_pointer_type_for_mode (remap_type (TREE_TYPE (type), id), TYPE_MODE (type), TYPE_REF_CAN_ALIAS_ALL (type)); + if (TYPE_ATTRIBUTES (type) || TYPE_QUALS (type)) + new_tree = build_type_attribute_qual_variant (new_tree, + TYPE_ATTRIBUTES (type), + TYPE_QUALS (type)); insert_decl_map (id, type, new_tree); return new_tree; } @@ -350,6 +354,10 @@ remap_type_1 (tree type, copy_body_data *id) new_tree = build_reference_type_for_mode (remap_type (TREE_TYPE (type), id), TYPE_MODE (type), TYPE_REF_CAN_ALIAS_ALL (type)); + if (TYPE_ATTRIBUTES (type) || TYPE_QUALS (type)) + new_tree = build_type_attribute_qual_variant (new_tree, + TYPE_ATTRIBUTES (type), + TYPE_QUALS (type)); insert_decl_map (id, type, new_tree); return new_tree; } @@ -4034,7 +4034,7 @@ iterative_hash_host_wide_int (HOST_WIDE_INT val, hashval_t val2) Record such modified types already made so we don't make duplicates. */ -static tree +tree build_type_attribute_qual_variant (tree ttype, tree attribute, int quals) { if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute)) @@ -3997,6 +3997,7 @@ extern tree make_tree (tree, rtx); extern tree build_type_attribute_variant (tree, tree); extern tree build_decl_attribute_variant (tree, tree); +extern tree build_type_attribute_qual_variant (tree, tree, int); /* Structure describing an attribute and a function to handle it. */ struct attribute_spec |