gcc/clang treat __attribute__((aligned())) differently

The change of the given alignment from 8 to 16 prevents spurious passing,
since 16 is not the default alignment on any platform.
This commit is contained in:
Daniel Kroening 2018-06-20 16:11:13 +01:00
parent f7cd161c6c
commit 3423e44fd3
2 changed files with 22 additions and 14 deletions

View File

@ -3,21 +3,29 @@
#ifdef __GNUC__
char __attribute__((aligned(8))) var1;
__attribute__((aligned(8))) char var2;
char var3 __attribute__((aligned(8)));
int (__attribute__((aligned(8))) var4);
int (__attribute__((aligned(8))) (var5));
int (__attribute__((aligned(8))) *var6);
int __attribute__((aligned(8))) *var7;
char __attribute__((aligned(16))) var1;
__attribute__((aligned(16))) char var2;
char var3 __attribute__((aligned(16)));
int (__attribute__((aligned(16))) var4);
int (__attribute__((aligned(16))) (var5));
int (__attribute__((aligned(16))) *var6);
int __attribute__((aligned(16))) *var7;
__attribute__((aligned(16))) int *var8;
STATIC_ASSERT(__alignof(var1)==8);
STATIC_ASSERT(__alignof(var2)==8);
STATIC_ASSERT(__alignof(var3)==8);
STATIC_ASSERT(__alignof(var4)==8);
STATIC_ASSERT(__alignof(var5)==8);
STATIC_ASSERT(__alignof(var1)==16);
STATIC_ASSERT(__alignof(var2)==16);
STATIC_ASSERT(__alignof(var3)==16);
STATIC_ASSERT(__alignof(var4)==16);
STATIC_ASSERT(__alignof(var5)==16);
#ifdef __clang__
STATIC_ASSERT(__alignof(var6)==16);
STATIC_ASSERT(__alignof(*var6)==__alignof(int));
#else
STATIC_ASSERT(__alignof(var6)==__alignof(void *));
STATIC_ASSERT(__alignof(var7)==8);
STATIC_ASSERT(__alignof(*var6)==16);
#endif
STATIC_ASSERT(__alignof(var7)==16);
STATIC_ASSERT(__alignof(var8)==16);
void (__attribute__((aligned)) *****f1)(void);
void (__attribute__((aligned)) f2)(void);

View File

@ -1,4 +1,4 @@
CORE gcc-only
KNOWNBUG gcc-only
main.c
^EXIT=0$