From: mpolacek Date: Thu, 14 Apr 2016 16:51:16 +0000 (+0000) Subject: PR c++/70029 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=22dcab66b8b4cb3ce61637474e8fcc6bd9dd2b30;p=thirdparty%2Fgcc.git PR c++/70029 * tree.c (verify_type): Disable the canonical type of main variant check. * g++.dg/torture/pr70029.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@234979 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e56d15bc40de..c4a0759cedc9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2016-04-14 Marek Polacek + Jan Hubicka + + PR c++/70029 + * tree.c (verify_type): Disable the canonical type of main variant + check. + 2016-04-14 Jason Merrill * cfgexpand.c, expr.c: Revert previous change. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b7c5d3c632ce..9cd0c6ce0e89 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-04-14 Marek Polacek + Jan Hubicka + + PR c++/70029 + * g++.dg/torture/pr70029.C: New test. + 2016-04-14 Martin Sebor * g++.dg/cpp1y/vla11.C: Avoid using attribute aligned to increase diff --git a/gcc/testsuite/g++.dg/torture/pr70029.C b/gcc/testsuite/g++.dg/torture/pr70029.C new file mode 100644 index 000000000000..9592f0cc9878 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr70029.C @@ -0,0 +1,12 @@ +// PR c++/70029 +// { dg-do compile } +// { dg-options "-std=c++11 -g -flto" } +// { dg-require-effective-target lto } + +struct A +{ + A(); + int foo() && __attribute__ ((__warn_unused_result__)) { return 0; } +}; + +A a; diff --git a/gcc/tree.c b/gcc/tree.c index ed28429b1e10..c64d7204acb8 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -13584,7 +13584,9 @@ verify_type (const_tree t) debug_tree (ct); error_found = true; } - if (TYPE_MAIN_VARIANT (t) == t && ct && TYPE_MAIN_VARIANT (ct) != ct) + /* FIXME: this is violated by the C++ FE as discussed in PR70029, when + FUNCTION_*_QUALIFIED flags are set. */ + if (0 && TYPE_MAIN_VARIANT (t) == t && ct && TYPE_MAIN_VARIANT (ct) != ct) { error ("TYPE_CANONICAL of main variant is not main variant"); debug_tree (ct);