diff options
author | Jason Merrill <jason@redhat.com> | 2012-03-15 17:22:38 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2012-03-15 17:22:38 -0400 |
commit | 92caa91a0d2d14b920a8204f0eb44c5d3bae7309 (patch) | |
tree | 46ff5482e597a1da8507c2252ca4739cd023af48 /gcc | |
parent | 6715d47bba944ef7b268ef54fde1c918013f480b (diff) | |
download | gcc-92caa91a0d2d14b920a8204f0eb44c5d3bae7309.zip gcc-92caa91a0d2d14b920a8204f0eb44c5d3bae7309.tar.gz gcc-92caa91a0d2d14b920a8204f0eb44c5d3bae7309.tar.bz2 |
re PR c++/52582 (g++ ICE when compiling qt-4.8.0 with -O2 on PPC (32bit))
PR c++/52582
* method.c (implicitly_declare_fn): Set DECL_EXTERNAL.
From-SVN: r185443
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/method.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr52582.C | 23 |
4 files changed, 33 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f4f46fe..cf4d453 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2012-03-15 Jason Merrill <jason@redhat.com> + + PR c++/52582 + * method.c (implicitly_declare_fn): Set DECL_EXTERNAL. + 2012-03-15 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c++/44783 diff --git a/gcc/cp/method.c b/gcc/cp/method.c index 0718916..0d4793e 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -1593,6 +1593,7 @@ implicitly_declare_fn (special_function_kind kind, tree type, bool const_p) DECL_DELETED_FN (fn) = deleted_p; DECL_DECLARED_CONSTEXPR_P (fn) = constexpr_p; } + DECL_EXTERNAL (fn) = true; DECL_NOT_REALLY_EXTERN (fn) = 1; DECL_DECLARED_INLINE_P (fn) = 1; gcc_assert (!TREE_USED (fn)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f54a307..10c87e10 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-03-15 Jason Merrill <jason@redhat.com> + + * g++.dg/torture/pr52582.C: New. + 2012-03-15 Bernhard Reutner-Fischer <aldot@gcc.gnu.org> * lib/fortran-modules.exp: New file which was forgotten in r185430. diff --git a/gcc/testsuite/g++.dg/torture/pr52582.C b/gcc/testsuite/g++.dg/torture/pr52582.C new file mode 100644 index 0000000..1b93fc4 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr52582.C @@ -0,0 +1,23 @@ +// PR c++/52582 + +inline void *operator new (__SIZE_TYPE__, void *p) throw () +{ + return p; +} +struct B +{ + virtual ~B (); + B (); +}; +struct A : B +{ + A () : B () {} + virtual void bar (); +}; +void +foo () +{ + char a[64]; + B *b = new (&a) A (); + b->~B (); +} |