| // RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -Wover-aligned -verify %s | 
 |  | 
 | namespace test1 { | 
 | struct Test { | 
 |   template <typename T> | 
 |   struct SeparateCacheLines { | 
 |     T data; | 
 |   } __attribute__((aligned(256))); | 
 |  | 
 |   SeparateCacheLines<int> high_contention_data[10]; | 
 | }; | 
 |  | 
 | void helper() { | 
 |   Test t; | 
 |   new Test;  // expected-warning {{type 'test1::Test' requires 256 bytes of alignment and the default allocator only guarantees}} | 
 |   new Test[10];  // expected-warning {{type 'test1::Test' requires 256 bytes of alignment and the default allocator only guarantees}} | 
 | } | 
 | } | 
 |  | 
 | namespace test2 { | 
 | class Test { | 
 |   typedef int __attribute__((aligned(256))) aligned_int; | 
 |   aligned_int high_contention_data[10]; | 
 | }; | 
 |  | 
 | void helper() { | 
 |   Test t; | 
 |   new Test;  // expected-warning {{type 'test2::Test' requires 256 bytes of alignment and the default allocator only guarantees}} | 
 |   new Test[10];  // expected-warning {{type 'test2::Test' requires 256 bytes of alignment and the default allocator only guarantees}} | 
 | } | 
 | } | 
 |  | 
 | namespace test3 { | 
 | struct Test { | 
 |   template <typename T> | 
 |   struct SeparateCacheLines { | 
 |     T data; | 
 |   } __attribute__((aligned(256))); | 
 |  | 
 |   void* operator new(unsigned long) { | 
 |     return 0; // expected-warning {{'operator new' should not return a null pointer unless it is declared 'throw()'}} | 
 |   } | 
 |  | 
 |   SeparateCacheLines<int> high_contention_data[10]; | 
 | }; | 
 |  | 
 | void helper() { | 
 |   Test t; | 
 |   new Test; | 
 |   new Test[10];  // expected-warning {{type 'test3::Test' requires 256 bytes of alignment and the default allocator only guarantees}} | 
 | } | 
 | } | 
 |  | 
 | namespace test4 { | 
 | struct Test { | 
 |   template <typename T> | 
 |   struct SeparateCacheLines { | 
 |     T data; | 
 |   } __attribute__((aligned(256))); | 
 |  | 
 |   void* operator new[](unsigned long) { | 
 |     return 0; // expected-warning {{'operator new[]' should not return a null pointer unless it is declared 'throw()'}} | 
 |   } | 
 |  | 
 |   SeparateCacheLines<int> high_contention_data[10]; | 
 | }; | 
 |  | 
 | void helper() { | 
 |   Test t; | 
 |   new Test;  // expected-warning {{type 'test4::Test' requires 256 bytes of alignment and the default allocator only guarantees}} | 
 |   new Test[10]; | 
 | } | 
 | } |