diff options
author | Michael Matz <matz@suse.de> | 2009-09-11 11:08:38 +0000 |
---|---|---|
committer | Michael Matz <matz@gcc.gnu.org> | 2009-09-11 11:08:38 +0000 |
commit | 5c3ec539b72e4e3aa01c760a62af3046f022f8be (patch) | |
tree | e8e3d3e8bd49092da5aef118d9211bdba4575e2c | |
parent | 0b7e34d7dd48aac05ea218b61c84e3a8561fbd77 (diff) | |
download | gcc-5c3ec539b72e4e3aa01c760a62af3046f022f8be.zip gcc-5c3ec539b72e4e3aa01c760a62af3046f022f8be.tar.gz gcc-5c3ec539b72e4e3aa01c760a62af3046f022f8be.tar.bz2 |
re PR c++/41275 (ICE: expand_expr_real_1, at expr.c:8416)
PR middle-end/41275
* tree-inline.c (remap_decls): Don't put DECL_EXTERNAL decls
on the local_decls list.
testsuite/
* g++.dg/tree-ssa/pr41275.C: New test.
From-SVN: r151631
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/tree-ssa/pr41275.C | 16 | ||||
-rw-r--r-- | gcc/tree-inline.c | 1 |
4 files changed, 28 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 45188ca..04d61c6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-09-11 Michael Matz <matz@suse.de> + + PR middle-end/41275 + * tree-inline.c (remap_decls): Don't put DECL_EXTERNAL decls + on the local_decls list. + 2009-09-11 Alexandre Oliva <aoliva@redhat.com> PR debug/41276 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 61ec4ab..2a0705a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-09-11 Michael Matz <matz@suse.de> + + PR middle-end/41275 + * g++.dg/tree-ssa/pr41275.C: New test. + 2009-09-11 Janus Weil <janus@gcc.gnu.org> PR fortran/41242 diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr41275.C b/gcc/testsuite/g++.dg/tree-ssa/pr41275.C new file mode 100644 index 0000000..d9b3dce --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/pr41275.C @@ -0,0 +1,16 @@ +// PR middle-end/41275 +// { dg-do compile } +// { dg-options "-O2" } +// this used to ICE +struct ErrmsgWindow +{ + virtual ~ErrmsgWindow() + { + extern int _switch_mode_errorstr; + _switch_mode_errorstr = 42; + } +}; +void ShowErrorMessage(void) +{ + ErrmsgWindow w; +} diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index fbd973b..b5e7346 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -536,6 +536,7 @@ remap_decls (tree decls, VEC(tree,gc) **nonlocalized_list, copy_body_data *id) if (can_be_nonlocal (old_var, id)) { if (TREE_CODE (old_var) == VAR_DECL + && ! DECL_EXTERNAL (old_var) && (var_ann (old_var) || !gimple_in_ssa_p (cfun))) cfun->local_decls = tree_cons (NULL_TREE, old_var, cfun->local_decls); |