1 | // RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -Wover-aligned -verify %s |
2 | |
3 | namespace test1 { |
4 | struct Test { |
5 | template <typename T> |
6 | struct SeparateCacheLines { |
7 | T data; |
8 | } __attribute__((aligned(256))); |
9 | |
10 | SeparateCacheLines<int> high_contention_data[10]; |
11 | }; |
12 | |
13 | void helper() { |
14 | Test t; |
15 | new Test; // expected-warning {{type 'test1::Test' requires 256 bytes of alignment and the default allocator only guarantees}} |
16 | new Test[10]; // expected-warning {{type 'test1::Test' requires 256 bytes of alignment and the default allocator only guarantees}} |
17 | } |
18 | } |
19 | |
20 | namespace test2 { |
21 | class Test { |
22 | typedef int __attribute__((aligned(256))) aligned_int; |
23 | aligned_int high_contention_data[10]; |
24 | }; |
25 | |
26 | void helper() { |
27 | Test t; |
28 | new Test; // expected-warning {{type 'test2::Test' requires 256 bytes of alignment and the default allocator only guarantees}} |
29 | new Test[10]; // expected-warning {{type 'test2::Test' requires 256 bytes of alignment and the default allocator only guarantees}} |
30 | } |
31 | } |
32 | |
33 | namespace test3 { |
34 | struct Test { |
35 | template <typename T> |
36 | struct SeparateCacheLines { |
37 | T data; |
38 | } __attribute__((aligned(256))); |
39 | |
40 | void* operator new(unsigned long) { |
41 | return 0; // expected-warning {{'operator new' should not return a null pointer unless it is declared 'throw()'}} |
42 | } |
43 | |
44 | SeparateCacheLines<int> high_contention_data[10]; |
45 | }; |
46 | |
47 | void helper() { |
48 | Test t; |
49 | new Test; |
50 | new Test[10]; // expected-warning {{type 'test3::Test' requires 256 bytes of alignment and the default allocator only guarantees}} |
51 | } |
52 | } |
53 | |
54 | namespace test4 { |
55 | struct Test { |
56 | template <typename T> |
57 | struct SeparateCacheLines { |
58 | T data; |
59 | } __attribute__((aligned(256))); |
60 | |
61 | void* operator new[](unsigned long) { |
62 | return 0; // expected-warning {{'operator new[]' should not return a null pointer unless it is declared 'throw()'}} |
63 | } |
64 | |
65 | SeparateCacheLines<int> high_contention_data[10]; |
66 | }; |
67 | |
68 | void helper() { |
69 | Test t; |
70 | new Test; // expected-warning {{type 'test4::Test' requires 256 bytes of alignment and the default allocator only guarantees}} |
71 | new Test[10]; |
72 | } |
73 | } |
74 | |