12c93beccSCyndy Ishida// RUN: rm -rf %t 22c93beccSCyndy Ishida// RUN: split-file %s %t 32c93beccSCyndy Ishida// RUN: sed -e "s|DSTROOT|%/t|g" %t/inputs.json.in > %t/inputs.json 42c93beccSCyndy Ishida 52c93beccSCyndy Ishida// Invoke C++ with no-rtti. 62c93beccSCyndy Ishida// RUN: clang-installapi -target arm64-apple-macos13.1 \ 7*feed66f3SCyndy Ishida// RUN: -I%t/usr/include -I%t/usr/local/include -x c++ -dynamiclib \ 82c93beccSCyndy Ishida// RUN: -install_name @rpath/lib/libcpp.dylib -fno-rtti \ 92c93beccSCyndy Ishida// RUN: %t/inputs.json -o %t/no-rtti.tbd 2>&1 | FileCheck %s --allow-empty 102c93beccSCyndy Ishida 112c93beccSCyndy Ishida// RUN: llvm-readtapi -compare %t/no-rtti.tbd \ 122c93beccSCyndy Ishida// RUN: %t/expected-no-rtti.tbd 2>&1 | FileCheck %s --allow-empty 132c93beccSCyndy Ishida 142c93beccSCyndy Ishida// Invoke C++ with rtti. 152c93beccSCyndy Ishida// RUN: clang-installapi -target arm64-apple-macos13.1 \ 162c93beccSCyndy Ishida// RUN: -I%t/usr/include -I%t/usr/local/include -x c++ \ 17*feed66f3SCyndy Ishida// RUN: -install_name @rpath/lib/libcpp.dylib -frtti -dynamiclib \ 182c93beccSCyndy Ishida// RUN: %t/inputs.json -o %t/rtti.tbd 2>&1 | FileCheck %s --allow-empty 192c93beccSCyndy Ishida// RUN: llvm-readtapi -compare %t/rtti.tbd \ 202c93beccSCyndy Ishida// RUN: %t/expected-rtti.tbd 2>&1 | FileCheck %s --allow-empty 212c93beccSCyndy Ishida 222c93beccSCyndy Ishida// CHECK-NOT: error: 232c93beccSCyndy Ishida// CHECK-NOT: warning: 242c93beccSCyndy Ishida 252c93beccSCyndy Ishida//--- usr/include/basic.h 262c93beccSCyndy Ishida#ifndef CPP_H 272c93beccSCyndy Ishida#define CPP_H 282c93beccSCyndy Ishida 292c93beccSCyndy Ishidainline int foo(int x) { return x + 1; } 302c93beccSCyndy Ishida 312c93beccSCyndy Ishidaextern int bar(int x) { return x + 1; } 322c93beccSCyndy Ishida 332c93beccSCyndy Ishidainline int baz(int x) { 342c93beccSCyndy Ishida static const int a[] = {1, 2, 3}; 352c93beccSCyndy Ishida return a[x]; 362c93beccSCyndy Ishida} 372c93beccSCyndy Ishida 382c93beccSCyndy Ishidaextern "C" { 392c93beccSCyndy Ishida int cFunc(const char*); 402c93beccSCyndy Ishida} 412c93beccSCyndy Ishida 422c93beccSCyndy Ishidaclass Bar { 432c93beccSCyndy Ishidapublic: 442c93beccSCyndy Ishida static const int x = 0; 452c93beccSCyndy Ishida static int y; 462c93beccSCyndy Ishida 472c93beccSCyndy Ishida inline int func1(int x) { return x + 2; } 482c93beccSCyndy Ishida inline int func2(int x); 492c93beccSCyndy Ishida int func3(int x); 502c93beccSCyndy Ishida}; 512c93beccSCyndy Ishida 522c93beccSCyndy Ishidaclass __attribute__((visibility("hidden"))) BarI { 532c93beccSCyndy Ishida static const int x = 0; 542c93beccSCyndy Ishida static int y; 552c93beccSCyndy Ishida 562c93beccSCyndy Ishida inline int func1(int x) { return x + 2; } 572c93beccSCyndy Ishida inline int func2(int x); 582c93beccSCyndy Ishida int func3(int x); 592c93beccSCyndy Ishida}; 602c93beccSCyndy Ishida 612c93beccSCyndy Ishidaint Bar::func2(int x) { return x + 3; } 622c93beccSCyndy Ishidainline int Bar::func3(int x) { return x + 4; } 632c93beccSCyndy Ishida 642c93beccSCyndy Ishidaint BarI::func2(int x) { return x + 3; } 652c93beccSCyndy Ishidainline int BarI::func3(int x) { return x + 4; } 662c93beccSCyndy Ishida#endif 672c93beccSCyndy Ishida 682c93beccSCyndy Ishida//--- usr/local/include/vtable.h 692c93beccSCyndy Ishida// Simple test class with no virtual functions. There should be no vtable or 702c93beccSCyndy Ishida// RTTI. 712c93beccSCyndy Ishidanamespace test1 { 722c93beccSCyndy Ishidaclass Simple { 732c93beccSCyndy Ishidapublic: 742c93beccSCyndy Ishida void run(); 752c93beccSCyndy Ishida}; 762c93beccSCyndy Ishida} // end namespace test1 772c93beccSCyndy Ishida 782c93beccSCyndy Ishida// Simple test class with virtual function. There should be an external vtable 792c93beccSCyndy Ishida// and RTTI. 802c93beccSCyndy Ishidanamespace test2 { 812c93beccSCyndy Ishidaclass Simple { 822c93beccSCyndy Ishidapublic: 832c93beccSCyndy Ishida virtual void run(); 842c93beccSCyndy Ishida}; 852c93beccSCyndy Ishida} // end namespace test2 862c93beccSCyndy Ishida 872c93beccSCyndy Ishida// Abstract class with no sub classes. There should be no vtable or RTTI. 882c93beccSCyndy Ishidanamespace test3 { 892c93beccSCyndy Ishidaclass Abstract { 902c93beccSCyndy Ishidapublic: 912c93beccSCyndy Ishida virtual ~Abstract() {} 922c93beccSCyndy Ishida virtual void run() = 0; 932c93beccSCyndy Ishida}; 942c93beccSCyndy Ishida} // end namespace test3 952c93beccSCyndy Ishida 962c93beccSCyndy Ishida// Abstract base class with a sub class. There should be weak-def RTTI for the 972c93beccSCyndy Ishida// abstract base class. 982c93beccSCyndy Ishida// The sub-class should have vtable and RTTI. 992c93beccSCyndy Ishidanamespace test4 { 1002c93beccSCyndy Ishidaclass Base { 1012c93beccSCyndy Ishidapublic: 1022c93beccSCyndy Ishida virtual ~Base() {} 1032c93beccSCyndy Ishida virtual void run() = 0; 1042c93beccSCyndy Ishida}; 1052c93beccSCyndy Ishida 1062c93beccSCyndy Ishidaclass Sub : public Base { 1072c93beccSCyndy Ishidapublic: 1082c93beccSCyndy Ishida void run() override; 1092c93beccSCyndy Ishida}; 1102c93beccSCyndy Ishida} // end namespace test4 1112c93beccSCyndy Ishida 1122c93beccSCyndy Ishida// Abstract base class with a sub class. Same as above, but with a user defined 1132c93beccSCyndy Ishida// inlined destructor. 1142c93beccSCyndy Ishidanamespace test5 { 1152c93beccSCyndy Ishidaclass Base { 1162c93beccSCyndy Ishidapublic: 1172c93beccSCyndy Ishida virtual ~Base() {} 1182c93beccSCyndy Ishida virtual void run() = 0; 1192c93beccSCyndy Ishida}; 1202c93beccSCyndy Ishida 1212c93beccSCyndy Ishidaclass Sub : public Base { 1222c93beccSCyndy Ishidapublic: 1232c93beccSCyndy Ishida virtual ~Sub() {} 1242c93beccSCyndy Ishida void run() override; 1252c93beccSCyndy Ishida}; 1262c93beccSCyndy Ishida} // end namespace test5 1272c93beccSCyndy Ishida 1282c93beccSCyndy Ishida// Abstract base class with a sub class. Same as above, but with a different 1292c93beccSCyndy Ishida// inlined key method. 1302c93beccSCyndy Ishidanamespace test6 { 1312c93beccSCyndy Ishidaclass Base { 1322c93beccSCyndy Ishidapublic: 1332c93beccSCyndy Ishida virtual ~Base() {} 1342c93beccSCyndy Ishida virtual void run() = 0; 1352c93beccSCyndy Ishida}; 1362c93beccSCyndy Ishida 1372c93beccSCyndy Ishidaclass Sub : public Base { 1382c93beccSCyndy Ishidapublic: 1392c93beccSCyndy Ishida virtual void foo() {} 1402c93beccSCyndy Ishida void run() override; 1412c93beccSCyndy Ishida}; 1422c93beccSCyndy Ishida} // end namespace test6 1432c93beccSCyndy Ishida 1442c93beccSCyndy Ishida// Abstract base class with a sub class. Overloaded method is implemented 1452c93beccSCyndy Ishida// inline. No vtable or RTTI. 1462c93beccSCyndy Ishidanamespace test7 { 1472c93beccSCyndy Ishidaclass Base { 1482c93beccSCyndy Ishidapublic: 1492c93beccSCyndy Ishida virtual ~Base() {} 1502c93beccSCyndy Ishida virtual bool run() = 0; 1512c93beccSCyndy Ishida}; 1522c93beccSCyndy Ishida 1532c93beccSCyndy Ishidaclass Sub : public Base { 1542c93beccSCyndy Ishidapublic: 1552c93beccSCyndy Ishida bool run() override { return true; } 1562c93beccSCyndy Ishida}; 1572c93beccSCyndy Ishida} // end namespace test7 1582c93beccSCyndy Ishida 1592c93beccSCyndy Ishida// Abstract base class with a sub class. Overloaded method has no inline 1602c93beccSCyndy Ishida// attribute and is recognized as key method, 1612c93beccSCyndy Ishida// but is later implemented inline. Weak-def RTTI only. 1622c93beccSCyndy Ishidanamespace test8 { 1632c93beccSCyndy Ishidaclass Base { 1642c93beccSCyndy Ishidapublic: 1652c93beccSCyndy Ishida virtual ~Base() {} 1662c93beccSCyndy Ishida virtual void run() = 0; 1672c93beccSCyndy Ishida}; 1682c93beccSCyndy Ishida 1692c93beccSCyndy Ishidaclass Sub : public Base { 1702c93beccSCyndy Ishidapublic: 1712c93beccSCyndy Ishida void run() override; 1722c93beccSCyndy Ishida}; 1732c93beccSCyndy Ishida 1742c93beccSCyndy Ishidainline void Sub::run() {} 1752c93beccSCyndy Ishida} // end namespace test8 1762c93beccSCyndy Ishida 1772c93beccSCyndy Ishidanamespace test9 { 1782c93beccSCyndy Ishidaclass Base { 1792c93beccSCyndy Ishidapublic: 1802c93beccSCyndy Ishida virtual ~Base() {} 1812c93beccSCyndy Ishida virtual void run1() = 0; 1822c93beccSCyndy Ishida virtual void run2() = 0; 1832c93beccSCyndy Ishida}; 1842c93beccSCyndy Ishida 1852c93beccSCyndy Ishidaclass Sub : public Base { 1862c93beccSCyndy Ishidapublic: 1872c93beccSCyndy Ishida void run1() override {} 1882c93beccSCyndy Ishida void run2() override; 1892c93beccSCyndy Ishida}; 1902c93beccSCyndy Ishida 1912c93beccSCyndy Ishidainline void Sub::run2() {} 1922c93beccSCyndy Ishida} // end namespace test9 1932c93beccSCyndy Ishida 1942c93beccSCyndy Ishidanamespace test10 { 1952c93beccSCyndy Ishidaclass Base { 1962c93beccSCyndy Ishidapublic: 1972c93beccSCyndy Ishida virtual ~Base() {} 1982c93beccSCyndy Ishida virtual void run1() = 0; 1992c93beccSCyndy Ishida virtual void run2() = 0; 2002c93beccSCyndy Ishida}; 2012c93beccSCyndy Ishida 2022c93beccSCyndy Ishidaclass Sub : public Base { 2032c93beccSCyndy Ishidapublic: 2042c93beccSCyndy Ishida void run1() override {} 2052c93beccSCyndy Ishida inline void run2() override; 2062c93beccSCyndy Ishida}; 2072c93beccSCyndy Ishida 2082c93beccSCyndy Ishidavoid Sub::run2() {} 2092c93beccSCyndy Ishida} // end namespace test10 2102c93beccSCyndy Ishida 2112c93beccSCyndy Ishidanamespace test11 { 2122c93beccSCyndy Ishidaclass Base { 2132c93beccSCyndy Ishidapublic: 2142c93beccSCyndy Ishida virtual ~Base() {} 2152c93beccSCyndy Ishida virtual void run1() = 0; 2162c93beccSCyndy Ishida virtual void run2() = 0; 2172c93beccSCyndy Ishida virtual void run3() = 0; 2182c93beccSCyndy Ishida}; 2192c93beccSCyndy Ishida 2202c93beccSCyndy Ishidaclass Sub : public Base { 2212c93beccSCyndy Ishidapublic: 2222c93beccSCyndy Ishida void run1() override {} 2232c93beccSCyndy Ishida void run2() override; 2242c93beccSCyndy Ishida void run3() override; 2252c93beccSCyndy Ishida}; 2262c93beccSCyndy Ishida 2272c93beccSCyndy Ishidainline void Sub::run2() {} 2282c93beccSCyndy Ishida} // end namespace test11 2292c93beccSCyndy Ishida 2302c93beccSCyndy Ishidanamespace test12 { 2312c93beccSCyndy Ishidatemplate <class T> class Simple { 2322c93beccSCyndy Ishidapublic: 2332c93beccSCyndy Ishida virtual void foo() {} 2342c93beccSCyndy Ishida}; 2352c93beccSCyndy Ishidaextern template class Simple<int>; 2362c93beccSCyndy Ishida} // end namespace test12 2372c93beccSCyndy Ishida 2382c93beccSCyndy Ishidanamespace test13 { 2392c93beccSCyndy Ishidaclass Base { 2402c93beccSCyndy Ishidapublic: 2412c93beccSCyndy Ishida virtual ~Base() {} 2422c93beccSCyndy Ishida virtual void run1() = 0; 2432c93beccSCyndy Ishida virtual void run2() {}; 2442c93beccSCyndy Ishida virtual void run3(); // key function. 2452c93beccSCyndy Ishida}; 2462c93beccSCyndy Ishida 2472c93beccSCyndy Ishidaclass Sub : public Base { 2482c93beccSCyndy Ishidapublic: 2492c93beccSCyndy Ishida void run1() override {} 2502c93beccSCyndy Ishida void run2() override {} 2512c93beccSCyndy Ishida}; 2522c93beccSCyndy Ishida 2532c93beccSCyndy Ishida} // end namespace test13 2542c93beccSCyndy Ishida 2552c93beccSCyndy Ishidanamespace test14 { 2562c93beccSCyndy Ishida 2572c93beccSCyndy Ishidaclass __attribute__((visibility("hidden"))) Base 2582c93beccSCyndy Ishida{ 2592c93beccSCyndy Ishidapublic: 2602c93beccSCyndy Ishida Base() {} 2612c93beccSCyndy Ishida virtual ~Base(); // keyfunction. 2622c93beccSCyndy Ishida virtual void run1() const = 0; 2632c93beccSCyndy Ishida}; 2642c93beccSCyndy Ishida 2652c93beccSCyndy Ishidaclass Sub : public Base 2662c93beccSCyndy Ishida{ 2672c93beccSCyndy Ishidapublic: 2682c93beccSCyndy Ishida Sub(); 2692c93beccSCyndy Ishida virtual ~Sub(); 2702c93beccSCyndy Ishida virtual void run1() const; 2712c93beccSCyndy Ishida void run2() const {} 2722c93beccSCyndy Ishida}; 2732c93beccSCyndy Ishida 2742c93beccSCyndy Ishida} // end namespace test14 2752c93beccSCyndy Ishida 2762c93beccSCyndy Ishidanamespace test15 { 2772c93beccSCyndy Ishida 2782c93beccSCyndy Ishidaclass Base { 2792c93beccSCyndy Ishidapublic: 2802c93beccSCyndy Ishida virtual ~Base() {} 2812c93beccSCyndy Ishida virtual void run() {}; 2822c93beccSCyndy Ishida}; 2832c93beccSCyndy Ishida 2842c93beccSCyndy Ishidaclass Base1 { 2852c93beccSCyndy Ishidapublic: 2862c93beccSCyndy Ishida virtual ~Base1() {} 2872c93beccSCyndy Ishida virtual void run1() {}; 2882c93beccSCyndy Ishida}; 2892c93beccSCyndy Ishida 2902c93beccSCyndy Ishidaclass Sub : public Base, public Base1 { 2912c93beccSCyndy Ishidapublic: 2922c93beccSCyndy Ishida Sub() {} 2932c93beccSCyndy Ishida ~Sub(); 2942c93beccSCyndy Ishida void run() override; 2952c93beccSCyndy Ishida void run1() override; 2962c93beccSCyndy Ishida}; 2972c93beccSCyndy Ishida 2982c93beccSCyndy Ishidaclass Sub1 : public Base, public Base1 { 2992c93beccSCyndy Ishidapublic: 3002c93beccSCyndy Ishida Sub1() {} 3012c93beccSCyndy Ishida ~Sub1() = default; 3022c93beccSCyndy Ishida void run() override; 3032c93beccSCyndy Ishida void run1() override; 3042c93beccSCyndy Ishida}; 3052c93beccSCyndy Ishida 3062c93beccSCyndy Ishida} // end namespace test15 3072c93beccSCyndy Ishida 3082c93beccSCyndy Ishida//--- usr/local/include/templates.h 3092c93beccSCyndy Ishida#ifndef TEMPLATES_H 3102c93beccSCyndy Ishida#define TEMPLATES_H 3112c93beccSCyndy Ishida 3122c93beccSCyndy Ishidanamespace templates { 3132c93beccSCyndy Ishida 3142c93beccSCyndy Ishida// Full specialization. 3152c93beccSCyndy Ishidatemplate <class T> int foo1(T a) { return 1; } 3162c93beccSCyndy Ishidatemplate <> int foo1<int>(int a); 3172c93beccSCyndy Ishidaextern template int foo1<short>(short a); 3182c93beccSCyndy Ishida 3192c93beccSCyndy Ishidatemplate <class T> int foo2(T a); 3202c93beccSCyndy Ishida 3212c93beccSCyndy Ishida// Partial specialization. 3222c93beccSCyndy Ishidatemplate <class A, class B> class Partial { 3232c93beccSCyndy Ishida static int run(A a, B b) { return a + b; } 3242c93beccSCyndy Ishida}; 3252c93beccSCyndy Ishida 3262c93beccSCyndy Ishidatemplate <class A> class Partial<A, int> { 3272c93beccSCyndy Ishida static int run(A a, int b) { return a - b; } 3282c93beccSCyndy Ishida}; 3292c93beccSCyndy Ishida 3302c93beccSCyndy Ishidatemplate <class T> class Foo { 3312c93beccSCyndy Ishidapublic: 3322c93beccSCyndy Ishida Foo(); 3332c93beccSCyndy Ishida ~Foo(); 3342c93beccSCyndy Ishida}; 3352c93beccSCyndy Ishida 3362c93beccSCyndy Ishidatemplate <class T> class Bar { 3372c93beccSCyndy Ishidapublic: 3382c93beccSCyndy Ishida Bar(); 3392c93beccSCyndy Ishida ~Bar() {} 3402c93beccSCyndy Ishida 3412c93beccSCyndy Ishida inline int bazinga() { return 7; } 3422c93beccSCyndy Ishida}; 3432c93beccSCyndy Ishida 3442c93beccSCyndy Ishidaextern template class Bar<int>; 3452c93beccSCyndy Ishida 3462c93beccSCyndy Ishidaclass Bazz { 3472c93beccSCyndy Ishidapublic: 3482c93beccSCyndy Ishida Bazz() {} 3492c93beccSCyndy Ishida 3502c93beccSCyndy Ishida template <class T> int buzz(T a); 3512c93beccSCyndy Ishida 3522c93beccSCyndy Ishida float implicit() const { return foo1(0.0f); } 3532c93beccSCyndy Ishida}; 3542c93beccSCyndy Ishida 3552c93beccSCyndy Ishidatemplate <class T> int Bazz::buzz(T a) { return sizeof(T); } 3562c93beccSCyndy Ishida 3572c93beccSCyndy Ishidatemplate <class T> struct S { static int x; }; 3582c93beccSCyndy Ishida 3592c93beccSCyndy Ishidatemplate <class T> int S<T>::x = 0; 3602c93beccSCyndy Ishida 3612c93beccSCyndy Ishida} // end namespace templates. 3622c93beccSCyndy Ishida 3632c93beccSCyndy Ishida#endif 3642c93beccSCyndy Ishida 3652c93beccSCyndy Ishida 3662c93beccSCyndy Ishida//--- inputs.json.in 3672c93beccSCyndy Ishida{ 3682c93beccSCyndy Ishida "headers": [ { 3692c93beccSCyndy Ishida "path" : "DSTROOT/usr/include/basic.h", 3702c93beccSCyndy Ishida "type" : "public" 3712c93beccSCyndy Ishida }, 3722c93beccSCyndy Ishida { 3732c93beccSCyndy Ishida "path" : "DSTROOT/usr/local/include/vtable.h", 3742c93beccSCyndy Ishida "type" : "private" 3752c93beccSCyndy Ishida }, 3762c93beccSCyndy Ishida { 3772c93beccSCyndy Ishida "path" : "DSTROOT/usr/local/include/templates.h", 3782c93beccSCyndy Ishida "type" : "private" 3792c93beccSCyndy Ishida } 3802c93beccSCyndy Ishida ], 3812c93beccSCyndy Ishida "version": "3" 3822c93beccSCyndy Ishida} 3832c93beccSCyndy Ishida 3842c93beccSCyndy Ishida//--- expected-no-rtti.tbd 3852c93beccSCyndy Ishida{ 3862c93beccSCyndy Ishida "main_library": { 3872c93beccSCyndy Ishida "compatibility_versions": [ 3882c93beccSCyndy Ishida { 3892c93beccSCyndy Ishida "version": "0" 3902c93beccSCyndy Ishida } 3912c93beccSCyndy Ishida ], 3922c93beccSCyndy Ishida "current_versions": [ 3932c93beccSCyndy Ishida { 3942c93beccSCyndy Ishida "version": "0" 3952c93beccSCyndy Ishida } 3962c93beccSCyndy Ishida ], 3972c93beccSCyndy Ishida "exported_symbols": [ 3982c93beccSCyndy Ishida { 3992c93beccSCyndy Ishida "data": { 4002c93beccSCyndy Ishida "global": [ 4012c93beccSCyndy Ishida "__ZTVN6test143SubE", "__ZTVN6test113SubE", "__ZTVN5test26SimpleE", 4022c93beccSCyndy Ishida "__ZTVN5test53SubE", "__ZTVN6test154Sub1E", "__ZTVN6test153SubE", 4032c93beccSCyndy Ishida "__ZN3Bar1yE", "__ZTVN5test43SubE", "__ZTVN5test63SubE", 4042c93beccSCyndy Ishida "__ZTVN6test134BaseE" 4052c93beccSCyndy Ishida ], 4062c93beccSCyndy Ishida "weak": [ 4072c93beccSCyndy Ishida "__ZTVN6test126SimpleIiEE" 4082c93beccSCyndy Ishida ] 4092c93beccSCyndy Ishida }, 4102c93beccSCyndy Ishida "text": { 4112c93beccSCyndy Ishida "global": [ 4122c93beccSCyndy Ishida "__ZN6test153Sub3runEv", "__ZN6test154Sub13runEv", 4132c93beccSCyndy Ishida "__Z3bari", "__ZThn8_N6test153SubD1Ev", 4142c93beccSCyndy Ishida "__ZNK6test143Sub4run1Ev", "__ZN6test154Sub14run1Ev", 4152c93beccSCyndy Ishida "__ZThn8_N6test153Sub4run1Ev", "__ZN6test143SubD1Ev", 4162c93beccSCyndy Ishida "__ZN6test134Base4run3Ev", "__ZN5test16Simple3runEv", 4172c93beccSCyndy Ishida "__ZN5test43Sub3runEv", "__ZN6test113Sub4run3Ev", "__ZN6test153SubD2Ev", 4182c93beccSCyndy Ishida "__ZN5test53Sub3runEv", "__ZN6test153SubD1Ev", "__ZN6test143SubC1Ev", 4192c93beccSCyndy Ishida "__ZN9templates4foo1IiEEiT_", "__ZN6test143SubC2Ev", "__ZN5test63Sub3runEv", 4202c93beccSCyndy Ishida "__ZN5test26Simple3runEv", "__ZN6test153SubD0Ev", 4212c93beccSCyndy Ishida "__ZN6test143SubD2Ev", "__ZN6test153Sub4run1Ev", "__ZN6test143SubD0Ev", 4222c93beccSCyndy Ishida "__ZThn8_N6test153SubD0Ev", "__ZThn8_N6test154Sub14run1Ev", "_cFunc" 4232c93beccSCyndy Ishida ], 4242c93beccSCyndy Ishida "weak": [ 4252c93beccSCyndy Ishida "__ZN9templates3BarIiED2Ev", "__ZN9templates3BarIiEC2Ev", 4262c93beccSCyndy Ishida "__ZN9templates3BarIiEC1Ev", "__ZN9templates3BarIiED1Ev", 4272c93beccSCyndy Ishida "__ZN6test126SimpleIiE3fooEv", "__ZN9templates3BarIiE7bazingaEv", 4282c93beccSCyndy Ishida "__ZN9templates4foo1IsEEiT_" 4292c93beccSCyndy Ishida ] 4302c93beccSCyndy Ishida } 4312c93beccSCyndy Ishida } 4322c93beccSCyndy Ishida ], 4332c93beccSCyndy Ishida "flags": [ 4342c93beccSCyndy Ishida { 4352c93beccSCyndy Ishida "attributes": [ 4362c93beccSCyndy Ishida "not_app_extension_safe" 4372c93beccSCyndy Ishida ] 4382c93beccSCyndy Ishida } 4392c93beccSCyndy Ishida ], 4402c93beccSCyndy Ishida "install_names": [ 4412c93beccSCyndy Ishida { 4422c93beccSCyndy Ishida "name": "@rpath/lib/libcpp.dylib" 4432c93beccSCyndy Ishida } 4442c93beccSCyndy Ishida ], 4452c93beccSCyndy Ishida "target_info": [ 4462c93beccSCyndy Ishida { 4472c93beccSCyndy Ishida "min_deployment": "13.1", 4482c93beccSCyndy Ishida "target": "arm64-macos" 4492c93beccSCyndy Ishida } 4502c93beccSCyndy Ishida ] 4512c93beccSCyndy Ishida }, 4522c93beccSCyndy Ishida "tapi_tbd_version": 5 4532c93beccSCyndy Ishida} 4542c93beccSCyndy Ishida 4552c93beccSCyndy Ishida//--- expected-rtti.tbd 4562c93beccSCyndy Ishida{ 4572c93beccSCyndy Ishida "main_library": { 4582c93beccSCyndy Ishida "compatibility_versions": [ 4592c93beccSCyndy Ishida { 4602c93beccSCyndy Ishida "version": "0" 4612c93beccSCyndy Ishida } 4622c93beccSCyndy Ishida ], 4632c93beccSCyndy Ishida "current_versions": [ 4642c93beccSCyndy Ishida { 4652c93beccSCyndy Ishida "version": "0" 4662c93beccSCyndy Ishida } 4672c93beccSCyndy Ishida ], 4682c93beccSCyndy Ishida "exported_symbols": [ 4692c93beccSCyndy Ishida { 4702c93beccSCyndy Ishida "data": { 4712c93beccSCyndy Ishida "global": [ 4722c93beccSCyndy Ishida "__ZTVN6test143SubE", "__ZTIN5test63SubE", "__ZTSN5test26SimpleE", 4732c93beccSCyndy Ishida "__ZTIN6test153SubE", "__ZTVN6test113SubE", "__ZTIN5test43SubE", 4742c93beccSCyndy Ishida "__ZTIN6test134BaseE", "__ZTVN5test26SimpleE", "__ZTIN5test26SimpleE", 4752c93beccSCyndy Ishida "__ZTSN6test134BaseE", "__ZTVN6test154Sub1E", "__ZTVN5test43SubE", 4762c93beccSCyndy Ishida "__ZTVN5test63SubE", "__ZTSN5test43SubE", "__ZTSN6test113SubE", 4772c93beccSCyndy Ishida "__ZTIN6test154Sub1E", "__ZTSN6test153SubE", "__ZTSN5test63SubE", 4782c93beccSCyndy Ishida "__ZTSN6test154Sub1E", "__ZTIN6test113SubE", "__ZTSN6test143SubE", 4792c93beccSCyndy Ishida "__ZTVN5test53SubE", "__ZTIN6test143SubE", "__ZTVN6test153SubE", 4802c93beccSCyndy Ishida "__ZTIN5test53SubE", "__ZN3Bar1yE", "__ZTVN6test134BaseE", 4812c93beccSCyndy Ishida "__ZTSN5test53SubE" 4822c93beccSCyndy Ishida ], 4832c93beccSCyndy Ishida "weak": [ 4842c93beccSCyndy Ishida "__ZTVN6test126SimpleIiEE" 4852c93beccSCyndy Ishida ] 4862c93beccSCyndy Ishida }, 4872c93beccSCyndy Ishida "text": { 4882c93beccSCyndy Ishida "global": [ 4892c93beccSCyndy Ishida "__ZN6test154Sub13runEv", "__ZN6test153Sub3runEv", "__ZNK6test143Sub4run1Ev", 4902c93beccSCyndy Ishida "__ZN6test134Base4run3Ev", "__ZN5test16Simple3runEv", "__ZN6test153SubD2Ev", 4912c93beccSCyndy Ishida "__ZN6test143SubC2Ev", "__ZN5test63Sub3runEv", "__ZN6test153SubD0Ev", 4922c93beccSCyndy Ishida "__ZN6test143SubD2Ev", "__ZThn8_N6test154Sub14run1Ev", 4932c93beccSCyndy Ishida "__ZThn8_N6test153SubD0Ev", "__Z3bari", "__ZThn8_N6test153SubD1Ev", 4942c93beccSCyndy Ishida "__ZN6test154Sub14run1Ev", "__ZThn8_N6test153Sub4run1Ev", 4952c93beccSCyndy Ishida "__ZN6test143SubD1Ev", "__ZN5test43Sub3runEv", 4962c93beccSCyndy Ishida "__ZN6test113Sub4run3Ev", "__ZN5test53Sub3runEv", "__ZN6test143SubC1Ev", 4972c93beccSCyndy Ishida "__ZN6test153SubD1Ev", "__ZN9templates4foo1IiEEiT_", "__ZN5test26Simple3runEv", 4982c93beccSCyndy Ishida "__ZN6test153Sub4run1Ev", "__ZN6test143SubD0Ev", "_cFunc" 4992c93beccSCyndy Ishida ], 5002c93beccSCyndy Ishida "weak": [ 5012c93beccSCyndy Ishida "__ZN9templates3BarIiEC2Ev", "__ZN9templates3BarIiEC1Ev", 5022c93beccSCyndy Ishida "__ZN9templates3BarIiED1Ev", "__ZN6test126SimpleIiE3fooEv", 5032c93beccSCyndy Ishida "__ZN9templates4foo1IsEEiT_", "__ZN9templates3BarIiED2Ev", 5042c93beccSCyndy Ishida "__ZN9templates3BarIiE7bazingaEv" 5052c93beccSCyndy Ishida ] 5062c93beccSCyndy Ishida } 5072c93beccSCyndy Ishida } 5082c93beccSCyndy Ishida ], 5092c93beccSCyndy Ishida "flags": [ 5102c93beccSCyndy Ishida { 5112c93beccSCyndy Ishida "attributes": [ 5122c93beccSCyndy Ishida "not_app_extension_safe" 5132c93beccSCyndy Ishida ] 5142c93beccSCyndy Ishida } 5152c93beccSCyndy Ishida ], 5162c93beccSCyndy Ishida "install_names": [ 5172c93beccSCyndy Ishida { 5182c93beccSCyndy Ishida "name": "@rpath/lib/libcpp.dylib" 5192c93beccSCyndy Ishida } 5202c93beccSCyndy Ishida ], 5212c93beccSCyndy Ishida "target_info": [ 5222c93beccSCyndy Ishida { 5232c93beccSCyndy Ishida "min_deployment": "13.1", 5242c93beccSCyndy Ishida "target": "arm64-macos" 5252c93beccSCyndy Ishida } 5262c93beccSCyndy Ishida ] 5272c93beccSCyndy Ishida }, 5282c93beccSCyndy Ishida "tapi_tbd_version": 5 5292c93beccSCyndy Ishida} 5302c93beccSCyndy Ishida 531