1f1fdfe68SAlexey Lapshin# RUN: dsymutil --linker=parallel -f -o - -oso-prepend-path=%p/../ -y %s | llvm-dwarfdump --verify - | FileCheck -check-prefixes=VERIFY %s 2f1fdfe68SAlexey Lapshin# RUN: dsymutil --linker=parallel -f -o - -oso-prepend-path=%p/../ -y %s | llvm-dwarfdump -a - | FileCheck %s 3b61ac4a8Savl-llvm 4b61ac4a8Savl-llvm# This test checks that types from several object files are 5b61ac4a8Savl-llvm# uniqued(moved into the artificial compile unit for types). 6b61ac4a8Savl-llvm# It also checks that information between different debug 7b61ac4a8Savl-llvm# tables is consistent. 8b61ac4a8Savl-llvm# 9b61ac4a8Savl-llvm# To recreate a test compile following example: 10b61ac4a8Savl-llvm# 11b61ac4a8Savl-llvm# main.cpp: 12b61ac4a8Savl-llvm# 13b61ac4a8Savl-llvm# include <string> 14b61ac4a8Savl-llvm# 15b61ac4a8Savl-llvm# void PrintSize ( const std::string& String ); 16b61ac4a8Savl-llvm# void PrintNewString ( const std::string& String ); 17b61ac4a8Savl-llvm# void PrintNewString2 ( const char* String ); 18b61ac4a8Savl-llvm# 19b61ac4a8Savl-llvm# int main ( void ) { 20b61ac4a8Savl-llvm# 21b61ac4a8Savl-llvm# PrintSize("hello"); 22b61ac4a8Savl-llvm# PrintNewString("hello"); 23b61ac4a8Savl-llvm# PrintNewString2("hello"); 24b61ac4a8Savl-llvm# printf("\n"); 25b61ac4a8Savl-llvm# 26b61ac4a8Savl-llvm# return 0; 27b61ac4a8Savl-llvm# } 28b61ac4a8Savl-llvm# 29b61ac4a8Savl-llvm# foo1.cpp: 30b61ac4a8Savl-llvm# 31b61ac4a8Savl-llvm# #include <string> 32b61ac4a8Savl-llvm# 33b61ac4a8Savl-llvm# void PrintSize ( const std::string& String ) { 34b61ac4a8Savl-llvm# printf("\n String size %lu", String.size() ); 35b61ac4a8Savl-llvm# }; 36b61ac4a8Savl-llvm# 37b61ac4a8Savl-llvm# foo2.cpp: 38b61ac4a8Savl-llvm# 39b61ac4a8Savl-llvm# #include <string> 40b61ac4a8Savl-llvm# 41b61ac4a8Savl-llvm# void PrintNewString ( const std::string& String ) { 42b61ac4a8Savl-llvm# std::string NewString(String); 43b61ac4a8Savl-llvm# NewString += "++"; 44b61ac4a8Savl-llvm# printf("\n String %s", NewString.c_str()); 45b61ac4a8Savl-llvm#}; 46b61ac4a8Savl-llvm# 47b61ac4a8Savl-llvm# foo3.cpp: 48b61ac4a8Savl-llvm# #include <string> 49b61ac4a8Savl-llvm# 50b61ac4a8Savl-llvm# void PrintNewString2 ( const char* String ) { 51b61ac4a8Savl-llvm# std::string NewString(String); 52b61ac4a8Savl-llvm# NewString += "++"; 53b61ac4a8Savl-llvm# printf("\n String2 %s", NewString.c_str()); 54b61ac4a8Savl-llvm# }; 55b61ac4a8Savl-llvm# 56b61ac4a8Savl-llvm# with clang++ -O -fno-inline -g -std=c++11 57b61ac4a8Savl-llvm 58b61ac4a8Savl-llvm--- 59b61ac4a8Savl-llvmtriple: 'x86_64-apple-darwin' 60b61ac4a8Savl-llvmobjects: 61b61ac4a8Savl-llvm - filename: 'Inputs/String/foo1.o' 62b61ac4a8Savl-llvm timestamp: 1638904719 63b61ac4a8Savl-llvm symbols: 64b61ac4a8Savl-llvm - { sym: __ZNKSt3__122__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getEv, objAddr: 0x00000000000000A0, binAddr: 0x0000000100000B10, size: 0x00000009 } 65b61ac4a8Savl-llvm - { sym: __ZNKSt3__117__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstEv, objAddr: 0x0000000000000090, binAddr: 0x0000000100000B00, size: 0x00000010 } 66b61ac4a8Savl-llvm - { sym: __Z9PrintSizeRKNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE, objAddr: 0x0000000000000000, binAddr: 0x0000000100000A70, size: 0x00000020 } 67b61ac4a8Savl-llvm - { sym: __ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__get_long_sizeEv, objAddr: 0x0000000000000060, binAddr: 0x0000000100000AD0, size: 0x00000010 } 68b61ac4a8Savl-llvm - { sym: __ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4sizeEv, objAddr: 0x0000000000000020, binAddr: 0x0000000100000A90, size: 0x00000030 } 69b61ac4a8Savl-llvm - { sym: __ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__get_short_sizeEv, objAddr: 0x0000000000000070, binAddr: 0x0000000100000AE0, size: 0x00000020 } 70b61ac4a8Savl-llvm - { sym: __ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__is_longEv, objAddr: 0x0000000000000050, binAddr: 0x0000000100000AC0, size: 0x00000010 } 71b61ac4a8Savl-llvm - filename: 'Inputs/String/foo2.o' 72b61ac4a8Savl-llvm timestamp: 1638904723 73b61ac4a8Savl-llvm symbols: 74b61ac4a8Savl-llvm - { sym: __ZNSt3__112__to_addressIKcEEPT_S3_, objAddr: 0x00000000000000E0, binAddr: 0x0000000100000BD0, size: 0x00000010 } 75b61ac4a8Savl-llvm - { sym: GCC_except_table0, objAddr: 0x000000000000016C, binAddr: 0x0000000100000F24, size: 0x00000000 } 76b61ac4a8Savl-llvm - { sym: __ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerEv, objAddr: 0x0000000000000120, binAddr: 0x0000000100000C10, size: 0x00000010 } 77b61ac4a8Savl-llvm - { sym: __ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerEv, objAddr: 0x0000000000000130, binAddr: 0x0000000100000C20, size: 0x00000020 } 78b61ac4a8Savl-llvm - { sym: __ZNSt3__114pointer_traitsIPKcE10pointer_toERS1_, objAddr: 0x0000000000000150, binAddr: 0x0000000100000C40, size: 0x00000010 } 79b61ac4a8Savl-llvm - { sym: __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEpLEPKc, objAddr: 0x0000000000000070, binAddr: 0x0000000100000B90, size: 0x00000010 } 80b61ac4a8Savl-llvm - { sym: __ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4dataEv, objAddr: 0x00000000000000C0, binAddr: 0x0000000100000BB0, size: 0x00000020 } 81b61ac4a8Savl-llvm - { sym: __Z14PrintNewStringRKNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE, objAddr: 0x0000000000000000, binAddr: 0x0000000100000B20, size: 0x00000070 } 82b61ac4a8Savl-llvm - { sym: __ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5c_strEv, objAddr: 0x0000000000000080, binAddr: 0x0000000100000BA1, size: 0x00000010 } 83b61ac4a8Savl-llvm - { sym: __ZNSt3__19addressofIKcEEPT_RS2_, objAddr: 0x0000000000000160, binAddr: 0x0000000100000C50, size: 0x00000009 } 84b61ac4a8Savl-llvm - { sym: __ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerEv, objAddr: 0x00000000000000F0, binAddr: 0x0000000100000BE0, size: 0x00000030 } 85b61ac4a8Savl-llvm - filename: 'Inputs/String/foo3.o' 86b61ac4a8Savl-llvm timestamp: 1638904727 87b61ac4a8Savl-llvm symbols: 88b61ac4a8Savl-llvm - { sym: __ZNSt3__117__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2INS_18__default_init_tagESA_EEOT_OT0_, objAddr: 0x0000000000000130, binAddr: 0x0000000100000D40, size: 0x00000040 } 89b61ac4a8Savl-llvm - { sym: __ZNSt3__117__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC1INS_18__default_init_tagESA_EEOT_OT0_, objAddr: 0x0000000000000110, binAddr: 0x0000000100000D20, size: 0x00000010 } 90b61ac4a8Savl-llvm - { sym: __ZNSt3__111char_traitsIcE6lengthEPKc, objAddr: 0x0000000000000120, binAddr: 0x0000000100000D50, size: 0x00000010 } 91b61ac4a8Savl-llvm - { sym: __ZNSt3__116__non_trivial_ifILb1ENS_9allocatorIcEEEC2Ev, objAddr: 0x00000000000001B0, binAddr: 0x0000000100000DC0, size: 0x00000010 } 92b61ac4a8Savl-llvm - { sym: __ZNSt3__17forwardINS_18__default_init_tagEEEOT_RNS_16remove_referenceIS2_E4typeE, objAddr: 0x0000000000000170, binAddr: 0x0000000100000D80, size: 0x00000010 } 93b61ac4a8Savl-llvm - { sym: __ZNSt3__122__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EEC2ENS_18__default_init_tagE, objAddr: 0x0000000000000180, binAddr: 0x0000000100000D90, size: 0x00000010 } 94b61ac4a8Savl-llvm - { sym: __ZNSt3__122__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2ENS_18__default_init_tagE, objAddr: 0x0000000000000190, binAddr: 0x0000000100000DA0, size: 0x00000010 } 95b61ac4a8Savl-llvm - { sym: __ZNSt3__19allocatorIcEC2Ev, objAddr: 0x00000000000001A0, binAddr: 0x0000000100000DB0, size: 0x00000010 } 96b61ac4a8Savl-llvm - { sym: __Z15PrintNewString2PKc, objAddr: 0x0000000000000000, binAddr: 0x0000000100000C60, size: 0x00000070 } 97b61ac4a8Savl-llvm - { sym: GCC_except_table0, objAddr: 0x000000000000026C, binAddr: 0x0000000100000F34, size: 0x00000000 } 98b61ac4a8Savl-llvm - { sym: __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1IDnEEPKc, objAddr: 0x0000000000000070, binAddr: 0x0000000100000CD0, size: 0x00000010 } 99b61ac4a8Savl-llvm - { sym: __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2IDnEEPKc, objAddr: 0x00000000000000D0, binAddr: 0x0000000100000CE0, size: 0x00000040 } 100b61ac4a8Savl-llvm - filename: 'Inputs/String/main.o' 101b61ac4a8Savl-llvm timestamp: 1638904734 102b61ac4a8Savl-llvm symbols: 103b61ac4a8Savl-llvm - { sym: _main, objAddr: 0x0000000000000000, binAddr: 0x0000000100000DD0, size: 0x00000090 } 104b61ac4a8Savl-llvm - { sym: GCC_except_table0, objAddr: 0x0000000000000188, binAddr: 0x0000000100000F44, size: 0x00000000 } 105b61ac4a8Savl-llvm... 106b61ac4a8Savl-llvm 107b61ac4a8Savl-llvmVERIFY: Verifying .debug_abbrev... 108b61ac4a8Savl-llvmVERIFY: Verifying .debug_info Unit Header Chain... 109b61ac4a8Savl-llvmVERIFY: Verifying .debug_types Unit Header Chain... 110b61ac4a8Savl-llvmVERIFY: Verifying .apple_names... 111b61ac4a8Savl-llvmVERIFY: Verifying .apple_types... 112b61ac4a8Savl-llvmVERIFY: Verifying .apple_namespaces... 113b61ac4a8Savl-llvmVERIFY: Verifying .apple_objc... 114b61ac4a8Savl-llvmVERIFY: No errors. 115b61ac4a8Savl-llvm 116b61ac4a8Savl-llvmCHECK: .debug_info contents: 117b61ac4a8Savl-llvmCHECK: Compile Unit: 118b61ac4a8Savl-llvmCHECK: DW_TAG_compile_unit 119b61ac4a8Savl-llvmCHECK: DW_AT_name{{.*}}"__artificial_type_unit" 120b61ac4a8Savl-llvm 121b61ac4a8Savl-llvmCHECK:DW_TAG_base_type 122b61ac4a8Savl-llvm 123b61ac4a8Savl-llvmCHECK: 0x[[BASE_INT:[0-9a-f]*]]: DW_TAG_base_type{{.*[[:space:]].*}}DW_AT_name{{.*}}"int" 124b61ac4a8Savl-llvm 125b61ac4a8Savl-llvmCHECK:DW_TAG_class_type 126b61ac4a8Savl-llvm 127b61ac4a8Savl-llvmCHECK: 0x[[BASIC_STRING:[0-9a-f]*]]: DW_TAG_class_type{{.*[[:space:]].*}}DW_AT_calling_convention{{.*}}{{.*[[:space:]].*}}DW_AT_name{{.*}}"basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >" 128b61ac4a8Savl-llvm 129b61ac4a8Savl-llvmCHECK:DW_TAG_typedef 130b61ac4a8Savl-llvm 131b61ac4a8Savl-llvmCHECK: 0x[[STRING:[0-9a-f]*]]: DW_TAG_typedef{{.*[[:space:]].*}}DW_AT_type{{.*}}0x[[BASIC_STRING]] "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >"){{.*[[:space:]].*}}DW_AT_name{{.*}}"string" 132b61ac4a8Savl-llvm 133b61ac4a8Savl-llvmCHECK:DW_TAG_reference_type 134b61ac4a8Savl-llvm 135*9de73b20SZequan WuCHECK: 0x[[CONST_STR_REF:[0-9a-f]*]]: DW_TAG_reference_type{{.*[[:space:]].*}}DW_AT_type{{.*}}0x[[CONST_STRING:[0-9a-f]*]] "const std::__1::string" 136b61ac4a8Savl-llvm 137b61ac4a8Savl-llvmCHECK:DW_TAG_const_type 138b61ac4a8Savl-llvm 139*9de73b20SZequan WuCHECK: 0x[[CONST_STRING]]: DW_TAG_const_type{{.*[[:space:]].*}}DW_AT_type{{.*}}0x[[STRING]] "std::__1::string" 140b61ac4a8Savl-llvm 141b61ac4a8Savl-llvm 142b61ac4a8Savl-llvmCHECK: Compile Unit: 143b61ac4a8Savl-llvmCHECK: DW_TAG_compile_unit 144b61ac4a8Savl-llvmCHECK: DW_AT_name{{.*}}"foo1.cpp" 145b61ac4a8Savl-llvmCHECK: DW_TAG_subprogram 146b61ac4a8Savl-llvmCHECK: DW_AT_low_pc 147b61ac4a8Savl-llvmCHECK: DW_AT_high_pc 148b61ac4a8Savl-llvmCHECK: DW_AT_name{{.*}}"PrintSize" 149b61ac4a8Savl-llvmCHECK: DW_TAG_formal_parameter 150b61ac4a8Savl-llvmCHECK: DW_AT_name{{.*}}"String" 151*9de73b20SZequan WuCHECK: DW_AT_type{{.*}}0x00000000[[CONST_STR_REF]] "const std::__1::string &" 152b61ac4a8Savl-llvm 153b61ac4a8Savl-llvmCHECK: Compile Unit: 154b61ac4a8Savl-llvmCHECK: DW_TAG_compile_unit 155b61ac4a8Savl-llvmCHECK: DW_AT_name{{.*}}"foo2.cpp" 156b61ac4a8Savl-llvmCHECK: DW_TAG_subprogram 157b61ac4a8Savl-llvmCHECK: DW_AT_low_pc 158b61ac4a8Savl-llvmCHECK: DW_AT_high_pc 159b61ac4a8Savl-llvmCHECK: DW_AT_name{{.*}}"PrintNewString" 160b61ac4a8Savl-llvmCHECK: DW_TAG_formal_parameter 161b61ac4a8Savl-llvmCHECK: DW_AT_name{{.*}}"String" 162b61ac4a8Savl-llvm 163b61ac4a8Savl-llvmCHECK: Compile Unit: 164b61ac4a8Savl-llvmCHECK: DW_TAG_compile_unit 165b61ac4a8Savl-llvmCHECK: DW_AT_name{{.*}}"foo3.cpp" 166b61ac4a8Savl-llvmCHECK: DW_TAG_subprogram 167b61ac4a8Savl-llvmCHECK: DW_AT_low_pc 168b61ac4a8Savl-llvmCHECK: DW_AT_high_pc 169b61ac4a8Savl-llvmCHECK: DW_AT_name{{.*}}"PrintNewString2" 170b61ac4a8Savl-llvmCHECK: DW_TAG_formal_parameter 171b61ac4a8Savl-llvmCHECK: DW_AT_name{{.*}}"String" 172b61ac4a8Savl-llvm 173b61ac4a8Savl-llvmCHECK: Compile Unit: 174b61ac4a8Savl-llvmCHECK: DW_TAG_compile_unit 175b61ac4a8Savl-llvmCHECK: DW_AT_name{{.*}}"main.cpp" 176b61ac4a8Savl-llvmCHECK: DW_TAG_subprogram 177b61ac4a8Savl-llvmCHECK: DW_AT_low_pc 178b61ac4a8Savl-llvmCHECK: DW_AT_high_pc 179b61ac4a8Savl-llvmCHECK: DW_AT_name{{.*}}"main" 180b61ac4a8Savl-llvmCHECK: DW_AT_type{{.*}}0x00000000[[BASE_INT]] "int" 181