diff options
author | Scott Linder <scott.linder@amd.com> | 2025-04-24 13:03:33 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-24 13:03:33 -0400 |
commit | e78b763568e47e685926614195c3075afa35668c (patch) | |
tree | 2fcc099b3183d09360a2b26dbd630fe1e130f415 | |
parent | 565a075909046f74c2fbb7713419518464599a4e (diff) | |
download | llvm-e78b763568e47e685926614195c3075afa35668c.zip llvm-e78b763568e47e685926614195c3075afa35668c.tar.gz llvm-e78b763568e47e685926614195c3075afa35668c.tar.bz2 |
update_test_checks: Relax DIFile filename checks (#135692)
Avoid baking in absolute paths in check lines generated for DIFile
metadata. Generated test checks cannot be sensitive to absolute paths
anyway, as those vary with the environment, but there could be
situations where some sensitivity to partial paths is required for
certain tests. This implementation just assumes such tests aren't worth
the effort to support, but it could be supported in the future.
This is most useful for update_cc_test_checks with debug info enabled,
where the test writer cannot manipulate the paths within the generated
IR directly.
6 files changed, 88 insertions, 3 deletions
diff --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/difile_absolute_filenames.ll b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/difile_absolute_filenames.ll new file mode 100644 index 0000000..abce2a8 --- /dev/null +++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/difile_absolute_filenames.ll @@ -0,0 +1,28 @@ +; RUN: opt < %s -S | FileCheck %s + +source_filename = "/llvm-project/foo.c" + +define dso_local void @f() !dbg !10 { +entry: + ret void, !dbg !14 +} + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!2, !3, !4, !5, !6, !7, !8} +!llvm.ident = !{!9} + +!0 = distinct !DICompileUnit(language: DW_LANG_C11, file: !1, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None) +!1 = !DIFile(filename: "/llvm-project/foo.c", directory: "/llvm-project") +!2 = !{i32 7, !"Dwarf Version", i32 5} +!3 = !{i32 2, !"Debug Info Version", i32 3} +!4 = !{i32 1, !"wchar_size", i32 4} +!5 = !{i32 8, !"PIC Level", i32 2} +!6 = !{i32 7, !"PIE Level", i32 2} +!7 = !{i32 7, !"uwtable", i32 2} +!8 = !{i32 7, !"frame-pointer", i32 2} +!9 = !{!"clang"} +!10 = distinct !DISubprogram(name: "f", scope: !11, file: !11, line: 1, type: !12, scopeLine: 1, spFlags: DISPFlagDefinition, unit: !0) +!11 = !DIFile(filename: "foo.c", directory: "/llvm-project") +!12 = !DISubroutineType(types: !13) +!13 = !{null} +!14 = !DILocation(line: 1, column: 11, scope: !10) diff --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/difile_absolute_filenames.ll.expected b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/difile_absolute_filenames.ll.expected new file mode 100644 index 0000000..0718b34 --- /dev/null +++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/difile_absolute_filenames.ll.expected @@ -0,0 +1,50 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals +; RUN: opt < %s -S | FileCheck %s + +source_filename = "/llvm-project/foo.c" + +define dso_local void @f() !dbg !10 { +; CHECK-LABEL: @f( +; CHECK-NEXT: entry: +; CHECK-NEXT: ret void, !dbg [[DBG14:![0-9]+]] +; +entry: + ret void, !dbg !14 +} + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!2, !3, !4, !5, !6, !7, !8} +!llvm.ident = !{!9} + +!0 = distinct !DICompileUnit(language: DW_LANG_C11, file: !1, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None) +!1 = !DIFile(filename: "/llvm-project/foo.c", directory: "/llvm-project") +!2 = !{i32 7, !"Dwarf Version", i32 5} +!3 = !{i32 2, !"Debug Info Version", i32 3} +!4 = !{i32 1, !"wchar_size", i32 4} +!5 = !{i32 8, !"PIC Level", i32 2} +!6 = !{i32 7, !"PIE Level", i32 2} +!7 = !{i32 7, !"uwtable", i32 2} +!8 = !{i32 7, !"frame-pointer", i32 2} +!9 = !{!"clang"} +!10 = distinct !DISubprogram(name: "f", scope: !11, file: !11, line: 1, type: !12, scopeLine: 1, spFlags: DISPFlagDefinition, unit: !0) +!11 = !DIFile(filename: "foo.c", directory: "/llvm-project") +!12 = !DISubroutineType(types: !13) +!13 = !{null} +!14 = !DILocation(line: 1, column: 11, scope: !10) +;. +; CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C11, file: [[META1:![0-9]+]], producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None) +; CHECK: [[META1]] = !DIFile(filename: "{{.*}}foo.c", directory: {{.*}}) +; CHECK: [[META2:![0-9]+]] = !{i32 7, !"Dwarf Version", i32 5} +; CHECK: [[META3:![0-9]+]] = !{i32 2, !"Debug Info Version", i32 3} +; CHECK: [[META4:![0-9]+]] = !{i32 1, !"wchar_size", i32 4} +; CHECK: [[META5:![0-9]+]] = !{i32 8, !"PIC Level", i32 2} +; CHECK: [[META6:![0-9]+]] = !{i32 7, !"PIE Level", i32 2} +; CHECK: [[META7:![0-9]+]] = !{i32 7, !"uwtable", i32 2} +; CHECK: [[META8:![0-9]+]] = !{i32 7, !"frame-pointer", i32 2} +; CHECK: [[META9:![0-9]+]] = !{!"clang"} +; CHECK: [[META10:![0-9]+]] = distinct !DISubprogram(name: "f", scope: [[META11:![0-9]+]], file: [[META11]], line: 1, type: [[META12:![0-9]+]], scopeLine: 1, spFlags: DISPFlagDefinition, unit: [[META0]]) +; CHECK: [[META11]] = !DIFile(filename: "{{.*}}foo.c", directory: {{.*}}) +; CHECK: [[META12]] = !DISubroutineType(types: [[META13:![0-9]+]]) +; CHECK: [[META13]] = !{null} +; CHECK: [[DBG14]] = !DILocation(line: 1, column: 11, scope: [[META10]]) +;. diff --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/various_ir_values_dbgrecords.ll.funcsig.globals.expected b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/various_ir_values_dbgrecords.ll.funcsig.globals.expected index 82f1442..02575d4 100644 --- a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/various_ir_values_dbgrecords.ll.funcsig.globals.expected +++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/various_ir_values_dbgrecords.ll.funcsig.globals.expected @@ -244,7 +244,7 @@ attributes #2 = { nounwind } ; CHECK: attributes #[[ATTR2]] = { nounwind } ;. ; CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C99, file: [[META1:![0-9]+]], producer: "{{.*}}clang version {{.*}}", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: [[META2:![0-9]+]], splitDebugInlining: false, nameTableKind: None) -; CHECK: [[META1]] = !DIFile(filename: "various_ir_values.c", directory: {{.*}}) +; CHECK: [[META1]] = !DIFile(filename: "{{.*}}various_ir_values.c", directory: {{.*}}) ; CHECK: [[META2]] = !{} ; CHECK: [[META3:![0-9]+]] = !{i32 7, !"Dwarf Version", i32 4} ; CHECK: [[META4:![0-9]+]] = !{i32 2, !"Debug Info Version", i32 3} diff --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/various_ir_values_dbgrecords.ll.funcsig.transitiveglobals.expected b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/various_ir_values_dbgrecords.ll.funcsig.transitiveglobals.expected index 9addb55..cd8dac7 100644 --- a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/various_ir_values_dbgrecords.ll.funcsig.transitiveglobals.expected +++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/various_ir_values_dbgrecords.ll.funcsig.transitiveglobals.expected @@ -238,7 +238,7 @@ attributes #2 = { nounwind } !62 = !DILocation(line: 11, column: 1, scope: !41) ;. ; CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C99, file: [[META1:![0-9]+]], producer: "{{.*}}clang version {{.*}}", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: [[META2:![0-9]+]], splitDebugInlining: false, nameTableKind: None) -; CHECK: [[META1]] = !DIFile(filename: "various_ir_values.c", directory: {{.*}}) +; CHECK: [[META1]] = !DIFile(filename: "{{.*}}various_ir_values.c", directory: {{.*}}) ; CHECK: [[META2]] = !{} ; CHECK: [[META7:![0-9]+]] = distinct !DISubprogram(name: "foo", scope: [[META1]], file: [[META1]], line: 1, type: [[META8:![0-9]+]], scopeLine: 1, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META12:![0-9]+]]) ; CHECK: [[META8]] = !DISubroutineType(types: [[META9:![0-9]+]]) diff --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/difile_absolute_filenames.test b/llvm/test/tools/UpdateTestChecks/update_test_checks/difile_absolute_filenames.test new file mode 100644 index 0000000..cea600d --- /dev/null +++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/difile_absolute_filenames.test @@ -0,0 +1,7 @@ +## Test that update_test_checks.py is not sensitive to absolute paths in +## DIFile's filename field. +# RUN: cp -f %S/Inputs/difile_absolute_filenames.ll %t.ll && %update_test_checks %t.ll --check-globals +# RUN: diff -u %t.ll %S/Inputs/difile_absolute_filenames.ll.expected +## Check that running the script again does not change the result: +# RUN: %update_test_checks %t.ll --check-globals +# RUN: diff -u %t.ll %S/Inputs/difile_absolute_filenames.ll.expected diff --git a/llvm/utils/UpdateTestChecks/common.py b/llvm/utils/UpdateTestChecks/common.py index 274614c..e747ae3 100644 --- a/llvm/utils/UpdateTestChecks/common.py +++ b/llvm/utils/UpdateTestChecks/common.py @@ -2358,7 +2358,7 @@ METADATA_FILTERS = [ r"(?<=\")(.+ )?(\w+ version )[\d.]+(?:[^\" ]*)(?: \([^)]+\))?", r"{{.*}}\2{{.*}}", ), # preface with glob also, to capture optional CLANG_VENDOR - (r'(!DIFile\(filename: ".+", directory: )".+"', r"\1{{.*}}"), + (r'(!DIFile\(filename: ")(.+/)?([^/]+", directory: )".+"', r"\1{{.*}}\3{{.*}}"), ] METADATA_FILTERS_RE = [(re.compile(f), r) for (f, r) in METADATA_FILTERS] |