http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49585
Summary: need a warning about new/malloc returning
unsufficiently aligned memory
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: [email protected]
ReportedBy: [email protected]
Consider the following test case:
#define alignement 64
struct test {
public:
int toto[100] __attribute__((aligned(alignement)));
};
int main () {
test* t = new test();
printf("%ld\n",(unsigned long)(&(t->toto[0])) % alignement);
return 0;
}
This program typically prints a non-zero value, whereas customers would
actually expect 0. This is due to default "new" (presumably doing malloc) only
gurantees 16 byte alignment.
Compiler should detect when a default new operator is used to allocate
unsufficiently aligned memory, and issue a relevent user diagnostics.
BTW, this issues can cause severe stability problems in AVX compilation, where
32-byte is the typical requirement for 256-bit AVX data types.