aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2013-05-20 09:50:54 +0200
committerMarc Glisse <glisse@gcc.gnu.org>2013-05-20 07:50:54 +0000
commit5657d9661696f32b6bab45f511e67fa31b7aebc3 (patch)
tree1c04dc3eecc35204ce353b4dba4f02e739696b09 /gcc
parente82a38701a8d27d2e2cf3c650acdb44cdaf6dce3 (diff)
downloadgcc-5657d9661696f32b6bab45f511e67fa31b7aebc3.zip
gcc-5657d9661696f32b6bab45f511e67fa31b7aebc3.tar.gz
gcc-5657d9661696f32b6bab45f511e67fa31b7aebc3.tar.bz2
re PR c++/57175 (NRVO and alignment)
2013-05-20 Marc Glisse <marc.glisse@inria.fr> PR c++/57175 gcc/cp/ * typeck.c (check_return_expr): Reverse the alignment comparison. gcc/testsuite/ * g++.dg/pr57175.C: New testcase. From-SVN: r199093
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/typeck.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/pr57175.C19
4 files changed, 30 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 14093eb..73b8deb 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2013-05-20 Marc Glisse <marc.glisse@inria.fr>
+
+ PR c++/57175
+ * typeck.c (check_return_expr): Reverse the alignment comparison.
+
2013-05-17 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/18126
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index fb75847..a531d030 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -8369,7 +8369,7 @@ check_return_expr (tree retval, bool *no_warning)
&& DECL_CONTEXT (retval) == current_function_decl
&& ! TREE_STATIC (retval)
&& ! DECL_ANON_UNION_VAR_P (retval)
- && (DECL_ALIGN (retval) >= DECL_ALIGN (result))
+ && (DECL_ALIGN (retval) <= DECL_ALIGN (result))
/* The cv-unqualified type of the returned value must be the
same as the cv-unqualified return type of the
function. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6fd1b2e..5a113d7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-05-20 Marc Glisse <marc.glisse@inria.fr>
+
+ PR c++/57175
+ * g++.dg/pr57175.C: New testcase.
+
2013-05-17 Easwaran Raman <eraman@google.com>
* gcc.dg/tree-ssa/reassoc-28.c: New testcase.
diff --git a/gcc/testsuite/g++.dg/pr57175.C b/gcc/testsuite/g++.dg/pr57175.C
new file mode 100644
index 0000000..f54162f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr57175.C
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c++11" } */
+
+extern "C" void do_not_remove ();
+
+struct A
+{
+ A () { }
+ A (A const&) { do_not_remove (); }
+};
+
+A
+f ()
+{
+ alignas (2 * alignof (A)) A x;
+ return x;
+}
+
+/* { dg-final { scan-assembler "do_not_remove" } } */