1 // RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin10 -emit-llvm -o - %s -fsanitize=alignment | FileCheck %s -check-prefixes=ALIGN,COMMON
2 // RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin10 -emit-llvm -o - %s -fsanitize=null | FileCheck %s -check-prefixes=NULL,COMMON
3 // RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin10 -emit-llvm -o - %s -fsanitize=object-size | FileCheck %s -check-prefixes=OBJSIZE,COMMON
4 
5 struct A {
6   // COMMON-LABEL: define linkonce_odr void @_ZN1A10do_nothingEv
7   void do_nothing() {
8     // ALIGN-NOT: ptrtoint %struct.A* %{{.*}} to i64, !nosanitize
9 
10     // NULL: icmp ne %struct.A* %{{.*}}, null, !nosanitize
11 
12     // OBJSIZE-NOT: call i64 @llvm.objectsize
13   }
14 };
15 
16 struct B {
17   int x;
18 
19   // COMMON-LABEL: define linkonce_odr void @_ZN1B10do_nothingEv
20   void do_nothing() {
21     // ALIGN: ptrtoint %struct.B* %{{.*}} to i64, !nosanitize
22     // ALIGN: and i64 %{{.*}}, 3, !nosanitize
23 
24     // NULL: icmp ne %struct.B* %{{.*}}, null, !nosanitize
25 
26     // OBJSIZE-NOT: call i64 @llvm.objectsize
27   }
28 };
29 
30 void force_irgen() {
31   A a;
32   a.do_nothing();
33 
34   B b;
35   b.do_nothing();
36 }
37