]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR c++/90736 - bogus error with alignof.
authorMarek Polacek <polacek@redhat.com>
Wed, 12 Jun 2019 21:12:00 +0000 (21:12 +0000)
committerMarek Polacek <mpolacek@gcc.gnu.org>
Wed, 12 Jun 2019 21:12:00 +0000 (21:12 +0000)
* constexpr.c (adjust_temp_type): Use cv_unqualified type.

* g++.dg/cpp0x/alignof5.C: New test.

From-SVN: r272219

gcc/cp/ChangeLog
gcc/cp/constexpr.c
gcc/testsuite/g++.dg/cpp0x/alignof5.C [new file with mode: 0644]

index 8e33634f7a01465058412baa658d38d51e3efe71..af8a3ccbe1d3d40fd555938c60c69a47ace08ef1 100644 (file)
@@ -1,3 +1,8 @@
+2019-06-12  Marek Polacek  <polacek@redhat.com>
+
+       PR c++/90736 - bogus error with alignof.
+       * constexpr.c (adjust_temp_type): Use cv_unqualified type.
+
 2019-06-11  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/90810
index 9c13f0d5f320b7d8acca2a9199c3afa3c45efe4f..96558b839ab29a559296ceedb14f7c6b210dbff2 100644 (file)
@@ -1337,7 +1337,9 @@ adjust_temp_type (tree type, tree temp)
   if (TREE_CODE (temp) == EMPTY_CLASS_EXPR)
     return build0 (EMPTY_CLASS_EXPR, type);
   gcc_assert (scalarish_type_p (type));
-  return cp_fold_convert (type, temp);
+  /* Now we know we're dealing with a scalar, and a prvalue of non-class
+     type is cv-unqualified.  */
+  return cp_fold_convert (cv_unqualified (type), temp);
 }
 
 /* Callback for walk_tree used by unshare_constructor.  */
diff --git a/gcc/testsuite/g++.dg/cpp0x/alignof5.C b/gcc/testsuite/g++.dg/cpp0x/alignof5.C
new file mode 100644 (file)
index 0000000..09354d3
--- /dev/null
@@ -0,0 +1,6 @@
+// PR c++/90736 - bogus error with alignof.
+// { dg-do compile { target c++11 } }
+
+constexpr int fn(const int b) { return b; }
+constexpr int c = fn(alignof(int));
+alignas(c) char d;