Home | History | Annotate | Download | only in llvm-readobj
      1 # To regenerate t1.obj and t2.obj, run the following:
      2 # $ cat t.cpp
      3 # #ifdef CONFIG1
      4 # struct A;
      5 # struct B {
      6 #   A *a;
      7 # };
      8 # int f(A *a);
      9 # int g(B *b) { return f(b->a); }
     10 # #else
     11 # struct B;
     12 # struct A {
     13 #   B *b;
     14 # };
     15 # int g(B *b);
     16 # int f(A *a) { return g(a->b); }
     17 # #endif
     18 # $ cl -c -DCONFIG1 -Z7 t.cpp -Fot1.obj && cl -c -Z7 t.cpp -Fot2.obj
     19 
     20 RUN: llvm-readobj -codeview %S/Inputs/codeview-merging-1.obj | FileCheck %s --check-prefix=OBJ1
     21 RUN: llvm-readobj -codeview %S/Inputs/codeview-merging-2.obj | FileCheck %s --check-prefix=OBJ2
     22 RUN: llvm-readobj -codeview-merged-types %S/Inputs/codeview-merging-1.obj %S/Inputs/codeview-merging-2.obj | FileCheck %s
     23 
     24 OBJ1:       FuncId (0x100D) {
     25 OBJ1-NEXT:    TypeLeafKind: LF_FUNC_ID (0x1601)
     26 OBJ1-NEXT:    ParentScope: 0x0
     27 OBJ1-NEXT:    FunctionType: int (B*) (0x100C)
     28 OBJ1-NEXT:    Name: g
     29 OBJ1-NEXT:  }
     30 OBJ1-NEXT:  FuncId (0x100E) {
     31 OBJ1-NEXT:    TypeLeafKind: LF_FUNC_ID (0x1601)
     32 OBJ1-NEXT:    ParentScope: 0x0
     33 OBJ1-NEXT:    FunctionType: int (A*) (0x1003)
     34 OBJ1-NEXT:    Name: f
     35 OBJ1-NEXT:  }
     36 OBJ1-NOT: FuncId
     37 
     38 OBJ2:       FuncId (0x100D) {
     39 OBJ2-NEXT:    TypeLeafKind: LF_FUNC_ID (0x1601)
     40 OBJ2-NEXT:    ParentScope: 0x0
     41 OBJ2-NEXT:    FunctionType: int (A*) (0x100C)
     42 OBJ2-NEXT:    Name: f
     43 OBJ2-NEXT:  }
     44 
     45 OBJ2:       FuncId (0x1069) {
     46 OBJ2-NEXT:    TypeLeafKind: LF_FUNC_ID (0x1601)
     47 OBJ2-NEXT:    ParentScope: 0x0
     48 OBJ2-NEXT:    FunctionType: int (B*) (0x1003)
     49 OBJ2-NEXT:    Name: g
     50 OBJ2-NEXT:  }
     51 OBJ2-NOT: FuncId
     52 
     53 CHECK:       FuncId (0x100D) {
     54 CHECK-NEXT:    TypeLeafKind: LF_FUNC_ID (0x1601)
     55 CHECK-NEXT:    ParentScope: 0x0
     56 CHECK-NEXT:    FunctionType: int (B*) (0x100C)
     57 CHECK-NEXT:    Name: g
     58 CHECK-NEXT:  }
     59 CHECK-NEXT:  FuncId (0x100E) {
     60 CHECK-NEXT:    TypeLeafKind: LF_FUNC_ID (0x1601)
     61 CHECK-NEXT:    ParentScope: 0x0
     62 CHECK-NEXT:    FunctionType: int (A*) (0x1003)
     63 CHECK-NEXT:    Name: f
     64 CHECK-NEXT:  }
     65 CHECK-NOT: FuncId
     66