xref: /llvm-project/clang/test/InstallAPI/cpp.test (revision feed66f3eae5006bb05e6cb34801930fd940daa8)
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