xref: /llvm-project/clang/test/SemaCXX/warn-new-overaligned-3.cpp (revision 83ea47acd7116bf50274534ba9b3bd3035c01da6)
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()20 void 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