1 // RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin10 -I%S -emit-llvm -o - %s | FileCheck %s 2 // RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin10 -I%S -emit-llvm -o - %s -fexperimental-new-constant-interpreter | FileCheck %s 3 4 #include <typeinfo> 5 6 // CHECK: @_ZTIDn = external constant ptr 7 int* a = nullptr; 8 9 void f() { 10 int* a = nullptr; 11 } 12 13 typedef decltype(nullptr) nullptr_t; 14 15 nullptr_t get_nullptr(); 16 17 struct X { }; 18 void g() { 19 // CHECK: call ptr @_Z11get_nullptrv() 20 int (X::*pmf)(int) = get_nullptr(); 21 } 22 23 const std::type_info& f2() { 24 return typeid(nullptr_t); 25 } 26 27 union U { 28 int n; 29 nullptr_t b; 30 }; 31 // CHECK-LABEL: define {{.*}}pr23833_a 32 // CHECK: store 33 // CHECK: load 34 // CHECK-NOT: load 35 // CHECK: ret i1 false 36 bool pr23833_a(U &u) { return bool(u.b); } 37 38 // CHECK-LABEL: define {{.*}}pr23833_b 39 // CHECK: store 40 // CHECK: load 41 // CHECK-NOT: load 42 // CHECK: ret ptr null 43 nullptr_t pr23833_b(nullptr_t &n) { return n; } 44 45 struct X1 { operator int*(); }; 46 struct X2 { operator const nullptr_t&(); }; 47 48 // CHECK-LABEL: define {{.*}}pr23833_c 49 // CHECK: call {{.*}}X1 50 // CHECK: call {{.*}}X2 51 // CHECK-NOT: load 52 // CHECK: ret i32 53 int pr23833_c() { 54 return X1() != X2(); 55 } 56 57 // CHECK-LABEL: define {{.*}}pr23833_d 58 // CHECK: call {{.*}}X2 59 // CHECK-NOT: load 60 // CHECK: store 61 // CHECK: load 62 // CHECK: ret ptr 63 int *pr23833_d() { 64 int *p = X2(); 65 return p; 66 } 67 68 namespace PR39528 { 69 constexpr nullptr_t null = nullptr; 70 void f(nullptr_t); 71 void g() { f(null); } 72 } 73