aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2022-04-12 16:06:18 -0400
committerJason Merrill <jason@redhat.com>2022-04-12 16:45:41 -0400
commit164c6a1c5d7f99235f1a41440eacac7a977e8fbd (patch)
treeb1bc9e232808f648390684d2099a6976c3070e46
parentaa7874596b9f12b25a3214b0a143b040fafa1f10 (diff)
downloadgcc-164c6a1c5d7f99235f1a41440eacac7a977e8fbd.zip
gcc-164c6a1c5d7f99235f1a41440eacac7a977e8fbd.tar.gz
gcc-164c6a1c5d7f99235f1a41440eacac7a977e8fbd.tar.bz2
c++: non-array new alignment [PR102071]
While considering the PR102071 patch for backporting, I noticed that I was considering the alignment of the array new cookie even when there isn't one because we aren't allocating an array. PR c++/102071 gcc/cp/ChangeLog: * init.cc (build_new_1): Check array_p for alignment. gcc/testsuite/ChangeLog: * g++.dg/cpp1z/aligned-new9.C: Add single-object test.
-rw-r--r--gcc/cp/init.cc2
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/aligned-new9.C4
2 files changed, 5 insertions, 1 deletions
diff --git a/gcc/cp/init.cc b/gcc/cp/init.cc
index ce332c7..7ce8d3a 100644
--- a/gcc/cp/init.cc
+++ b/gcc/cp/init.cc
@@ -3292,7 +3292,7 @@ build_new_1 (vec<tree, va_gc> **placement, tree type, tree nelts,
{
unsigned align = TYPE_ALIGN_UNIT (elt_type);
/* Also consider the alignment of the cookie, if any. */
- if (TYPE_VEC_NEW_USES_COOKIE (elt_type))
+ if (array_p && TYPE_VEC_NEW_USES_COOKIE (elt_type))
align = MAX (align, TYPE_ALIGN_UNIT (size_type_node));
align_arg = build_int_cst (align_type_node, align);
}
diff --git a/gcc/testsuite/g++.dg/cpp1z/aligned-new9.C b/gcc/testsuite/g++.dg/cpp1z/aligned-new9.C
index 7854299..3fa0ed9 100644
--- a/gcc/testsuite/g++.dg/cpp1z/aligned-new9.C
+++ b/gcc/testsuite/g++.dg/cpp1z/aligned-new9.C
@@ -23,4 +23,8 @@ int main()
X *p = new X[n];
if (nalign != align)
__builtin_abort ();
+
+ X *p2 = new X;
+ if (nalign != alignof (X))
+ __builtin_abort ();
}