1ad1f5457SDerek Schuff; RUN: llc -filetype=obj %s -o - | llvm-readobj -r - | FileCheck %s 2ad1f5457SDerek Schuff 3ad1f5457SDerek Schuff; Test for PR50408. Compiled from: 4ad1f5457SDerek Schuff; char a(); 5ad1f5457SDerek Schuff; template <typename, char b()> 6ad1f5457SDerek Schuff; void f() { b(); } 7ad1f5457SDerek Schuff; void g() { f<char, a>(); } 8ad1f5457SDerek Schuff 9ad1f5457SDerek Schuff; CHECK: Section (10) .debug_addr 10ad1f5457SDerek Schuff; CHECK-NEXT: 0x8 R_WASM_FUNCTION_OFFSET_I32 _Z1gv 0 11ad1f5457SDerek Schuff; CHECK-NEXT: 0xC R_WASM_FUNCTION_OFFSET_I32 _Z1fIcXadL_Z1avEEEvv 0 12ad1f5457SDerek Schuff; ensure that the reloc type is correct for _Z1av which is undefined 13ad1f5457SDerek Schuff; CHECK-NEXT: 0x10 R_WASM_FUNCTION_OFFSET_I32 _Z1av 0 14ad1f5457SDerek Schuff; CHECK-NEXT: } 15ad1f5457SDerek Schuff 16ad1f5457SDerek Schuff; ModuleID = 'PR50408.cc' 17ad1f5457SDerek Schuffsource_filename = "PR50408.cc" 18ad1f5457SDerek Schufftarget datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128-ni:1" 19ad1f5457SDerek Schufftarget triple = "wasm32-unknown-emscripten" 20ad1f5457SDerek Schuff 21ad1f5457SDerek Schuff$_Z1fIcXadL_Z1avEEEvv = comdat any 22ad1f5457SDerek Schuff 23ad1f5457SDerek Schuff; Function Attrs: noinline optnone mustprogress 24ad1f5457SDerek Schuffdefine hidden void @_Z1gv() #0 !dbg !7 { 25ad1f5457SDerek Schuffentry: 26ad1f5457SDerek Schuff call void @_Z1fIcXadL_Z1avEEEvv(), !dbg !10 27ad1f5457SDerek Schuff ret void, !dbg !11 28ad1f5457SDerek Schuff} 29ad1f5457SDerek Schuff 30ad1f5457SDerek Schuff; Function Attrs: noinline optnone mustprogress 31ad1f5457SDerek Schuffdefine linkonce_odr hidden void @_Z1fIcXadL_Z1avEEEvv() #0 comdat !dbg !12 { 32ad1f5457SDerek Schuffentry: 33ad1f5457SDerek Schuff %call = call signext i8 @_Z1av(), !dbg !20 34ad1f5457SDerek Schuff ret void, !dbg !21 35ad1f5457SDerek Schuff} 36ad1f5457SDerek Schuff 37ad1f5457SDerek Schuffdeclare signext i8 @_Z1av() #1 38ad1f5457SDerek Schuff 39ad1f5457SDerek Schuffattributes #0 = { noinline optnone mustprogress "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" } 40ad1f5457SDerek Schuffattributes #1 = { "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" } 41ad1f5457SDerek Schuff 42ad1f5457SDerek Schuff!llvm.dbg.cu = !{!0} 43ad1f5457SDerek Schuff!llvm.module.flags = !{!3, !4, !5} 44ad1f5457SDerek Schuff!llvm.ident = !{!6} 45ad1f5457SDerek Schuff 46ad1f5457SDerek Schuff!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 13.0.0 (https://github.com/llvm/llvm-project.git 5027637fa1d409e3ca78dab60dc2e2db6c62c175)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, splitDebugInlining: false, nameTableKind: None) 47ad1f5457SDerek Schuff!1 = !DIFile(filename: "PR50408.cc", directory: "/s/emr/emscripten-releases/localtests", checksumkind: CSK_MD5, checksum: "285a5682ae46dbbe90ccfb84cdef66c7") 48ad1f5457SDerek Schuff!2 = !{} 49ad1f5457SDerek Schuff!3 = !{i32 7, !"Dwarf Version", i32 5} 50ad1f5457SDerek Schuff!4 = !{i32 2, !"Debug Info Version", i32 3} 51ad1f5457SDerek Schuff!5 = !{i32 1, !"wchar_size", i32 4} 52ad1f5457SDerek Schuff!6 = !{!"clang version 13.0.0 (https://github.com/llvm/llvm-project.git 5027637fa1d409e3ca78dab60dc2e2db6c62c175)"} 53ad1f5457SDerek Schuff!7 = distinct !DISubprogram(name: "g", linkageName: "_Z1gv", scope: !1, file: !1, line: 5, type: !8, scopeLine: 5, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) 54ad1f5457SDerek Schuff!8 = !DISubroutineType(types: !9) 55ad1f5457SDerek Schuff!9 = !{null} 56ad1f5457SDerek Schuff!10 = !DILocation(line: 5, column: 12, scope: !7) 57ad1f5457SDerek Schuff!11 = !DILocation(line: 5, column: 26, scope: !7) 58ad1f5457SDerek Schuff!12 = distinct !DISubprogram(name: "f<char, &a>", linkageName: "_Z1fIcXadL_Z1avEEEvv", scope: !1, file: !1, line: 4, type: !8, scopeLine: 4, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, templateParams: !13, retainedNodes: !2) 59ad1f5457SDerek Schuff!13 = !{!14, !16} 60ad1f5457SDerek Schuff!14 = !DITemplateTypeParameter(type: !15) 61ad1f5457SDerek Schuff!15 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char) 62*270f63b8SFangrui Song!16 = !DITemplateValueParameter(name: "b", type: !17, value: ptr @_Z1av) 63ad1f5457SDerek Schuff!17 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !18, size: 32) 64ad1f5457SDerek Schuff!18 = !DISubroutineType(types: !19) 65ad1f5457SDerek Schuff!19 = !{!15} 66ad1f5457SDerek Schuff!20 = !DILocation(line: 4, column: 12, scope: !12) 67ad1f5457SDerek Schuff!21 = !DILocation(line: 4, column: 17, scope: !12) 68