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