PR/69089: C++-11: Ingore "alignas(0)".
authorDominik Vogt <vogt@linux.vnet.ibm.com>
Fri, 29 Apr 2016 09:20:06 +0000 (09:20 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Fri, 29 Apr 2016 09:20:06 +0000 (09:20 +0000)
gcc/c-family/ChangeLog:

2016-04-29  Dominik Vogt  <vogt@linux.vnet.ibm.com>

PR/69089
* c-common.c (handle_aligned_attribute): Allow 0 as an argument to the
"aligned" attribute.

gcc/testsuite/ChangeLog:

2016-04-29  Dominik Vogt  <vogt@linux.vnet.ibm.com>

PR/69089
* g++.dg/cpp0x/alignas6.C: New test.

From-SVN: r235629

gcc/c-family/ChangeLog
gcc/c-family/c-common.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/alignas6.C [new file with mode: 0644]

index 9e1695e5601e09a3b2e1f07fcd76f181c8095b28..f70dc0ea66dd276cbc35543243a11ba7c960d8e4 100644 (file)
@@ -1,3 +1,9 @@
+2016-04-29  Dominik Vogt  <vogt@linux.vnet.ibm.com>
+
+       PR/69089
+       * c-common.c (handle_aligned_attribute): Allow 0 as an argument to the
+       "aligned" attribute.
+
 2016-04-28  Jason Merrill  <jason@redhat.com>
 
        * c-lex.c (c_common_has_attribute): Handle nodiscard.
index c086dee6ec881e72ae87bde3e40c7d1f63e46495..b2219791881bbb0a742c3501e378b40ffa8c74b1 100644 (file)
@@ -7815,7 +7815,7 @@ handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
   else if (TYPE_P (*node))
     type = node, is_type = 1;
 
-  if ((i = check_user_alignment (align_expr, false)) == -1
+  if ((i = check_user_alignment (align_expr, true)) == -1
       || !check_cxx_fundamental_alignment_constraints (*node, i, flags))
     *no_add_attrs = true;
   else if (is_type)
index 020b08e0b4a4c4fe2f304065adaf4bd7e2ea31db..7dfa23db3c132fc8613896a26175a8e0325897a3 100644 (file)
@@ -1,3 +1,8 @@
+2016-04-29  Dominik Vogt  <vogt@linux.vnet.ibm.com>
+
+       PR/69089
+       * g++.dg/cpp0x/alignas6.C: New test.
+
 2016-04-29  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
        * gcc/testsuite/gcc.dg/cpp/mac-dir-2.c: Remove pointless duplicate
diff --git a/gcc/testsuite/g++.dg/cpp0x/alignas6.C b/gcc/testsuite/g++.dg/cpp0x/alignas6.C
new file mode 100644 (file)
index 0000000..f3252a9
--- /dev/null
@@ -0,0 +1,29 @@
+// PR c++/69089
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wno-attributes" }
+
+alignas (0) int valid1;
+alignas (1 - 1) int valid2;
+struct Tvalid
+{
+  alignas (0) int i;
+  alignas (2 * 0) int j;
+};
+
+alignas (-1) int invalid1; /* { dg-error "not a positive power of 2" } */
+alignas (1 - 2) int invalid2; /* { dg-error "not a positive power of 2" } */
+struct Tinvalid
+{
+  alignas (-1) int i; /* { dg-error "not a positive power of 2" } */
+  alignas (2 * 0 - 1) int j; /* { dg-error "not a positive power of 2" } */
+};
+
+template <int N> struct TNvalid1 { alignas (N) int i; };
+TNvalid1<0> SNvalid1;
+template <int N> struct TNvalid2 { alignas (N) int i; };
+TNvalid2<1 - 1> SNvalid2;
+
+template <int N> struct TNinvalid1 { alignas (N) int i; }; /* { dg-error "not a positive power of 2" } */
+TNinvalid1<-1> SNinvalid1;
+template <int N> struct TNinvalid2 { alignas (N) int i; }; /* { dg-error "not a positive power of 2" } */
+TNinvalid2<1 - 2> SNinvalid2;