aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2016-09-14 12:18:10 -0400
committerJason Merrill <jason@gcc.gnu.org>2016-09-14 12:18:10 -0400
commit387113816fdaa179abf1b9babfb11a421217dc10 (patch)
tree5409da7b5fa61940cc41b5b9169dea98c639c58f /gcc
parent0761f6bfb315e6dd471ac62024e0703345c7ab47 (diff)
downloadgcc-387113816fdaa179abf1b9babfb11a421217dc10.zip
gcc-387113816fdaa179abf1b9babfb11a421217dc10.tar.gz
gcc-387113816fdaa179abf1b9babfb11a421217dc10.tar.bz2
c-common.c (check_cxx_fundamental_alignment_constraints): Don't limit FIELD_DECL, either.
* c-common.c (check_cxx_fundamental_alignment_constraints): Don't limit FIELD_DECL, either. From-SVN: r240139
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-family/ChangeLog5
-rw-r--r--gcc/c-family/c-common.c46
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/gen-attrs-52.C9
3 files changed, 23 insertions, 37 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index e1fa3b7..3258816 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,8 @@
+2016-09-14 Jason Merrill <jason@redhat.com>
+
+ * c-common.c (check_cxx_fundamental_alignment_constraints): Don't
+ limit FIELD_DECL, either.
+
2016-09-14 Marek Polacek <polacek@redhat.com>
* c-common.c (c_common_truthvalue_conversion): Use false instead of 0.
diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index b561f9f..57b6671 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -7868,43 +7868,21 @@ check_cxx_fundamental_alignment_constraints (tree node,
if (cxx_fundamental_alignment_p (requested_alignment))
return true;
- if (DECL_P (node))
+ if (VAR_P (node))
{
if (TREE_STATIC (node))
- {
- /* For file scope variables and static members, the target
- supports alignments that are at most
- MAX_OFILE_ALIGNMENT. */
- if (requested_alignment > (max_align = MAX_OFILE_ALIGNMENT))
- alignment_too_large_p = true;
- }
+ /* For file scope variables and static members, the target supports
+ alignments that are at most MAX_OFILE_ALIGNMENT. */
+ max_align = MAX_OFILE_ALIGNMENT;
else
- {
-#ifdef BIGGEST_FIELD_ALIGNMENT
-#define MAX_TARGET_FIELD_ALIGNMENT BIGGEST_FIELD_ALIGNMENT
-#else
-#define MAX_TARGET_FIELD_ALIGNMENT BIGGEST_ALIGNMENT
-#endif
- /* For non-static members, the target supports either
- alignments that at most either BIGGEST_FIELD_ALIGNMENT
- if it is defined or BIGGEST_ALIGNMENT. */
- max_align = MAX_TARGET_FIELD_ALIGNMENT;
- if (TREE_CODE (node) == FIELD_DECL
- && requested_alignment > (max_align = MAX_TARGET_FIELD_ALIGNMENT))
- alignment_too_large_p = true;
-#undef MAX_TARGET_FIELD_ALIGNMENT
- /* For stack variables, the target supports at most
- MAX_STACK_ALIGNMENT. */
- else if (decl_function_context (node) != NULL
- && requested_alignment > (max_align = MAX_STACK_ALIGNMENT))
- alignment_too_large_p = true;
- }
- }
- else if (TYPE_P (node))
- {
- /* Let's be liberal for types; don't limit their alignment any more than
- check_user_alignment already did. */
- }
+ /* For stack variables, the target supports at most
+ MAX_STACK_ALIGNMENT. */
+ max_align = MAX_STACK_ALIGNMENT;
+ if (requested_alignment > max_align)
+ alignment_too_large_p = true;
+ }
+ /* Let's be liberal for types and fields; don't limit their alignment any
+ more than check_user_alignment already did. */
if (alignment_too_large_p)
pedwarn (input_location, OPT_Wattributes,
diff --git a/gcc/testsuite/g++.dg/cpp0x/gen-attrs-52.C b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-52.C
index 0f87fd4..ad7cffc 100644
--- a/gcc/testsuite/g++.dg/cpp0x/gen-attrs-52.C
+++ b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-52.C
@@ -3,19 +3,22 @@
struct A {int i;} a [[gnu::aligned(16)]];
struct B {int i;} __attribute__((aligned(16))) b;
+constexpr unsigned si = sizeof(int);
+constexpr unsigned ai = alignof(int);
+
int
main ()
{
A aa;
B bb;
- static_assert (sizeof (a) == 4, "sizeof (a) should be 4");
+ static_assert (sizeof (a) == si, "sizeof (a) should be 4");
static_assert (sizeof (b) == 16, "sizeof (b) should be 16");
- static_assert (sizeof (aa) == 4, "sizeof (aa) should be 4");
+ static_assert (sizeof (aa) == si, "sizeof (aa) should be 4");
static_assert (sizeof (bb) == 16, "sizeof (bb) should be 16");
static_assert (__alignof__ (a) == 16, "alignof (a) should be 16");
static_assert (__alignof__ (b) == 16, "alignof (b) should be 16");
- static_assert (__alignof__ (aa) == 4, "alignof (aa) should be 4");
+ static_assert (__alignof__ (aa) == ai, "alignof (aa) should be 4");
static_assert (__alignof__ (bb) == 16, "alignof (bb) should be 16");
}