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