| // Test -fsanitize-memory-use-after-dtor |
| // RUN: %clang_cc1 -O0 -fsanitize=memory -fsanitize-memory-use-after-dtor -disable-llvm-optzns -std=c++11 -triple=x86_64-pc-linux -emit-llvm -o - %s | FileCheck %s |
| // RUN: %clang_cc1 -O1 -fsanitize=memory -fsanitize-memory-use-after-dtor -disable-llvm-optzns -std=c++11 -triple=x86_64-pc-linux -emit-llvm -o - %s | FileCheck %s |
| |
| // 24 bytes total |
| struct Packed { |
| // Packed into 4 bytes |
| unsigned int a : 1; |
| unsigned int b : 1; |
| //unsigned int c : 1; |
| // Force alignment to next 4 bytes |
| unsigned int : 0; |
| unsigned int d : 1; |
| // Force alignment, 8 more bytes |
| double e = 5.0; |
| // 4 bytes |
| unsigned int f : 1; |
| ~Packed() {} |
| }; |
| Packed p; |
| |
| |
| // 1 byte total |
| struct Empty { |
| unsigned int : 0; |
| ~Empty() {} |
| }; |
| Empty e; |
| |
| |
| // 4 byte total |
| struct Simple { |
| unsigned int a : 1; |
| ~Simple() {} |
| }; |
| Simple s; |
| |
| |
| // 8 bytes total |
| struct Anon { |
| // 1 byte |
| unsigned int a : 1; |
| unsigned int b : 2; |
| // Force alignment to next byte |
| unsigned int : 0; |
| unsigned int c : 1; |
| ~Anon() {} |
| }; |
| Anon an; |
| |
| |
| struct CharStruct { |
| char c; |
| ~CharStruct(); |
| }; |
| |
| struct Adjacent { |
| CharStruct a; |
| int b : 1; |
| CharStruct c; |
| ~Adjacent() {} |
| }; |
| Adjacent ad; |
| |
| |
| // CHECK-LABEL: define {{.*}}PackedD2Ev |
| // CHECK: call void @__sanitizer_dtor_callback{{.*}}i64 17 |
| // CHECK: ret void |
| |
| // CHECK-LABEL: define {{.*}}EmptyD2Ev |
| // CHECK-NOT: call void @__sanitizer_dtor_callback{{.*}}i64 0 |
| // CHECK: ret void |
| |
| // CHECK-LABEL: define {{.*}}SimpleD2Ev |
| // CHECK: call void @__sanitizer_dtor_callback{{.*}}i64 1 |
| // CHECK: ret void |
| |
| // CHECK-LABEL: define {{.*}}AnonD2Ev |
| // CHECK: call void @__sanitizer_dtor_callback{{.*}}i64 5 |
| // CHECK: ret void |
| |
| // CHECK-LABEL: define {{.*}}AdjacentD2Ev |
| // CHECK: call void @__sanitizer_dtor_callback{{.*}}i64 1 |
| // CHECK: ret void |