https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117002
Bug ID: 117002
Summary: lifetime.d: In function ‘_d_newclassT’: error: size of
array element is not a multiple of its alignment with
-Warray-bounds and -O2
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: d
Assignee: ibuclaw at gdcproject dot org
Reporter: a.horodniceanu at proton dot me
Target Milestone: ---
Reported first at https://bugs.gentoo.org/940750 and reduced to:
------
module object;
extern(C++) class Foo {
ubyte[4] not_multiple_of_8;
}
extern(C)
int main () {
// avoid optimizations
void* p = cast(void*)(0xdeadbeef);
auto init = __traits(initSymbol, Foo);
p[0 .. init.length] = init[];
return 0;
}
------
Compile with:
------
$ gdc repro.d -Warray-bounds -O2
/root/repro.d: In function ‘main’:
/root/repro.d:8:5: error: size of array element is not a multiple of its
alignment
8 | int main () {
| ^
------
The code is a reduction of _d_newclassT in core/lifetime.d with the original
error being:
------
$ cat repro.d
class Foo {
ubyte[4] not_multiple_of_8;
}
void foo () {
new Foo();
}
$ gdc repro.d -Warray-bounds -O2
/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/d/core/lifetime.d: In function
‘_d_newclassT’:
/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/d/core/lifetime.d:2725:3: error:
size of array element is not a multiple of its alignment
2725 | T _d_newclassT(T)() @trusted
| ^
------