brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 428c737 Raw
83 lines · cpp
1// RUN: %clang_cc1 %s -triple %itanium_abi_triple -Wno-unused-value -emit-llvm -o - -std=c++11 | FileCheck %s2namespace std {3struct type_info;4}5 6struct A {7  virtual ~A();8  operator bool();9};10struct B : A {};11 12void f1(A *x) { typeid(false, *x); }13// CHECK-LABEL: define {{.*}}void @_Z2f1P1A14// CHECK:       icmp eq {{.*}}, null15// CHECK-NEXT:  br i116 17void f2(bool b, A *x, A *y) { typeid(b ? *x : *y); }18// CHECK-LABEL: define {{.*}}void @_Z2f2bP1AS0_19// CHECK:       icmp eq {{.*}}, null20// CHECK-NEXT:  br i121 22void f3(bool b, A *x, A &y) { typeid(b ? *x : y); }23// CHECK-LABEL: define {{.*}}void @_Z2f3bP1ARS_24// CHECK:       icmp eq {{.*}}, null25// CHECK-NEXT:  br i126 27void f4(bool b, A &x, A *y) { typeid(b ? x : *y); }28// CHECK-LABEL: define {{.*}}void @_Z2f4bR1APS_29// CHECK:       icmp eq {{.*}}, null30// CHECK-NEXT:  br i131 32void f5(volatile A *x) { typeid(*x); }33// CHECK-LABEL: define {{.*}}void @_Z2f5PV1A34// CHECK:       icmp eq {{.*}}, null35// CHECK-NEXT:  br i136 37void f6(A *x) { typeid((B &)*(B *)x); }38// CHECK-LABEL: define {{.*}}void @_Z2f6P1A39// CHECK:       icmp eq {{.*}}, null40// CHECK-NEXT:  br i141 42void f7(A *x) { typeid((*x)); }43// CHECK-LABEL: define {{.*}}void @_Z2f7P1A44// CHECK:       icmp eq {{.*}}, null45// CHECK-NEXT:  br i146 47void f8(A *x) { typeid(x[0]); }48// CHECK-LABEL: define {{.*}}void @_Z2f8P1A49// CHECK:       icmp eq {{.*}}, null50// CHECK-NEXT:  br i151 52void f9(A *x) { typeid(0[x]); }53// CHECK-LABEL: define {{.*}}void @_Z2f9P1A54// CHECK:       icmp eq {{.*}}, null55// CHECK-NEXT:  br i156 57void f10(A *x, A *y) { typeid(*y ?: *x); }58// CHECK-LABEL: define {{.*}}void @_Z3f10P1AS0_59// CHECK:       icmp eq {{.*}}, null60// CHECK-NEXT:  br i161 62void f11(A *x, A &y) { typeid(*x ?: y); }63// CHECK-LABEL: define {{.*}}void @_Z3f11P1ARS_64// CHECK:       icmp eq {{.*}}, null65// CHECK-NEXT:  br i166 67void f12(A &x, A *y) { typeid(x ?: *y); }68// CHECK-LABEL: define {{.*}}void @_Z3f12R1APS_69// CHECK:       icmp eq {{.*}}, null70// CHECK-NEXT:  br i171 72void f13(A &x, A &y) { typeid(x ?: y); }73// CHECK-LABEL: define {{.*}}void @_Z3f13R1AS0_74// CHECK-NOT:   icmp eq {{.*}}, null75 76void f14(A *x) { typeid((const A &)(A)*x); }77// CHECK-LABEL: define {{.*}}void @_Z3f14P1A78// CHECK-NOT:   icmp eq {{.*}}, null79 80void f15(A *x) { typeid((A &&)*(A *)nullptr); }81// CHECK-LABEL: define {{.*}}void @_Z3f15P1A82// CHECK-NOT:   icmp eq {{.*}}, null83