public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Dominik Vogt <vogt@linux.vnet.ibm.com>
To: gcc-patches@gcc.gnu.org
Cc: Andreas Krebbel <krebbel@linux.vnet.ibm.com>
Subject: Re: [PATCH] PR/68089: C++-11: Ingore "alignas(0)".
Date: Mon, 04 Jan 2016 11:34:00 -0000	[thread overview]
Message-ID: <20160104113321.GA30608@linux.vnet.ibm.com> (raw)
In-Reply-To: <56871F74.8060406@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1068 bytes --]

On Fri, Jan 01, 2016 at 05:53:08PM -0700, Martin Sebor wrote:
> On 12/31/2015 04:50 AM, Dominik Vogt wrote:
> >The attached patch fixes C++-11 handling of "alignas(0)" which
> >should be ignored but currently generates an error message.  A
> >test case is included; the patch has been tested on S390x.  Since
> >it's a language issue it should be independent of the backend
> >used.
> 
> The patch doesn't handle value-dependent expressions(*).

> It
> seems that the problem is in handle_aligned_attribute() calling
> check_user_alignment() with the second argument (ALLOW_ZERO)
> set to false.  Calling it with true fixes the problem and handles
> value-dependent expressions (I haven't done any more testing beyond
> that).

Like the attached patch?  (Passes the testsuite on s390x.)

But wouldn't an "aligned" attribute be added, allowing the backend
to possibly generate an error or a warning?

> Also, in the test, I noticed the definition of the first struct
> is missing the terminating semicolon.

Yeah.

Ciao

Dominik ^_^  ^_^

-- 

Dominik Vogt
IBM Germany

[-- Attachment #2: 0001-ChangeLog --]
[-- Type: text/plain, Size: 202 bytes --]

gcc/c-family/ChangeLog

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

gcc/testsuite/ChangeLog

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

[-- Attachment #3: 0001-C-11-Ingore-alignas-0-instead-of-generating-an-error.patch --]
[-- Type: text/x-diff, Size: 2267 bytes --]

From 2461293b9070da74950fd0ae055d1239cc69ce67 Mon Sep 17 00:00:00 2001
From: Dominik Vogt <vogt@de.ibm.com>
Date: Wed, 30 Dec 2015 15:08:52 +0100
Subject: [PATCH] C++-11: Ingore "alignas(0)" instead of generating an
 error message.

This is required by the C++-11 standard.
---
 gcc/c-family/c-common.c               |  2 +-
 gcc/testsuite/g++.dg/cpp0x/alignas5.C | 29 +++++++++++++++++++++++++++++
 2 files changed, 30 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/g++.dg/cpp0x/alignas5.C

diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index 653d1dc..9eb25a9 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -7804,7 +7804,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)
diff --git a/gcc/testsuite/g++.dg/cpp0x/alignas5.C b/gcc/testsuite/g++.dg/cpp0x/alignas5.C
new file mode 100644
index 0000000..f3252a9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alignas5.C
@@ -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;
-- 
2.3.0


  reply	other threads:[~2016-01-04 11:34 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-31 11:50 Dominik Vogt
2016-01-02  0:53 ` Martin Sebor
2016-01-04 11:34   ` Dominik Vogt [this message]
2016-01-04 16:55     ` Martin Sebor
2016-02-05 16:29     ` [PING, PATCH] " Dominik Vogt
2016-02-22 11:57     ` [PING 2, " Dominik Vogt
2016-03-02  6:36     ` [PING 3, " Dominik Vogt
2016-03-15  6:12     ` [PING 4, " Dominik Vogt
2016-04-05  9:43     ` [PING 5, " Dominik Vogt
2016-04-28  3:46       ` Jeff Law
2016-04-12  9:04     ` [PING 6, " Dominik Vogt
2016-04-27  7:35     ` [PING 7, " Dominik Vogt
2016-04-29  9:23 ` [PATCH] " Andreas Krebbel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160104113321.GA30608@linux.vnet.ibm.com \
    --to=vogt@linux.vnet.ibm.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=krebbel@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).