@@ -12,10 +12,10 @@ typedef int __attribute__((aligned(1))) unaligned_int;
12
12
13
13
void func (IntPair * p ) {
14
14
IntPair res ;
15
- __atomic_load (p , & res , 0 ); // expected-warning {{misaligned atomic operation may incur significant performance penalty}}
16
- __atomic_store (p , & res , 0 ); // expected-warning {{misaligned atomic operation may incur significant performance penalty}}
17
- __atomic_fetch_add ((unaligned_int * )p , 1 , 2 ); // expected-warning {{misaligned atomic operation may incur significant performance penalty}}
18
- __atomic_fetch_sub ((unaligned_int * )p , 1 , 3 ); // expected-warning {{misaligned atomic operation may incur significant performance penalty}}
15
+ __atomic_load (p , & res , 0 ); // expected-warning {{misaligned atomic operation may incur significant performance penalty; the expected alignment (8 bytes) exceeds the actual alignment (4 bytes) }}
16
+ __atomic_store (p , & res , 0 ); // expected-warning {{misaligned atomic operation may incur significant performance penalty; the expected alignment (8 bytes) exceeds the actual alignment (4 bytes) }}
17
+ __atomic_fetch_add ((unaligned_int * )p , 1 , 2 ); // expected-warning {{misaligned atomic operation may incur significant performance penalty; the expected alignment (4 bytes) exceeds the actual alignment (1 bytes) }}
18
+ __atomic_fetch_sub ((unaligned_int * )p , 1 , 3 ); // expected-warning {{misaligned atomic operation may incur significant performance penalty; the expected alignment (4 bytes) exceeds the actual alignment (1 bytes) }}
19
19
}
20
20
21
21
void func1 (LongStruct * p ) {
@@ -25,3 +25,24 @@ void func1(LongStruct *p) {
25
25
__atomic_fetch_add ((int * )p , 1 , 2 );
26
26
__atomic_fetch_sub ((int * )p , 1 , 3 );
27
27
}
28
+
29
+ typedef struct {
30
+ void * a ;
31
+ void * b ;
32
+ } Foo ;
33
+
34
+ typedef struct {
35
+ void * a ;
36
+ void * b ;
37
+ void * c ;
38
+ void * d ;
39
+ } __attribute__((aligned (32 ))) ThirtyTwo ;
40
+
41
+ void braz (Foo * foo , ThirtyTwo * braz ) {
42
+ Foo bar ;
43
+ __atomic_load (foo , & bar , __ATOMIC_RELAXED ); // expected-warning {{misaligned atomic operation may incur significant performance penalty; the expected alignment (16 bytes) exceeds the actual alignment (8 bytes)}}
44
+
45
+ ThirtyTwo thirtyTwo1 ;
46
+ ThirtyTwo thirtyTwo2 ;
47
+ __atomic_load (& thirtyTwo1 , & thirtyTwo2 , __ATOMIC_RELAXED ); // expected-warning {{large atomic operation may incur significant performance penalty; the access size (32 bytes) exceeds the max lock-free size (16 bytes)}}
48
+ }
0 commit comments