1 # Source file compiled: 2 ##include <iostream> 3 # #include <typeinfo> 4 #template <class A> 5 #void foo(A variable) { 6 # std::cout << "foo is " << typeid(A).name() << "\n"; 7 #} 8 #int main () { 9 # char x = 'x'; 10 # int y = 1; 11 # foo(x); 12 # foo(y); 13 # return 0; 14 #} 15 16 RUN: llvm-readobj -g %p/Inputs/elf-groups.x86_64 \ 17 RUN: | FileCheck %s 18 RUN: llvm-readobj -g -elf-output-style=GNU %p/Inputs/elf-groups.x86_64 \ 19 RUN: | FileCheck --check-prefix="GNU" %s 20 CHECK: Groups { 21 CHECK-NEXT: Group { 22 CHECK-NEXT: Name: .group (92) 23 CHECK-NEXT: Index: 1 24 CHECK-NEXT: Type: COMDAT (0x1) 25 CHECK-NEXT: Signature: _Z3fooIcEvT_ 26 CHECK-NEXT: Section(s) in group [ 27 CHECK-NEXT: .text._Z3fooIcEvT_ (10) 28 CHECK-NEXT: .rela.text._Z3fooIcEvT_ (11) 29 CHECK-NEXT: ] 30 CHECK-NEXT: } 31 CHECK-NEXT: Group { 32 CHECK-NEXT: Name: .group (92) 33 CHECK-NEXT: Index: 2 34 CHECK-NEXT: Type: COMDAT (0x1) 35 CHECK-NEXT: Signature: _Z3fooIiEvT_ 36 CHECK-NEXT: Section(s) in group [ 37 CHECK-NEXT: .text._Z3fooIiEvT_ (12) 38 CHECK-NEXT: .rela.text._Z3fooIiEvT_ (13) 39 CHECK-NEXT: ] 40 CHECK-NEXT: } 41 42 GNU:COMDAT group section [ 1] `.group' [_Z3fooIcEvT_] contains 2 sections: 43 GNU-NEXT: [Index] Name 44 GNU-NEXT: [ 10] .text._Z3fooIcEvT_ 45 GNU-NEXT: [ 11] .rela.text._Z3fooIcEvT_ 46 GNU:COMDAT group section [ 2] `.group' [_Z3fooIiEvT_] contains 2 sections: 47 GNU-NEXT: [Index] Name 48 GNU-NEXT: [ 12] .text._Z3fooIiEvT_ 49 GNU-NEXT: [ 13] .rela.text._Z3fooIiEvT_ 50 GNU:COMDAT group section [ 3] `.group' [_ZNKSt9type_info4nameEv] contains 1 sections: 51 GNU-NEXT: [Index] Name 52 GNU-NEXT: [ 14] .text._ZNKSt9type_info4nameEv 53