From: Jason Merrill Date: Tue, 12 Apr 2022 20:06:18 +0000 (-0400) Subject: c++: non-array new alignment [PR102071] X-Git-Tag: basepoints/gcc-13~199 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=164c6a1c5d7f99235f1a41440eacac7a977e8fbd;p=thirdparty%2Fgcc.git 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. --- diff --git a/gcc/cp/init.cc b/gcc/cp/init.cc index ce332c7e3292..7ce8d3a46e5b 100644 --- a/gcc/cp/init.cc +++ b/gcc/cp/init.cc @@ -3292,7 +3292,7 @@ build_new_1 (vec **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 7854299419a1..3fa0ed996bd3 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 (); }