1 // RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -Wover-aligned %s -isystem %S/Inputs -verify=precxx17 %std_cxx11-14 2 // RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -Wover-aligned %s -isystem %S/Inputs -verify %std_cxx17- 3 4 // expected-no-diagnostics 5 6 // This test ensures that we still get the warning even if we #include <new> 7 // where the header here simulates <new>. 8 #include <warn-new-overaligned-3.h> 9 10 namespace test1 { 11 struct Test { 12 template <typename T> 13 struct SeparateCacheLines { 14 T data; 15 } __attribute__((aligned(256))); 16 17 SeparateCacheLines<int> high_contention_data[10]; 18 }; 19 helper()20void helper() { 21 Test t; 22 new Test; // precxx17-warning {{type 'Test' requires 256 bytes of alignment and the default allocator only guarantees}} 23 new Test[10]; // precxx17-warning {{type 'Test' requires 256 bytes of alignment and the default allocator only guarantees}} 24 } 25 } 26 27 namespace test2 { 28 struct helper { int i __attribute__((aligned(256))); }; 29 30 struct Placement { Placementtest2::Placement31 Placement() { 32 new (d) helper(); 33 } 34 helper *d; 35 }; 36 } 37