| # Source file compiled: |
| ##include <iostream> |
| # #include <typeinfo> |
| #template <class A> |
| #void foo(A variable) { |
| # std::cout << "foo is " << typeid(A).name() << "\n"; |
| #} |
| #int main () { |
| # char x = 'x'; |
| # int y = 1; |
| # foo(x); |
| # foo(y); |
| # return 0; |
| #} |
| |
| RUN: llvm-readobj -g %p/Inputs/elf-groups.x86_64 \ |
| RUN: | FileCheck %s |
| RUN: llvm-readobj -g -elf-output-style=GNU %p/Inputs/elf-groups.x86_64 \ |
| RUN: | FileCheck --check-prefix="GNU" %s |
| CHECK: Groups { |
| CHECK-NEXT: Group { |
| CHECK-NEXT: Name: .group (92) |
| CHECK-NEXT: Index: 1 |
| CHECK-NEXT: Link: 23 |
| CHECK-NEXT: Info: 17 |
| CHECK-NEXT: Type: COMDAT (0x1) |
| CHECK-NEXT: Signature: _Z3fooIcEvT_ |
| CHECK-NEXT: Section(s) in group [ |
| CHECK-NEXT: .text._Z3fooIcEvT_ (10) |
| CHECK-NEXT: .rela.text._Z3fooIcEvT_ (11) |
| CHECK-NEXT: ] |
| CHECK-NEXT: } |
| CHECK-NEXT: Group { |
| CHECK-NEXT: Name: .group (92) |
| CHECK-NEXT: Index: 2 |
| CHECK-NEXT: Link: 23 |
| CHECK-NEXT: Info: 18 |
| CHECK-NEXT: Type: COMDAT (0x1) |
| CHECK-NEXT: Signature: _Z3fooIiEvT_ |
| CHECK-NEXT: Section(s) in group [ |
| CHECK-NEXT: .text._Z3fooIiEvT_ (12) |
| CHECK-NEXT: .rela.text._Z3fooIiEvT_ (13) |
| CHECK-NEXT: ] |
| CHECK-NEXT: } |
| |
| GNU:COMDAT group section [ 1] `.group' [_Z3fooIcEvT_] contains 2 sections: |
| GNU-NEXT: [Index] Name |
| GNU-NEXT: [ 10] .text._Z3fooIcEvT_ |
| GNU-NEXT: [ 11] .rela.text._Z3fooIcEvT_ |
| GNU:COMDAT group section [ 2] `.group' [_Z3fooIiEvT_] contains 2 sections: |
| GNU-NEXT: [Index] Name |
| GNU-NEXT: [ 12] .text._Z3fooIiEvT_ |
| GNU-NEXT: [ 13] .rela.text._Z3fooIiEvT_ |
| GNU:COMDAT group section [ 3] `.group' [_ZNKSt9type_info4nameEv] contains 1 sections: |
| GNU-NEXT: [Index] Name |
| GNU-NEXT: [ 14] .text._ZNKSt9type_info4nameEv |