John McCall | e8dc53e | 2010-08-12 02:17:33 +0000 | [diff] [blame^] | 1 | // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s |
| 2 | |
| 3 | // PR7864. This all follows GCC's lead. |
| 4 | |
| 5 | namespace std { class type_info; } |
| 6 | |
| 7 | // CHECK: @_ZTI1A = weak_odr hidden constant {{.*}}@_ZTVN10__cxxabiv117__class_type_infoE{{.*}}@_ZTS1A |
| 8 | @interface A |
| 9 | @end |
| 10 | |
| 11 | // CHECK: @_ZTI1B = weak_odr hidden constant {{.*}}@_ZTVN10__cxxabiv120__si_class_type_infoE{{.*}}@_ZTS1B{{.*}}@_ZTI1A |
| 12 | @interface B : A |
| 13 | @end |
| 14 | |
| 15 | // CHECK: @_ZTIP1B = weak_odr hidden constant {{.*}}@_ZTVN10__cxxabiv119__pointer_type_infoE{{.*}}@_ZTSP1B{{.*}}), i32 0, {{.*}}@_ZTI1B |
| 16 | // CHECK: @_ZTI11objc_object = weak_odr hidden constant {{.*}}@_ZTVN10__cxxabiv117__class_type_infoE{{.*}}@_ZTS11objc_object |
| 17 | // CHECK: @_ZTIP11objc_object = weak_odr hidden constant {{.*}}@_ZTVN10__cxxabiv119__pointer_type_infoE{{.*}}@_ZTSP11objc_object{{.*}}@_ZTI11objc_object |
| 18 | // CHECK: @_ZTI10objc_class = weak_odr hidden constant {{.*}}@_ZTVN10__cxxabiv117__class_type_infoE{{.*}}@_ZTS10objc_class |
| 19 | // CHECK: @_ZTIP10objc_class = weak_odr hidden constant {{.*}}@_ZTVN10__cxxabiv119__pointer_type_infoE{{.*}}@_ZTSP10objc_class{{.*}}@_ZTI10objc_class |
| 20 | |
| 21 | @protocol P; |
| 22 | |
| 23 | int main() { |
| 24 | // CHECK: store {{.*}} @_ZTIP1B |
| 25 | // CHECK: store {{.*}} @_ZTI1B |
| 26 | const std::type_info &t1 = typeid(B*); |
| 27 | const std::type_info &t2 = typeid(B); |
| 28 | |
| 29 | // CHECK: store {{.*}} @_ZTIP11objc_object |
| 30 | // CHECK: store {{.*}} @_ZTI11objc_object |
| 31 | id i = 0; |
| 32 | const std::type_info &t3 = typeid(i); |
| 33 | const std::type_info &t4 = typeid(*i); |
| 34 | |
| 35 | // CHECK: store {{.*}} @_ZTIP10objc_class |
| 36 | // CHECK: store {{.*}} @_ZTI10objc_class |
| 37 | Class c = 0; |
| 38 | const std::type_info &t5 = typeid(c); |
| 39 | const std::type_info &t6 = typeid(*c); |
| 40 | |
| 41 | // CHECK: store {{.*}} @_ZTIP11objc_object |
| 42 | // CHECK: store {{.*}} @_ZTI11objc_object |
| 43 | id<P> i2 = 0; |
| 44 | const std::type_info &t7 = typeid(i2); |
| 45 | const std::type_info &t8 = typeid(*i2); |
| 46 | |
| 47 | // CHECK: store {{.*}} @_ZTIP10objc_class |
| 48 | // CHECK: store {{.*}} @_ZTI10objc_class |
| 49 | Class<P> c2 = 0; |
| 50 | const std::type_info &t9 = typeid(c2); |
| 51 | const std::type_info &t10 = typeid(*c2); |
| 52 | } |