https://github.com/vitalybuka updated 
https://github.com/llvm/llvm-project/pull/171929

>From afc9f9ada28fba44343ea3992bbfc4215ba51388 Mon Sep 17 00:00:00 2001
From: Vitaly Buka <[email protected]>
Date: Thu, 11 Dec 2025 15:43:54 -0800
Subject: [PATCH 1/2] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?=
 =?UTF-8?q?itial=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Created using spr 1.3.7
---
 clang/lib/CodeGen/CGDebugInfo.cpp             |  27 ++-
 clang/lib/CodeGen/CGDebugInfo.h               |   7 +-
 .../Generic/bounds-checking-debuginfo.c       |  58 +++---
 .../Generic/cfi-check-fail-debuginfo.c        |  57 +++---
 .../Generic/cfi-icall-generalize-debuginfo.c  | 174 ++++++++---------
 .../Generic/cfi-icall-normalize2-debuginfo.c  | 177 +++++++++---------
 .../Generic/ubsan-function-debuginfo.c        |  99 +++++-----
 .../Generic/unsigned-promotion-debuginfo.c    |  37 ++--
 8 files changed, 329 insertions(+), 307 deletions(-)

diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp 
b/clang/lib/CodeGen/CGDebugInfo.cpp
index 5a83c151901f9..f4f0424d319d0 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -3930,12 +3930,19 @@ llvm::DIMacroFile 
*CGDebugInfo::CreateTempMacroFile(llvm::DIMacroFile *Parent,
   return DBuilder.createTempMacroFile(Parent, Line, FName);
 }
 
-llvm::DILocation *CGDebugInfo::CreateSyntheticInlineAt(llvm::DebugLoc Location,
-                                                       StringRef FuncName) {
-  llvm::DISubprogram *SP =
-      createInlinedSubprogram(FuncName, Location->getFile());
+llvm::DILocation *
+CGDebugInfo::CreateSyntheticInlineAt(llvm::DebugLoc ParentLocation,
+                                     llvm::DISubprogram *SynthSP) {
   return llvm::DILocation::get(CGM.getLLVMContext(), /*Line=*/0, /*Column=*/0,
-                               /*Scope=*/SP, /*InlinedAt=*/Location);
+                               SynthSP, ParentLocation);
+}
+
+llvm::DILocation *
+CGDebugInfo::CreateSyntheticInlineAt(llvm::DebugLoc ParentLocation,
+                                     StringRef SynthFuncName,
+                                     llvm::DIFile *SynthFile) {
+  llvm::DISubprogram *SP = createInlinedSubprogram(SynthFuncName, SynthFile);
+  return CreateSyntheticInlineAt(ParentLocation, SP);
 }
 
 llvm::DILocation *CGDebugInfo::CreateTrapFailureMessageFor(
@@ -3949,7 +3956,8 @@ llvm::DILocation 
*CGDebugInfo::CreateTrapFailureMessageFor(
   FuncName += "$";
   FuncName += FailureMsg;
 
-  return CreateSyntheticInlineAt(TrapLocation, FuncName);
+  return CreateSyntheticInlineAt(TrapLocation, FuncName,
+                                 TrapLocation->getFile());
 }
 
 static QualType UnwrapTypeForDebugInfo(QualType T, const ASTContext &C) {
@@ -6642,8 +6650,11 @@ llvm::DILocation 
*CodeGenFunction::SanitizerAnnotateDebugInfo(
   else
     Label = SanitizerHandlerToCheckLabel(Handler);
 
-  if (any_of(Ordinals, [&](auto Ord) { return AnnotateDebugInfo.has(Ord); }))
-    return DI->CreateSyntheticInlineAt(CheckDebugLoc, Label);
+  if (any_of(Ordinals, [&](auto Ord) { return AnnotateDebugInfo.has(Ord); })) {
+    llvm::DIFile *File = llvm::DIFile::get(CGM.getLLVMContext(),
+                                           "ubsan_interface.h", "sanitizer");
+    return DI->CreateSyntheticInlineAt(CheckDebugLoc, Label, File);
+  }
 
   return CheckDebugLoc;
 }
diff --git a/clang/lib/CodeGen/CGDebugInfo.h b/clang/lib/CodeGen/CGDebugInfo.h
index 2378bdd780b3b..63d544ef6ef8d 100644
--- a/clang/lib/CodeGen/CGDebugInfo.h
+++ b/clang/lib/CodeGen/CGDebugInfo.h
@@ -659,8 +659,11 @@ class CGDebugInfo {
   ///
   /// This is used to indiciate instructions that come from compiler
   /// instrumentation.
-  llvm::DILocation *CreateSyntheticInlineAt(llvm::DebugLoc Location,
-                                            StringRef FuncName);
+  llvm::DILocation *CreateSyntheticInlineAt(llvm::DebugLoc ParentLocation,
+                                            llvm::DISubprogram *SynthSP);
+  llvm::DILocation *CreateSyntheticInlineAt(llvm::DebugLoc ParentLocation,
+                                            StringRef SynthFuncName,
+                                            llvm::DIFile *SynthFile);
 
   /// Reset internal state.
   void completeFunction();
diff --git a/clang/test/DebugInfo/Generic/bounds-checking-debuginfo.c 
b/clang/test/DebugInfo/Generic/bounds-checking-debuginfo.c
index f81ee6b4de6a2..d75512e070d72 100644
--- a/clang/test/DebugInfo/Generic/bounds-checking-debuginfo.c
+++ b/clang/test/DebugInfo/Generic/bounds-checking-debuginfo.c
@@ -23,15 +23,15 @@ void d(double*);
 // CHECK-TRAP-NEXT:    [[CALL:%.*]] = call i32 (...) @f(), !dbg 
[[DBG22:![0-9]+]]
 // CHECK-TRAP-NEXT:    [[TMP0:%.*]] = sext i32 [[CALL]] to i64, !dbg 
[[DBG23:![0-9]+]], !nosanitize [[META10:![0-9]+]]
 // CHECK-TRAP-NEXT:    [[TMP1:%.*]] = icmp ult i64 [[TMP0]], 10, !dbg 
[[DBG23]], !nosanitize [[META10]]
-// CHECK-TRAP-NEXT:    br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], 
!dbg [[DBG23]], !prof [[PROF27:![0-9]+]], !nosanitize [[META10]]
+// CHECK-TRAP-NEXT:    br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], 
!dbg [[DBG23]], !prof [[PROF28:![0-9]+]], !nosanitize [[META10]]
 // CHECK-TRAP:       [[TRAP]]:
-// CHECK-TRAP-NEXT:    call void @llvm.ubsantrap(i8 18) #[[ATTR3:[0-9]+]], 
!dbg [[DBG28:![0-9]+]], !nosanitize [[META10]]
-// CHECK-TRAP-NEXT:    unreachable, !dbg [[DBG28]], !nosanitize [[META10]]
+// CHECK-TRAP-NEXT:    call void @llvm.ubsantrap(i8 18) #[[ATTR3:[0-9]+]], 
!dbg [[DBG29:![0-9]+]], !nosanitize [[META10]]
+// CHECK-TRAP-NEXT:    unreachable, !dbg [[DBG29]], !nosanitize [[META10]]
 // CHECK-TRAP:       [[CONT]]:
-// CHECK-TRAP-NEXT:    [[IDXPROM:%.*]] = sext i32 [[CALL]] to i64, !dbg 
[[DBG26:![0-9]+]]
-// CHECK-TRAP-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [10 x 
double], ptr [[A]], i64 0, i64 [[IDXPROM]], !dbg [[DBG26]]
-// CHECK-TRAP-NEXT:    [[TMP2:%.*]] = load double, ptr [[ARRAYIDX]], align 8, 
!dbg [[DBG26]]
-// CHECK-TRAP-NEXT:    ret double [[TMP2]], !dbg [[DBG30:![0-9]+]]
+// CHECK-TRAP-NEXT:    [[IDXPROM:%.*]] = sext i32 [[CALL]] to i64, !dbg 
[[DBG27:![0-9]+]]
+// CHECK-TRAP-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [10 x 
double], ptr [[A]], i64 0, i64 [[IDXPROM]], !dbg [[DBG27]]
+// CHECK-TRAP-NEXT:    [[TMP2:%.*]] = load double, ptr [[ARRAYIDX]], align 8, 
!dbg [[DBG27]]
+// CHECK-TRAP-NEXT:    ret double [[TMP2]], !dbg [[DBG31:![0-9]+]]
 //
 // CHECK-NOTRAP-LABEL: define dso_local double @f1(
 // CHECK-NOTRAP-SAME: i32 noundef [[B:%.*]], i32 noundef [[I:%.*]]) 
#[[ATTR0:[0-9]+]] !dbg [[DBG4:![0-9]+]] {
@@ -49,15 +49,15 @@ void d(double*);
 // CHECK-NOTRAP-NEXT:    [[CALL:%.*]] = call i32 (...) @f(), !dbg 
[[DBG22:![0-9]+]]
 // CHECK-NOTRAP-NEXT:    [[TMP0:%.*]] = sext i32 [[CALL]] to i64, !dbg 
[[DBG23:![0-9]+]], !nosanitize [[META10:![0-9]+]]
 // CHECK-NOTRAP-NEXT:    [[TMP1:%.*]] = icmp ult i64 [[TMP0]], 10, !dbg 
[[DBG23]], !nosanitize [[META10]]
-// CHECK-NOTRAP-NEXT:    br i1 [[TMP1]], label %[[CONT:.*]], label 
%[[HANDLER_OUT_OF_BOUNDS:.*]], !dbg [[DBG23]], !prof [[PROF27:![0-9]+]], 
!nosanitize [[META10]]
+// CHECK-NOTRAP-NEXT:    br i1 [[TMP1]], label %[[CONT:.*]], label 
%[[HANDLER_OUT_OF_BOUNDS:.*]], !dbg [[DBG23]], !prof [[PROF28:![0-9]+]], 
!nosanitize [[META10]]
 // CHECK-NOTRAP:       [[HANDLER_OUT_OF_BOUNDS]]:
 // CHECK-NOTRAP-NEXT:    call void @__ubsan_handle_out_of_bounds_abort(ptr 
@[[GLOB2:[0-9]+]], i64 [[TMP0]]) #[[ATTR3:[0-9]+]], !dbg [[DBG23]], !nosanitize 
[[META10]]
 // CHECK-NOTRAP-NEXT:    unreachable, !dbg [[DBG23]], !nosanitize [[META10]]
 // CHECK-NOTRAP:       [[CONT]]:
-// CHECK-NOTRAP-NEXT:    [[IDXPROM:%.*]] = sext i32 [[CALL]] to i64, !dbg 
[[DBG26:![0-9]+]]
-// CHECK-NOTRAP-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [10 x 
double], ptr [[A]], i64 0, i64 [[IDXPROM]], !dbg [[DBG26]]
-// CHECK-NOTRAP-NEXT:    [[TMP2:%.*]] = load double, ptr [[ARRAYIDX]], align 
8, !dbg [[DBG26]]
-// CHECK-NOTRAP-NEXT:    ret double [[TMP2]], !dbg [[DBG28:![0-9]+]]
+// CHECK-NOTRAP-NEXT:    [[IDXPROM:%.*]] = sext i32 [[CALL]] to i64, !dbg 
[[DBG27:![0-9]+]]
+// CHECK-NOTRAP-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [10 x 
double], ptr [[A]], i64 0, i64 [[IDXPROM]], !dbg [[DBG27]]
+// CHECK-NOTRAP-NEXT:    [[TMP2:%.*]] = load double, ptr [[ARRAYIDX]], align 
8, !dbg [[DBG27]]
+// CHECK-NOTRAP-NEXT:    ret double [[TMP2]], !dbg [[DBG29:![0-9]+]]
 //
 double f1(int b, int i) {
   double a[10];
@@ -69,7 +69,7 @@ double f1(int b, int i) {
 // CHECK-TRAP: [[META0:![0-9]+]] = distinct !DICompileUnit(language: 
DW_LANG_C11, file: [[META1:![0-9]+]], isOptimized: false, runtimeVersion: 0, 
emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
 // CHECK-TRAP: [[META1]] = !DIFile(filename: "{{.*}}<stdin>", directory: 
{{.*}})
 // CHECK-TRAP: [[DBG4]] = distinct !DISubprogram(name: "f1", scope: 
[[META5:![0-9]+]], file: [[META5]], line: 62, type: [[META6:![0-9]+]], 
scopeLine: 62, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: 
[[META0]], retainedNodes: [[META10]])
-// CHECK-TRAP: [[META5]] = !DIFile(filename: 
"{{.*}}bounds-checking-debuginfo.c", directory: {{.*}})
+// CHECK-TRAP: [[META5]] = !DIFile(filename: "bounds-checking-debuginfo.c", 
directory: "")
 // CHECK-TRAP: [[META6]] = !DISubroutineType(types: [[META7:![0-9]+]])
 // CHECK-TRAP: [[META7]] = !{[[META8:![0-9]+]], [[META9:![0-9]+]], [[META9]]}
 // CHECK-TRAP: [[META8]] = !DIBasicType(name: "double", size: 64, encoding: 
DW_ATE_float)
@@ -87,19 +87,20 @@ double f1(int b, int i) {
 // CHECK-TRAP: [[DBG20]] = !DILocation(line: 64, column: 5, scope: [[DBG4]])
 // CHECK-TRAP: [[DBG21]] = !DILocation(line: 64, column: 3, scope: [[DBG4]])
 // CHECK-TRAP: [[DBG22]] = !DILocation(line: 65, column: 12, scope: [[DBG4]])
-// CHECK-TRAP: [[DBG23]] = !DILocation(line: 0, scope: [[META24:![0-9]+]], 
inlinedAt: [[DBG26]])
-// CHECK-TRAP: [[META24]] = distinct !DISubprogram(name: 
"__ubsan_check_array_bounds", scope: [[META5]], file: [[META5]], type: 
[[META25:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: 
[[META0]])
-// CHECK-TRAP: [[META25]] = !DISubroutineType(types: null)
-// CHECK-TRAP: [[DBG26]] = !DILocation(line: 65, column: 10, scope: [[DBG4]])
-// CHECK-TRAP: [[PROF27]] = !{!"branch_weights", i32 1048575, i32 1}
-// CHECK-TRAP: [[DBG28]] = !DILocation(line: 0, scope: [[META29:![0-9]+]], 
inlinedAt: [[DBG23]])
-// CHECK-TRAP: [[META29]] = distinct !DISubprogram(name: 
"__clang_trap_msg$Undefined Behavior Sanitizer$Array index out of bounds", 
scope: [[META5]], file: [[META5]], type: [[META25]], flags: DIFlagArtificial, 
spFlags: DISPFlagDefinition, unit: [[META0]])
-// CHECK-TRAP: [[DBG30]] = !DILocation(line: 65, column: 3, scope: [[DBG4]])
+// CHECK-TRAP: [[DBG23]] = !DILocation(line: 0, scope: [[META24:![0-9]+]], 
inlinedAt: [[DBG27]])
+// CHECK-TRAP: [[META24]] = distinct !DISubprogram(name: 
"__ubsan_check_array_bounds", scope: [[META25:![0-9]+]], file: [[META25]], 
type: [[META26:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, 
unit: [[META0]])
+// CHECK-TRAP: [[META25]] = !DIFile(filename: "{{.*}}ubsan_interface.h", 
directory: {{.*}})
+// CHECK-TRAP: [[META26]] = !DISubroutineType(types: null)
+// CHECK-TRAP: [[DBG27]] = !DILocation(line: 65, column: 10, scope: [[DBG4]])
+// CHECK-TRAP: [[PROF28]] = !{!"branch_weights", i32 1048575, i32 1}
+// CHECK-TRAP: [[DBG29]] = !DILocation(line: 0, scope: [[META30:![0-9]+]], 
inlinedAt: [[DBG23]])
+// CHECK-TRAP: [[META30]] = distinct !DISubprogram(name: 
"__clang_trap_msg$Undefined Behavior Sanitizer$Array index out of bounds", 
scope: [[META25]], file: [[META25]], type: [[META26]], flags: DIFlagArtificial, 
spFlags: DISPFlagDefinition, unit: [[META0]])
+// CHECK-TRAP: [[DBG31]] = !DILocation(line: 65, column: 3, scope: [[DBG4]])
 //.
 // CHECK-NOTRAP: [[META0:![0-9]+]] = distinct !DICompileUnit(language: 
DW_LANG_C11, file: [[META1:![0-9]+]], isOptimized: false, runtimeVersion: 0, 
emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
 // CHECK-NOTRAP: [[META1]] = !DIFile(filename: "{{.*}}<stdin>", directory: 
{{.*}})
 // CHECK-NOTRAP: [[DBG4]] = distinct !DISubprogram(name: "f1", scope: 
[[META5:![0-9]+]], file: [[META5]], line: 62, type: [[META6:![0-9]+]], 
scopeLine: 62, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: 
[[META0]], retainedNodes: [[META10]])
-// CHECK-NOTRAP: [[META5]] = !DIFile(filename: 
"{{.*}}bounds-checking-debuginfo.c", directory: {{.*}})
+// CHECK-NOTRAP: [[META5]] = !DIFile(filename: "bounds-checking-debuginfo.c", 
directory: "")
 // CHECK-NOTRAP: [[META6]] = !DISubroutineType(types: [[META7:![0-9]+]])
 // CHECK-NOTRAP: [[META7]] = !{[[META8:![0-9]+]], [[META9:![0-9]+]], [[META9]]}
 // CHECK-NOTRAP: [[META8]] = !DIBasicType(name: "double", size: 64, encoding: 
DW_ATE_float)
@@ -117,10 +118,11 @@ double f1(int b, int i) {
 // CHECK-NOTRAP: [[DBG20]] = !DILocation(line: 64, column: 5, scope: [[DBG4]])
 // CHECK-NOTRAP: [[DBG21]] = !DILocation(line: 64, column: 3, scope: [[DBG4]])
 // CHECK-NOTRAP: [[DBG22]] = !DILocation(line: 65, column: 12, scope: [[DBG4]])
-// CHECK-NOTRAP: [[DBG23]] = !DILocation(line: 0, scope: [[META24:![0-9]+]], 
inlinedAt: [[DBG26]])
-// CHECK-NOTRAP: [[META24]] = distinct !DISubprogram(name: 
"__ubsan_check_array_bounds", scope: [[META5]], file: [[META5]], type: 
[[META25:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: 
[[META0]])
-// CHECK-NOTRAP: [[META25]] = !DISubroutineType(types: null)
-// CHECK-NOTRAP: [[DBG26]] = !DILocation(line: 65, column: 10, scope: [[DBG4]])
-// CHECK-NOTRAP: [[PROF27]] = !{!"branch_weights", i32 1048575, i32 1}
-// CHECK-NOTRAP: [[DBG28]] = !DILocation(line: 65, column: 3, scope: [[DBG4]])
+// CHECK-NOTRAP: [[DBG23]] = !DILocation(line: 0, scope: [[META24:![0-9]+]], 
inlinedAt: [[DBG27]])
+// CHECK-NOTRAP: [[META24]] = distinct !DISubprogram(name: 
"__ubsan_check_array_bounds", scope: [[META25:![0-9]+]], file: [[META25]], 
type: [[META26:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, 
unit: [[META0]])
+// CHECK-NOTRAP: [[META25]] = !DIFile(filename: "{{.*}}ubsan_interface.h", 
directory: {{.*}})
+// CHECK-NOTRAP: [[META26]] = !DISubroutineType(types: null)
+// CHECK-NOTRAP: [[DBG27]] = !DILocation(line: 65, column: 10, scope: [[DBG4]])
+// CHECK-NOTRAP: [[PROF28]] = !{!"branch_weights", i32 1048575, i32 1}
+// CHECK-NOTRAP: [[DBG29]] = !DILocation(line: 65, column: 3, scope: [[DBG4]])
 //.
diff --git a/clang/test/DebugInfo/Generic/cfi-check-fail-debuginfo.c 
b/clang/test/DebugInfo/Generic/cfi-check-fail-debuginfo.c
index 74ed5564ec704..13f1bf0ef2e70 100644
--- a/clang/test/DebugInfo/Generic/cfi-check-fail-debuginfo.c
+++ b/clang/test/DebugInfo/Generic/cfi-check-fail-debuginfo.c
@@ -7,17 +7,17 @@
 // RUN:     -emit-llvm -o - %s | FileCheck %s
 
 // CHECK-LABEL: define dso_local void @caller(
-// CHECK-SAME: ptr noundef [[F:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] 
!dbg [[DBG7:![0-9]+]] !type [[META16:![0-9]+]] !type [[META17:![0-9]+]] !type 
[[META18:![0-9]+]] {
+// CHECK-SAME: ptr noundef [[F:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] 
!dbg [[DBG11:![0-9]+]] !type [[META20:![0-9]+]] !type [[META21:![0-9]+]] !type 
[[META22:![0-9]+]] {
 // CHECK-NEXT:  [[ENTRY:.*:]]
-// CHECK-NEXT:      #dbg_value(ptr [[F]], [[META15:![0-9]+]], !DIExpression(), 
[[META19:![0-9]+]])
-// CHECK-NEXT:    [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr [[F]], 
metadata !"_ZTSFvvE"), !dbg [[DBG20:![0-9]+]], !nosanitize [[META24:![0-9]+]]
-// CHECK-NEXT:    br i1 [[TMP0]], label %[[CFI_CONT:.*]], label 
%[[CFI_SLOWPATH:.*]], !dbg [[DBG20]], !prof [[PROF25:![0-9]+]], !nosanitize 
[[META24]]
+// CHECK-NEXT:      #dbg_value(ptr [[F]], [[META19:![0-9]+]], !DIExpression(), 
[[META23:![0-9]+]])
+// CHECK-NEXT:    [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr [[F]], 
metadata !"_ZTSFvvE"), !dbg [[DBG24:![0-9]+]], !nosanitize [[META29:![0-9]+]]
+// CHECK-NEXT:    br i1 [[TMP0]], label %[[CFI_CONT:.*]], label 
%[[CFI_SLOWPATH:.*]], !dbg [[DBG24]], !prof [[PROF30:![0-9]+]], !nosanitize 
[[META29]]
 // CHECK:       [[CFI_SLOWPATH]]:
-// CHECK-NEXT:    tail call void @__cfi_slowpath(i64 9080559750644022485, ptr 
[[F]]) #[[ATTR6:[0-9]+]], !dbg [[DBG20]], !nosanitize [[META24]]
-// CHECK-NEXT:    br label %[[CFI_CONT]], !dbg [[DBG20]], !nosanitize 
[[META24]]
+// CHECK-NEXT:    tail call void @__cfi_slowpath(i64 9080559750644022485, ptr 
[[F]]) #[[ATTR6:[0-9]+]], !dbg [[DBG24]], !nosanitize [[META29]]
+// CHECK-NEXT:    br label %[[CFI_CONT]], !dbg [[DBG24]], !nosanitize 
[[META29]]
 // CHECK:       [[CFI_CONT]]:
-// CHECK-NEXT:    tail call void [[F]]() #[[ATTR6]], !dbg [[DBG23:![0-9]+]]
-// CHECK-NEXT:    ret void, !dbg [[DBG26:![0-9]+]]
+// CHECK-NEXT:    tail call void [[F]]() #[[ATTR6]], !dbg [[DBG28:![0-9]+]]
+// CHECK-NEXT:    ret void, !dbg [[DBG31:![0-9]+]]
 //
 void caller(void (*f)(void)) {
   f();
@@ -25,24 +25,25 @@ void caller(void (*f)(void)) {
 //.
 // CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C11, 
file: [[META1:![0-9]+]], isOptimized: true, runtimeVersion: 0, emissionKind: 
FullDebug, splitDebugInlining: false, nameTableKind: None)
 // CHECK: [[META1]] = !DIFile(filename: "{{.*}}<stdin>", directory: {{.*}})
-// CHECK: [[DBG7]] = distinct !DISubprogram(name: "caller", scope: 
[[META8:![0-9]+]], file: [[META8]], line: 22, type: [[META9:![0-9]+]], 
scopeLine: 22, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | 
DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META14:![0-9]+]])
-// CHECK: [[META8]] = !DIFile(filename: "{{.*}}cfi-check-fail-debuginfo.c", 
directory: {{.*}})
-// CHECK: [[META9]] = !DISubroutineType(types: [[META10:![0-9]+]])
-// CHECK: [[META10]] = !{null, [[META11:![0-9]+]]}
-// CHECK: [[META11]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: 
[[META12:![0-9]+]], size: 64)
-// CHECK: [[META12]] = !DISubroutineType(types: [[META13:![0-9]+]])
-// CHECK: [[META13]] = !{null}
-// CHECK: [[META14]] = !{[[META15]]}
-// CHECK: [[META15]] = !DILocalVariable(name: "f", arg: 1, scope: [[DBG7]], 
file: [[META8]], line: 22, type: [[META11]])
-// CHECK: [[META16]] = !{i64 0, !"_ZTSFvPFvvEE"}
-// CHECK: [[META17]] = !{i64 0, !"_ZTSFvPvE.generalized"}
-// CHECK: [[META18]] = !{i64 0, i64 2451761621477796417}
-// CHECK: [[META19]] = !DILocation(line: 0, scope: [[DBG7]])
-// CHECK: [[DBG20]] = !DILocation(line: 0, scope: [[META21:![0-9]+]], 
inlinedAt: [[DBG23]])
-// CHECK: [[META21]] = distinct !DISubprogram(name: "__ubsan_check_cfi_icall", 
scope: [[META8]], file: [[META8]], type: [[META22:![0-9]+]], flags: 
DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]])
-// CHECK: [[META22]] = !DISubroutineType(types: null)
-// CHECK: [[DBG23]] = !DILocation(line: 23, column: 3, scope: [[DBG7]])
-// CHECK: [[META24]] = !{}
-// CHECK: [[PROF25]] = !{!"branch_weights", i32 1048575, i32 1}
-// CHECK: [[DBG26]] = !DILocation(line: 24, column: 1, scope: [[DBG7]])
+// CHECK: [[DBG11]] = distinct !DISubprogram(name: "caller", scope: 
[[META12:![0-9]+]], file: [[META12]], line: 22, type: [[META13:![0-9]+]], 
scopeLine: 22, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | 
DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META18:![0-9]+]])
+// CHECK: [[META12]] = !DIFile(filename: "cfi-check-fail-debuginfo.c", 
directory: "")
+// CHECK: [[META13]] = !DISubroutineType(types: [[META14:![0-9]+]])
+// CHECK: [[META14]] = !{null, [[META15:![0-9]+]]}
+// CHECK: [[META15]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: 
[[META16:![0-9]+]], size: 64)
+// CHECK: [[META16]] = !DISubroutineType(types: [[META17:![0-9]+]])
+// CHECK: [[META17]] = !{null}
+// CHECK: [[META18]] = !{[[META19]]}
+// CHECK: [[META19]] = !DILocalVariable(name: "f", arg: 1, scope: [[DBG11]], 
file: [[META12]], line: 22, type: [[META15]])
+// CHECK: [[META20]] = !{i64 0, !"_ZTSFvPFvvEE"}
+// CHECK: [[META21]] = !{i64 0, !"_ZTSFvPvE.generalized"}
+// CHECK: [[META22]] = !{i64 0, i64 2451761621477796417}
+// CHECK: [[META23]] = !DILocation(line: 0, scope: [[DBG11]])
+// CHECK: [[DBG24]] = !DILocation(line: 0, scope: [[META25:![0-9]+]], 
inlinedAt: [[DBG28]])
+// CHECK: [[META25]] = distinct !DISubprogram(name: "__ubsan_check_cfi_icall", 
scope: [[META26:![0-9]+]], file: [[META26]], type: [[META27:![0-9]+]], flags: 
DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]])
+// CHECK: [[META26]] = !DIFile(filename: "{{.*}}ubsan_interface.h", directory: 
{{.*}})
+// CHECK: [[META27]] = !DISubroutineType(types: null)
+// CHECK: [[DBG28]] = !DILocation(line: 23, column: 3, scope: [[DBG11]])
+// CHECK: [[META29]] = !{}
+// CHECK: [[PROF30]] = !{!"branch_weights", i32 1048575, i32 1}
+// CHECK: [[DBG31]] = !DILocation(line: 24, column: 1, scope: [[DBG11]])
 //.
diff --git a/clang/test/DebugInfo/Generic/cfi-icall-generalize-debuginfo.c 
b/clang/test/DebugInfo/Generic/cfi-icall-generalize-debuginfo.c
index 0ffc2b9e415d4..e5e86c469955e 100644
--- a/clang/test/DebugInfo/Generic/cfi-icall-generalize-debuginfo.c
+++ b/clang/test/DebugInfo/Generic/cfi-icall-generalize-debuginfo.c
@@ -13,41 +13,41 @@
 // generalized to ptr
 
 // CHECK-LABEL: define dso_local noalias noundef ptr @f(
-// CHECK-SAME: ptr noundef readnone captures(none) [[A:%.*]], ptr noundef 
readnone captures(none) [[B:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] !dbg 
[[DBG10:![0-9]+]] !type [[META21:![0-9]+]] !type [[META22:![0-9]+]] {
+// CHECK-SAME: ptr noundef readnone captures(none) [[A:%.*]], ptr noundef 
readnone captures(none) [[B:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] !dbg 
[[DBG14:![0-9]+]] !type [[META25:![0-9]+]] !type [[META26:![0-9]+]] {
 // CHECK-NEXT:  [[ENTRY:.*:]]
-// CHECK-NEXT:      #dbg_value(ptr [[A]], [[META19:![0-9]+]], !DIExpression(), 
[[META23:![0-9]+]])
-// CHECK-NEXT:      #dbg_value(ptr [[B]], [[META20:![0-9]+]], !DIExpression(), 
[[META23]])
-// CHECK-NEXT:    ret ptr null, !dbg [[DBG24:![0-9]+]]
+// CHECK-NEXT:      #dbg_value(ptr [[A]], [[META23:![0-9]+]], !DIExpression(), 
[[META27:![0-9]+]])
+// CHECK-NEXT:      #dbg_value(ptr [[B]], [[META24:![0-9]+]], !DIExpression(), 
[[META27]])
+// CHECK-NEXT:    ret ptr null, !dbg [[DBG28:![0-9]+]]
 //
 int** f(const char *a, const char **b) {
   return (int**)0;
 }
 
 // UNGENERALIZED-LABEL: define dso_local void @g(
-// UNGENERALIZED-SAME: ptr noundef [[FP:%.*]]) local_unnamed_addr 
#[[ATTR1:[0-9]+]] !dbg [[DBG25:![0-9]+]] !type [[META31:![0-9]+]] !type 
[[META32:![0-9]+]] {
+// UNGENERALIZED-SAME: ptr noundef [[FP:%.*]]) local_unnamed_addr 
#[[ATTR1:[0-9]+]] !dbg [[DBG29:![0-9]+]] !type [[META35:![0-9]+]] !type 
[[META36:![0-9]+]] {
 // UNGENERALIZED-NEXT:  [[ENTRY:.*:]]
-// UNGENERALIZED-NEXT:      #dbg_value(ptr [[FP]], [[META30:![0-9]+]], 
!DIExpression(), [[META33:![0-9]+]])
-// UNGENERALIZED-NEXT:    [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr 
[[FP]], metadata !"_ZTSFPPiPKcPS2_E"), !dbg [[DBG34:![0-9]+]], !nosanitize 
[[META38:![0-9]+]]
-// UNGENERALIZED-NEXT:    br i1 [[TMP0]], label %[[CONT:.*]], label 
%[[TRAP:.*]], !dbg [[DBG34]], !prof [[PROF39:![0-9]+]], !nosanitize [[META38]]
+// UNGENERALIZED-NEXT:      #dbg_value(ptr [[FP]], [[META34:![0-9]+]], 
!DIExpression(), [[META37:![0-9]+]])
+// UNGENERALIZED-NEXT:    [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr 
[[FP]], metadata !"_ZTSFPPiPKcPS2_E"), !dbg [[DBG38:![0-9]+]], !nosanitize 
[[META43:![0-9]+]]
+// UNGENERALIZED-NEXT:    br i1 [[TMP0]], label %[[CONT:.*]], label 
%[[TRAP:.*]], !dbg [[DBG38]], !prof [[PROF44:![0-9]+]], !nosanitize [[META43]]
 // UNGENERALIZED:       [[TRAP]]:
-// UNGENERALIZED-NEXT:    tail call void @llvm.ubsantrap(i8 2) 
#[[ATTR4:[0-9]+]], !dbg [[DBGTRAP:![0-9]+]], !nosanitize [[META38]]
-// UNGENERALIZED-NEXT:    unreachable, !dbg [[DBGTRAP]], !nosanitize [[META38]]
+// UNGENERALIZED-NEXT:    tail call void @llvm.ubsantrap(i8 2) 
#[[ATTR4:[0-9]+]], !dbg [[DBG45:![0-9]+]], !nosanitize [[META43]]
+// UNGENERALIZED-NEXT:    unreachable, !dbg [[DBG45]], !nosanitize [[META43]]
 // UNGENERALIZED:       [[CONT]]:
-// UNGENERALIZED-NEXT:    [[CALL:%.*]] = tail call ptr [[FP]](ptr noundef 
null, ptr noundef null) #[[ATTR5:[0-9]+]], !dbg [[DBG37:![0-9]+]]
-// UNGENERALIZED-NEXT:    ret void, !dbg [[DBG42:![0-9]+]]
+// UNGENERALIZED-NEXT:    [[CALL:%.*]] = tail call ptr [[FP]](ptr noundef 
null, ptr noundef null) #[[ATTR5:[0-9]+]], !dbg [[DBG42:![0-9]+]]
+// UNGENERALIZED-NEXT:    ret void, !dbg [[DBG47:![0-9]+]]
 //
 // GENERALIZED-LABEL: define dso_local void @g(
-// GENERALIZED-SAME: ptr noundef [[FP:%.*]]) local_unnamed_addr 
#[[ATTR1:[0-9]+]] !dbg [[DBG25:![0-9]+]] !type [[META31:![0-9]+]] !type 
[[META32:![0-9]+]] {
+// GENERALIZED-SAME: ptr noundef [[FP:%.*]]) local_unnamed_addr 
#[[ATTR1:[0-9]+]] !dbg [[DBG29:![0-9]+]] !type [[META35:![0-9]+]] !type 
[[META36:![0-9]+]] {
 // GENERALIZED-NEXT:  [[ENTRY:.*:]]
-// GENERALIZED-NEXT:      #dbg_value(ptr [[FP]], [[META30:![0-9]+]], 
!DIExpression(), [[META33:![0-9]+]])
-// GENERALIZED-NEXT:    [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr 
[[FP]], metadata !"_ZTSFPvPKvS_E.generalized"), !dbg [[DBG34:![0-9]+]], 
!nosanitize [[META38:![0-9]+]]
-// GENERALIZED-NEXT:    br i1 [[TMP0]], label %[[CONT:.*]], label 
%[[TRAP:.*]], !dbg [[DBG34]], !prof [[PROF39:![0-9]+]], !nosanitize [[META38]]
+// GENERALIZED-NEXT:      #dbg_value(ptr [[FP]], [[META34:![0-9]+]], 
!DIExpression(), [[META37:![0-9]+]])
+// GENERALIZED-NEXT:    [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr 
[[FP]], metadata !"_ZTSFPvPKvS_E.generalized"), !dbg [[DBG38:![0-9]+]], 
!nosanitize [[META43:![0-9]+]]
+// GENERALIZED-NEXT:    br i1 [[TMP0]], label %[[CONT:.*]], label 
%[[TRAP:.*]], !dbg [[DBG38]], !prof [[PROF44:![0-9]+]], !nosanitize [[META43]]
 // GENERALIZED:       [[TRAP]]:
-// GENERALIZED-NEXT:    tail call void @llvm.ubsantrap(i8 2) 
#[[ATTR4:[0-9]+]], !dbg [[DBGTRAP:![0-9]+]], !nosanitize [[META38]]
-// GENERALIZED-NEXT:    unreachable, !dbg [[DBGTRAP]], !nosanitize [[META38]]
+// GENERALIZED-NEXT:    tail call void @llvm.ubsantrap(i8 2) 
#[[ATTR4:[0-9]+]], !dbg [[DBG45:![0-9]+]], !nosanitize [[META43]]
+// GENERALIZED-NEXT:    unreachable, !dbg [[DBG45]], !nosanitize [[META43]]
 // GENERALIZED:       [[CONT]]:
-// GENERALIZED-NEXT:    [[CALL:%.*]] = tail call ptr [[FP]](ptr noundef null, 
ptr noundef null) #[[ATTR5:[0-9]+]], !dbg [[DBG37:![0-9]+]]
-// GENERALIZED-NEXT:    ret void, !dbg [[DBG42:![0-9]+]]
+// GENERALIZED-NEXT:    [[CALL:%.*]] = tail call ptr [[FP]](ptr noundef null, 
ptr noundef null) #[[ATTR5:[0-9]+]], !dbg [[DBG42:![0-9]+]]
+// GENERALIZED-NEXT:    ret void, !dbg [[DBG47:![0-9]+]]
 //
 void g(int** (*fp)(const char *, const char **)) {
   fp(0, 0);
@@ -60,39 +60,40 @@ void g(int** (*fp)(const char *, const char **)) {
 // UNGENERALIZED: [[META3]] = !DIDerivedType(tag: DW_TAG_pointer_type, 
baseType: [[META4:![0-9]+]], size: 64)
 // UNGENERALIZED: [[META4]] = !DIDerivedType(tag: DW_TAG_pointer_type, 
baseType: [[META5:![0-9]+]], size: 64)
 // UNGENERALIZED: [[META5]] = !DIBasicType(name: "int", size: 32, encoding: 
DW_ATE_signed)
-// UNGENERALIZED: [[DBG10]] = distinct !DISubprogram(name: "f", scope: 
[[META11:![0-9]+]], file: [[META11]], line: 22, type: [[META12:![0-9]+]], 
scopeLine: 22, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | 
DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META18:![0-9]+]])
-// UNGENERALIZED: [[META11]] = !DIFile(filename: 
"{{.*}}cfi-icall-generalize-debuginfo.c", directory: {{.*}})
-// UNGENERALIZED: [[META12]] = !DISubroutineType(types: [[META13:![0-9]+]])
-// UNGENERALIZED: [[META13]] = !{[[META3]], [[META14:![0-9]+]], 
[[META17:![0-9]+]]}
-// UNGENERALIZED: [[META14]] = !DIDerivedType(tag: DW_TAG_pointer_type, 
baseType: [[META15:![0-9]+]], size: 64)
-// UNGENERALIZED: [[META15]] = !DIDerivedType(tag: DW_TAG_const_type, 
baseType: [[META16:![0-9]+]])
-// UNGENERALIZED: [[META16]] = !DIBasicType(name: "char", size: 8, encoding: 
DW_ATE_signed_char)
-// UNGENERALIZED: [[META17]] = !DIDerivedType(tag: DW_TAG_pointer_type, 
baseType: [[META14]], size: 64)
-// UNGENERALIZED: [[META18]] = !{[[META19]], [[META20]]}
-// UNGENERALIZED: [[META19]] = !DILocalVariable(name: "a", arg: 1, scope: 
[[DBG10]], file: [[META11]], line: 22, type: [[META14]])
-// UNGENERALIZED: [[META20]] = !DILocalVariable(name: "b", arg: 2, scope: 
[[DBG10]], file: [[META11]], line: 22, type: [[META17]])
-// UNGENERALIZED: [[META21]] = !{i64 0, !"_ZTSFPPiPKcPS2_E"}
-// UNGENERALIZED: [[META22]] = !{i64 0, !"_ZTSFPvPKvS_E.generalized"}
-// UNGENERALIZED: [[META23]] = !DILocation(line: 0, scope: [[DBG10]])
-// UNGENERALIZED: [[DBG24]] = !DILocation(line: 23, column: 3, scope: 
[[DBG10]])
-// UNGENERALIZED: [[DBG25]] = distinct !DISubprogram(name: "g", scope: 
[[META11]], file: [[META11]], line: 52, type: [[META26:![0-9]+]], scopeLine: 
52, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, 
unit: [[META0]], retainedNodes: [[META29:![0-9]+]])
-// UNGENERALIZED: [[META26]] = !DISubroutineType(types: [[META27:![0-9]+]])
-// UNGENERALIZED: [[META27]] = !{null, [[META28:![0-9]+]]}
-// UNGENERALIZED: [[META28]] = !DIDerivedType(tag: DW_TAG_pointer_type, 
baseType: [[META12]], size: 64)
-// UNGENERALIZED: [[META29]] = !{[[META30]]}
-// UNGENERALIZED: [[META30]] = !DILocalVariable(name: "fp", arg: 1, scope: 
[[DBG25]], file: [[META11]], line: 52, type: [[META28]])
-// UNGENERALIZED: [[META31]] = !{i64 0, !"_ZTSFvPFPPiPKcPS2_EE"}
-// UNGENERALIZED: [[META32]] = !{i64 0, !"_ZTSFvPvE.generalized"}
-// UNGENERALIZED: [[META33]] = !DILocation(line: 0, scope: [[DBG25]])
-// UNGENERALIZED: [[DBG34]] = !DILocation(line: 0, scope: [[META35:![0-9]+]], 
inlinedAt: [[DBG37]])
-// UNGENERALIZED: [[META35]] = distinct !DISubprogram(name: 
"__ubsan_check_cfi_icall", scope: [[META11]], file: [[META11]], type: 
[[META36:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: 
[[META0]])
-// UNGENERALIZED: [[META36]] = !DISubroutineType(types: null)
-// UNGENERALIZED: [[DBG37]] = !DILocation(line: 53, column: 3, scope: 
[[DBG25]])
-// UNGENERALIZED: [[META38]] = !{}
-// UNGENERALIZED: [[PROF39]] = !{!"branch_weights", i32 1048575, i32 1}
-// UNGENERALIZED: [[DBGTRAP]] = !DILocation(line: 0, scope: 
[[TRAPMSG:![0-9]+]], inlinedAt: [[DBG34]])
-// UNGENERALIZED: [[TRAPMSG]] = distinct !DISubprogram(name: 
"__clang_trap_msg$Undefined Behavior Sanitizer$Control flow integrity check 
failed", scope: [[META11]], file: [[META11]], type: [[META36]], flags: 
DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]])
-// UNGENERALIZED: [[DBG42]] = !DILocation(line: 54, column: 1, scope: 
[[DBG25]])
+// UNGENERALIZED: [[DBG14]] = distinct !DISubprogram(name: "f", scope: 
[[META15:![0-9]+]], file: [[META15]], line: 22, type: [[META16:![0-9]+]], 
scopeLine: 22, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | 
DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META22:![0-9]+]])
+// UNGENERALIZED: [[META15]] = !DIFile(filename: 
"cfi-icall-generalize-debuginfo.c", directory: "")
+// UNGENERALIZED: [[META16]] = !DISubroutineType(types: [[META17:![0-9]+]])
+// UNGENERALIZED: [[META17]] = !{[[META3]], [[META18:![0-9]+]], 
[[META21:![0-9]+]]}
+// UNGENERALIZED: [[META18]] = !DIDerivedType(tag: DW_TAG_pointer_type, 
baseType: [[META19:![0-9]+]], size: 64)
+// UNGENERALIZED: [[META19]] = !DIDerivedType(tag: DW_TAG_const_type, 
baseType: [[META20:![0-9]+]])
+// UNGENERALIZED: [[META20]] = !DIBasicType(name: "char", size: 8, encoding: 
DW_ATE_signed_char)
+// UNGENERALIZED: [[META21]] = !DIDerivedType(tag: DW_TAG_pointer_type, 
baseType: [[META18]], size: 64)
+// UNGENERALIZED: [[META22]] = !{[[META23]], [[META24]]}
+// UNGENERALIZED: [[META23]] = !DILocalVariable(name: "a", arg: 1, scope: 
[[DBG14]], file: [[META15]], line: 22, type: [[META18]])
+// UNGENERALIZED: [[META24]] = !DILocalVariable(name: "b", arg: 2, scope: 
[[DBG14]], file: [[META15]], line: 22, type: [[META21]])
+// UNGENERALIZED: [[META25]] = !{i64 0, !"_ZTSFPPiPKcPS2_E"}
+// UNGENERALIZED: [[META26]] = !{i64 0, !"_ZTSFPvPKvS_E.generalized"}
+// UNGENERALIZED: [[META27]] = !DILocation(line: 0, scope: [[DBG14]])
+// UNGENERALIZED: [[DBG28]] = !DILocation(line: 23, column: 3, scope: 
[[DBG14]])
+// UNGENERALIZED: [[DBG29]] = distinct !DISubprogram(name: "g", scope: 
[[META15]], file: [[META15]], line: 52, type: [[META30:![0-9]+]], scopeLine: 
52, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, 
unit: [[META0]], retainedNodes: [[META33:![0-9]+]])
+// UNGENERALIZED: [[META30]] = !DISubroutineType(types: [[META31:![0-9]+]])
+// UNGENERALIZED: [[META31]] = !{null, [[META32:![0-9]+]]}
+// UNGENERALIZED: [[META32]] = !DIDerivedType(tag: DW_TAG_pointer_type, 
baseType: [[META16]], size: 64)
+// UNGENERALIZED: [[META33]] = !{[[META34]]}
+// UNGENERALIZED: [[META34]] = !DILocalVariable(name: "fp", arg: 1, scope: 
[[DBG29]], file: [[META15]], line: 52, type: [[META32]])
+// UNGENERALIZED: [[META35]] = !{i64 0, !"_ZTSFvPFPPiPKcPS2_EE"}
+// UNGENERALIZED: [[META36]] = !{i64 0, !"_ZTSFvPvE.generalized"}
+// UNGENERALIZED: [[META37]] = !DILocation(line: 0, scope: [[DBG29]])
+// UNGENERALIZED: [[DBG38]] = !DILocation(line: 0, scope: [[META39:![0-9]+]], 
inlinedAt: [[DBG42]])
+// UNGENERALIZED: [[META39]] = distinct !DISubprogram(name: 
"__ubsan_check_cfi_icall", scope: [[META40:![0-9]+]], file: [[META40]], type: 
[[META41:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: 
[[META0]])
+// UNGENERALIZED: [[META40]] = !DIFile(filename: "{{.*}}ubsan_interface.h", 
directory: {{.*}})
+// UNGENERALIZED: [[META41]] = !DISubroutineType(types: null)
+// UNGENERALIZED: [[DBG42]] = !DILocation(line: 53, column: 3, scope: 
[[DBG29]])
+// UNGENERALIZED: [[META43]] = !{}
+// UNGENERALIZED: [[PROF44]] = !{!"branch_weights", i32 1048575, i32 1}
+// UNGENERALIZED: [[DBG45]] = !DILocation(line: 0, scope: [[META46:![0-9]+]], 
inlinedAt: [[DBG38]])
+// UNGENERALIZED: [[META46]] = distinct !DISubprogram(name: 
"__clang_trap_msg$Undefined Behavior Sanitizer$Control flow integrity check 
failed", scope: [[META40]], file: [[META40]], type: [[META41]], flags: 
DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]])
+// UNGENERALIZED: [[DBG47]] = !DILocation(line: 54, column: 1, scope: 
[[DBG29]])
 //.
 // GENERALIZED: [[META0:![0-9]+]] = distinct !DICompileUnit(language: 
DW_LANG_C11, file: [[META1:![0-9]+]], isOptimized: true, runtimeVersion: 0, 
emissionKind: FullDebug, retainedTypes: [[META2:![0-9]+]], splitDebugInlining: 
false, nameTableKind: None)
 // GENERALIZED: [[META1]] = !DIFile(filename: "{{.*}}<stdin>", directory: 
{{.*}})
@@ -100,37 +101,38 @@ void g(int** (*fp)(const char *, const char **)) {
 // GENERALIZED: [[META3]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: 
[[META4:![0-9]+]], size: 64)
 // GENERALIZED: [[META4]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: 
[[META5:![0-9]+]], size: 64)
 // GENERALIZED: [[META5]] = !DIBasicType(name: "int", size: 32, encoding: 
DW_ATE_signed)
-// GENERALIZED: [[DBG10]] = distinct !DISubprogram(name: "f", scope: 
[[META11:![0-9]+]], file: [[META11]], line: 22, type: [[META12:![0-9]+]], 
scopeLine: 22, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | 
DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META18:![0-9]+]])
-// GENERALIZED: [[META11]] = !DIFile(filename: 
"{{.*}}cfi-icall-generalize-debuginfo.c", directory: {{.*}})
-// GENERALIZED: [[META12]] = !DISubroutineType(types: [[META13:![0-9]+]])
-// GENERALIZED: [[META13]] = !{[[META3]], [[META14:![0-9]+]], 
[[META17:![0-9]+]]}
-// GENERALIZED: [[META14]] = !DIDerivedType(tag: DW_TAG_pointer_type, 
baseType: [[META15:![0-9]+]], size: 64)
-// GENERALIZED: [[META15]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: 
[[META16:![0-9]+]])
-// GENERALIZED: [[META16]] = !DIBasicType(name: "char", size: 8, encoding: 
DW_ATE_signed_char)
-// GENERALIZED: [[META17]] = !DIDerivedType(tag: DW_TAG_pointer_type, 
baseType: [[META14]], size: 64)
-// GENERALIZED: [[META18]] = !{[[META19]], [[META20]]}
-// GENERALIZED: [[META19]] = !DILocalVariable(name: "a", arg: 1, scope: 
[[DBG10]], file: [[META11]], line: 22, type: [[META14]])
-// GENERALIZED: [[META20]] = !DILocalVariable(name: "b", arg: 2, scope: 
[[DBG10]], file: [[META11]], line: 22, type: [[META17]])
-// GENERALIZED: [[META21]] = !{i64 0, !"_ZTSFPPiPKcPS2_E"}
-// GENERALIZED: [[META22]] = !{i64 0, !"_ZTSFPvPKvS_E.generalized"}
-// GENERALIZED: [[META23]] = !DILocation(line: 0, scope: [[DBG10]])
-// GENERALIZED: [[DBG24]] = !DILocation(line: 23, column: 3, scope: [[DBG10]])
-// GENERALIZED: [[DBG25]] = distinct !DISubprogram(name: "g", scope: 
[[META11]], file: [[META11]], line: 52, type: [[META26:![0-9]+]], scopeLine: 
52, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, 
unit: [[META0]], retainedNodes: [[META29:![0-9]+]])
-// GENERALIZED: [[META26]] = !DISubroutineType(types: [[META27:![0-9]+]])
-// GENERALIZED: [[META27]] = !{null, [[META28:![0-9]+]]}
-// GENERALIZED: [[META28]] = !DIDerivedType(tag: DW_TAG_pointer_type, 
baseType: [[META12]], size: 64)
-// GENERALIZED: [[META29]] = !{[[META30]]}
-// GENERALIZED: [[META30]] = !DILocalVariable(name: "fp", arg: 1, scope: 
[[DBG25]], file: [[META11]], line: 52, type: [[META28]])
-// GENERALIZED: [[META31]] = !{i64 0, !"_ZTSFvPFPPiPKcPS2_EE"}
-// GENERALIZED: [[META32]] = !{i64 0, !"_ZTSFvPvE.generalized"}
-// GENERALIZED: [[META33]] = !DILocation(line: 0, scope: [[DBG25]])
-// GENERALIZED: [[DBG34]] = !DILocation(line: 0, scope: [[META35:![0-9]+]], 
inlinedAt: [[DBG37]])
-// GENERALIZED: [[META35]] = distinct !DISubprogram(name: 
"__ubsan_check_cfi_icall", scope: [[META11]], file: [[META11]], type: 
[[META36:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: 
[[META0]])
-// GENERALIZED: [[META36]] = !DISubroutineType(types: null)
-// GENERALIZED: [[DBG37]] = !DILocation(line: 53, column: 3, scope: [[DBG25]])
-// GENERALIZED: [[META38]] = !{}
-// GENERALIZED: [[PROF39]] = !{!"branch_weights", i32 1048575, i32 1}
-// GENERALIZED: [[DBGTRAP]] = !DILocation(line: 0, scope: [[TRAPMSG:![0-9]+]], 
inlinedAt: [[DBG34]])
-// GENERALIZED: [[TRAPMSG]] = distinct !DISubprogram(name: 
"__clang_trap_msg$Undefined Behavior Sanitizer$Control flow integrity check 
failed", scope: [[META11]], file: [[META11]], type: [[META36]], flags: 
DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]])
-// GENERALIZED: [[DBG42]] = !DILocation(line: 54, column: 1, scope: [[DBG25]])
+// GENERALIZED: [[DBG14]] = distinct !DISubprogram(name: "f", scope: 
[[META15:![0-9]+]], file: [[META15]], line: 22, type: [[META16:![0-9]+]], 
scopeLine: 22, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | 
DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META22:![0-9]+]])
+// GENERALIZED: [[META15]] = !DIFile(filename: 
"cfi-icall-generalize-debuginfo.c", directory: "")
+// GENERALIZED: [[META16]] = !DISubroutineType(types: [[META17:![0-9]+]])
+// GENERALIZED: [[META17]] = !{[[META3]], [[META18:![0-9]+]], 
[[META21:![0-9]+]]}
+// GENERALIZED: [[META18]] = !DIDerivedType(tag: DW_TAG_pointer_type, 
baseType: [[META19:![0-9]+]], size: 64)
+// GENERALIZED: [[META19]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: 
[[META20:![0-9]+]])
+// GENERALIZED: [[META20]] = !DIBasicType(name: "char", size: 8, encoding: 
DW_ATE_signed_char)
+// GENERALIZED: [[META21]] = !DIDerivedType(tag: DW_TAG_pointer_type, 
baseType: [[META18]], size: 64)
+// GENERALIZED: [[META22]] = !{[[META23]], [[META24]]}
+// GENERALIZED: [[META23]] = !DILocalVariable(name: "a", arg: 1, scope: 
[[DBG14]], file: [[META15]], line: 22, type: [[META18]])
+// GENERALIZED: [[META24]] = !DILocalVariable(name: "b", arg: 2, scope: 
[[DBG14]], file: [[META15]], line: 22, type: [[META21]])
+// GENERALIZED: [[META25]] = !{i64 0, !"_ZTSFPPiPKcPS2_E"}
+// GENERALIZED: [[META26]] = !{i64 0, !"_ZTSFPvPKvS_E.generalized"}
+// GENERALIZED: [[META27]] = !DILocation(line: 0, scope: [[DBG14]])
+// GENERALIZED: [[DBG28]] = !DILocation(line: 23, column: 3, scope: [[DBG14]])
+// GENERALIZED: [[DBG29]] = distinct !DISubprogram(name: "g", scope: 
[[META15]], file: [[META15]], line: 52, type: [[META30:![0-9]+]], scopeLine: 
52, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, 
unit: [[META0]], retainedNodes: [[META33:![0-9]+]])
+// GENERALIZED: [[META30]] = !DISubroutineType(types: [[META31:![0-9]+]])
+// GENERALIZED: [[META31]] = !{null, [[META32:![0-9]+]]}
+// GENERALIZED: [[META32]] = !DIDerivedType(tag: DW_TAG_pointer_type, 
baseType: [[META16]], size: 64)
+// GENERALIZED: [[META33]] = !{[[META34]]}
+// GENERALIZED: [[META34]] = !DILocalVariable(name: "fp", arg: 1, scope: 
[[DBG29]], file: [[META15]], line: 52, type: [[META32]])
+// GENERALIZED: [[META35]] = !{i64 0, !"_ZTSFvPFPPiPKcPS2_EE"}
+// GENERALIZED: [[META36]] = !{i64 0, !"_ZTSFvPvE.generalized"}
+// GENERALIZED: [[META37]] = !DILocation(line: 0, scope: [[DBG29]])
+// GENERALIZED: [[DBG38]] = !DILocation(line: 0, scope: [[META39:![0-9]+]], 
inlinedAt: [[DBG42]])
+// GENERALIZED: [[META39]] = distinct !DISubprogram(name: 
"__ubsan_check_cfi_icall", scope: [[META40:![0-9]+]], file: [[META40]], type: 
[[META41:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: 
[[META0]])
+// GENERALIZED: [[META40]] = !DIFile(filename: "{{.*}}ubsan_interface.h", 
directory: {{.*}})
+// GENERALIZED: [[META41]] = !DISubroutineType(types: null)
+// GENERALIZED: [[DBG42]] = !DILocation(line: 53, column: 3, scope: [[DBG29]])
+// GENERALIZED: [[META43]] = !{}
+// GENERALIZED: [[PROF44]] = !{!"branch_weights", i32 1048575, i32 1}
+// GENERALIZED: [[DBG45]] = !DILocation(line: 0, scope: [[META46:![0-9]+]], 
inlinedAt: [[DBG38]])
+// GENERALIZED: [[META46]] = distinct !DISubprogram(name: 
"__clang_trap_msg$Undefined Behavior Sanitizer$Control flow integrity check 
failed", scope: [[META40]], file: [[META40]], type: [[META41]], flags: 
DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]])
+// GENERALIZED: [[DBG47]] = !DILocation(line: 54, column: 1, scope: [[DBG29]])
 //.
diff --git a/clang/test/DebugInfo/Generic/cfi-icall-normalize2-debuginfo.c 
b/clang/test/DebugInfo/Generic/cfi-icall-normalize2-debuginfo.c
index 258c3bfbc9f55..4720d21c8281b 100644
--- a/clang/test/DebugInfo/Generic/cfi-icall-normalize2-debuginfo.c
+++ b/clang/test/DebugInfo/Generic/cfi-icall-normalize2-debuginfo.c
@@ -8,57 +8,57 @@
 // other languages that can't represent and encode C/C++ integer types.
 
 // CHECK-LABEL: define dso_local void @foo(
-// CHECK-SAME: ptr noundef [[FN:%.*]], i32 noundef [[ARG:%.*]]) 
local_unnamed_addr #[[ATTR0:[0-9]+]] !dbg [[DBG7:![0-9]+]] !type 
[[META18:![0-9]+]] !type [[META19:![0-9]+]] {
+// CHECK-SAME: ptr noundef [[FN:%.*]], i32 noundef [[ARG:%.*]]) 
local_unnamed_addr #[[ATTR0:[0-9]+]] !dbg [[DBG11:![0-9]+]] !type 
[[META22:![0-9]+]] !type [[META23:![0-9]+]] {
 // CHECK-NEXT:  [[ENTRY:.*:]]
-// CHECK-NEXT:      #dbg_value(ptr [[FN]], [[META16:![0-9]+]], 
!DIExpression(), [[META20:![0-9]+]])
-// CHECK-NEXT:      #dbg_value(i32 [[ARG]], [[META17:![0-9]+]], 
!DIExpression(), [[META20]])
-// CHECK-NEXT:    [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr [[FN]], 
metadata !"_ZTSFvu3i32E.normalized"), !dbg [[DBG21:![0-9]+]], !nosanitize 
[[META25:![0-9]+]]
-// CHECK-NEXT:    br i1 [[TMP0]], label %[[CONT:.*]], label %[[TRAP:.*]], !dbg 
[[DBG21]], !prof [[PROF26:![0-9]+]], !nosanitize [[META25]]
+// CHECK-NEXT:      #dbg_value(ptr [[FN]], [[META20:![0-9]+]], 
!DIExpression(), [[META24:![0-9]+]])
+// CHECK-NEXT:      #dbg_value(i32 [[ARG]], [[META21:![0-9]+]], 
!DIExpression(), [[META24]])
+// CHECK-NEXT:    [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr [[FN]], 
metadata !"_ZTSFvu3i32E.normalized"), !dbg [[DBG25:![0-9]+]], !nosanitize 
[[META30:![0-9]+]]
+// CHECK-NEXT:    br i1 [[TMP0]], label %[[CONT:.*]], label %[[TRAP:.*]], !dbg 
[[DBG25]], !prof [[PROF31:![0-9]+]], !nosanitize [[META30]]
 // CHECK:       [[TRAP]]:
-// CHECK-NEXT:    tail call void @llvm.ubsantrap(i8 2) #[[ATTR3:[0-9]+]], !dbg 
[[DBGTRAP:![0-9]+]], !nosanitize [[META25]]
-// CHECK-NEXT:    unreachable, !dbg [[DBGTRAP]], !nosanitize [[META25]]
+// CHECK-NEXT:    tail call void @llvm.ubsantrap(i8 2) #[[ATTR3:[0-9]+]], !dbg 
[[DBG32:![0-9]+]], !nosanitize [[META30]]
+// CHECK-NEXT:    unreachable, !dbg [[DBG32]], !nosanitize [[META30]]
 // CHECK:       [[CONT]]:
-// CHECK-NEXT:    tail call void [[FN]](i32 noundef [[ARG]]) 
#[[ATTR4:[0-9]+]], !dbg [[DBG24:![0-9]+]]
-// CHECK-NEXT:    ret void, !dbg [[DBG29:![0-9]+]]
+// CHECK-NEXT:    tail call void [[FN]](i32 noundef [[ARG]]) 
#[[ATTR4:[0-9]+]], !dbg [[DBG29:![0-9]+]]
+// CHECK-NEXT:    ret void, !dbg [[DBG34:![0-9]+]]
 //
 void foo(void (*fn)(int), int arg) {
     fn(arg);
 }
 
 // CHECK-LABEL: define dso_local void @bar(
-// CHECK-SAME: ptr noundef [[FN:%.*]], i32 noundef [[ARG1:%.*]], i32 noundef 
[[ARG2:%.*]]) local_unnamed_addr #[[ATTR0]] !dbg [[DBG30:![0-9]+]] !type 
[[META40:![0-9]+]] !type [[META41:![0-9]+]] {
+// CHECK-SAME: ptr noundef [[FN:%.*]], i32 noundef [[ARG1:%.*]], i32 noundef 
[[ARG2:%.*]]) local_unnamed_addr #[[ATTR0]] !dbg [[DBG35:![0-9]+]] !type 
[[META45:![0-9]+]] !type [[META46:![0-9]+]] {
 // CHECK-NEXT:  [[ENTRY:.*:]]
-// CHECK-NEXT:      #dbg_value(ptr [[FN]], [[META37:![0-9]+]], 
!DIExpression(), [[META42:![0-9]+]])
-// CHECK-NEXT:      #dbg_value(i32 [[ARG1]], [[META38:![0-9]+]], 
!DIExpression(), [[META42]])
-// CHECK-NEXT:      #dbg_value(i32 [[ARG2]], [[META39:![0-9]+]], 
!DIExpression(), [[META42]])
-// CHECK-NEXT:    [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr [[FN]], 
metadata !"_ZTSFvu3i32S_E.normalized"), !dbg [[DBG43:![0-9]+]], !nosanitize 
[[META25]]
-// CHECK-NEXT:    br i1 [[TMP0]], label %[[CONT:.*]], label %[[TRAP:.*]], !dbg 
[[DBG43]], !prof [[PROF26]], !nosanitize [[META25]]
+// CHECK-NEXT:      #dbg_value(ptr [[FN]], [[META42:![0-9]+]], 
!DIExpression(), [[META47:![0-9]+]])
+// CHECK-NEXT:      #dbg_value(i32 [[ARG1]], [[META43:![0-9]+]], 
!DIExpression(), [[META47]])
+// CHECK-NEXT:      #dbg_value(i32 [[ARG2]], [[META44:![0-9]+]], 
!DIExpression(), [[META47]])
+// CHECK-NEXT:    [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr [[FN]], 
metadata !"_ZTSFvu3i32S_E.normalized"), !dbg [[DBG48:![0-9]+]], !nosanitize 
[[META30]]
+// CHECK-NEXT:    br i1 [[TMP0]], label %[[CONT:.*]], label %[[TRAP:.*]], !dbg 
[[DBG48]], !prof [[PROF31]], !nosanitize [[META30]]
 // CHECK:       [[TRAP]]:
-// CHECK-NEXT:    tail call void @llvm.ubsantrap(i8 2) #[[ATTR3]], !dbg 
[[DBG45:![0-9]+]], !nosanitize [[META25]]
-// CHECK-NEXT:    unreachable, !dbg [[DBG45]], !nosanitize [[META25]]
+// CHECK-NEXT:    tail call void @llvm.ubsantrap(i8 2) #[[ATTR3]], !dbg 
[[DBG50:![0-9]+]], !nosanitize [[META30]]
+// CHECK-NEXT:    unreachable, !dbg [[DBG50]], !nosanitize [[META30]]
 // CHECK:       [[CONT]]:
-// CHECK-NEXT:    tail call void [[FN]](i32 noundef [[ARG1]], i32 noundef 
[[ARG2]]) #[[ATTR4]], !dbg [[DBG44:![0-9]+]]
-// CHECK-NEXT:    ret void, !dbg [[DBG46:![0-9]+]]
+// CHECK-NEXT:    tail call void [[FN]](i32 noundef [[ARG1]], i32 noundef 
[[ARG2]]) #[[ATTR4]], !dbg [[DBG49:![0-9]+]]
+// CHECK-NEXT:    ret void, !dbg [[DBG51:![0-9]+]]
 //
 void bar(void (*fn)(int, int), int arg1, int arg2) {
     fn(arg1, arg2);
 }
 
 // CHECK-LABEL: define dso_local void @baz(
-// CHECK-SAME: ptr noundef [[FN:%.*]], i32 noundef [[ARG1:%.*]], i32 noundef 
[[ARG2:%.*]], i32 noundef [[ARG3:%.*]]) local_unnamed_addr #[[ATTR0]] !dbg 
[[DBG47:![0-9]+]] !type [[META58:![0-9]+]] !type [[META59:![0-9]+]] {
+// CHECK-SAME: ptr noundef [[FN:%.*]], i32 noundef [[ARG1:%.*]], i32 noundef 
[[ARG2:%.*]], i32 noundef [[ARG3:%.*]]) local_unnamed_addr #[[ATTR0]] !dbg 
[[DBG52:![0-9]+]] !type [[META63:![0-9]+]] !type [[META64:![0-9]+]] {
 // CHECK-NEXT:  [[ENTRY:.*:]]
-// CHECK-NEXT:      #dbg_value(ptr [[FN]], [[META54:![0-9]+]], 
!DIExpression(), [[META60:![0-9]+]])
-// CHECK-NEXT:      #dbg_value(i32 [[ARG1]], [[META55:![0-9]+]], 
!DIExpression(), [[META60]])
-// CHECK-NEXT:      #dbg_value(i32 [[ARG2]], [[META56:![0-9]+]], 
!DIExpression(), [[META60]])
-// CHECK-NEXT:      #dbg_value(i32 [[ARG3]], [[META57:![0-9]+]], 
!DIExpression(), [[META60]])
-// CHECK-NEXT:    [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr [[FN]], 
metadata !"_ZTSFvu3i32S_S_E.normalized"), !dbg [[DBG61:![0-9]+]], !nosanitize 
[[META25]]
-// CHECK-NEXT:    br i1 [[TMP0]], label %[[CONT:.*]], label %[[TRAP:.*]], !dbg 
[[DBG61]], !prof [[PROF26]], !nosanitize [[META25]]
+// CHECK-NEXT:      #dbg_value(ptr [[FN]], [[META59:![0-9]+]], 
!DIExpression(), [[META65:![0-9]+]])
+// CHECK-NEXT:      #dbg_value(i32 [[ARG1]], [[META60:![0-9]+]], 
!DIExpression(), [[META65]])
+// CHECK-NEXT:      #dbg_value(i32 [[ARG2]], [[META61:![0-9]+]], 
!DIExpression(), [[META65]])
+// CHECK-NEXT:      #dbg_value(i32 [[ARG3]], [[META62:![0-9]+]], 
!DIExpression(), [[META65]])
+// CHECK-NEXT:    [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr [[FN]], 
metadata !"_ZTSFvu3i32S_S_E.normalized"), !dbg [[DBG66:![0-9]+]], !nosanitize 
[[META30]]
+// CHECK-NEXT:    br i1 [[TMP0]], label %[[CONT:.*]], label %[[TRAP:.*]], !dbg 
[[DBG66]], !prof [[PROF31]], !nosanitize [[META30]]
 // CHECK:       [[TRAP]]:
-// CHECK-NEXT:    tail call void @llvm.ubsantrap(i8 2) #[[ATTR3]], !dbg 
[[DBG63:![0-9]+]], !nosanitize [[META25]]
-// CHECK-NEXT:    unreachable, !dbg [[DBG63]], !nosanitize [[META25]]
+// CHECK-NEXT:    tail call void @llvm.ubsantrap(i8 2) #[[ATTR3]], !dbg 
[[DBG68:![0-9]+]], !nosanitize [[META30]]
+// CHECK-NEXT:    unreachable, !dbg [[DBG68]], !nosanitize [[META30]]
 // CHECK:       [[CONT]]:
-// CHECK-NEXT:    tail call void [[FN]](i32 noundef [[ARG1]], i32 noundef 
[[ARG2]], i32 noundef [[ARG3]]) #[[ATTR4]], !dbg [[DBG62:![0-9]+]]
-// CHECK-NEXT:    ret void, !dbg [[DBG64:![0-9]+]]
+// CHECK-NEXT:    tail call void [[FN]](i32 noundef [[ARG1]], i32 noundef 
[[ARG2]], i32 noundef [[ARG3]]) #[[ATTR4]], !dbg [[DBG67:![0-9]+]]
+// CHECK-NEXT:    ret void, !dbg [[DBG69:![0-9]+]]
 //
 void baz(void (*fn)(int, int, int), int arg1, int arg2, int arg3) {
     fn(arg1, arg2, arg3);
@@ -67,62 +67,63 @@ void baz(void (*fn)(int, int, int), int arg1, int arg2, int 
arg3) {
 //.
 // CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C11, 
file: [[META1:![0-9]+]], isOptimized: true, runtimeVersion: 0, emissionKind: 
FullDebug, splitDebugInlining: false, nameTableKind: None)
 // CHECK: [[META1]] = !DIFile(filename: "{{.*}}<stdin>", directory: {{.*}})
-// CHECK: [[DBG7]] = distinct !DISubprogram(name: "foo", scope: 
[[META8:![0-9]+]], file: [[META8]], line: 24, type: [[META9:![0-9]+]], 
scopeLine: 24, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | 
DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META15:![0-9]+]])
-// CHECK: [[META8]] = !DIFile(filename: 
"{{.*}}cfi-icall-normalize2-debuginfo.c", directory: {{.*}})
-// CHECK: [[META9]] = !DISubroutineType(types: [[META10:![0-9]+]])
-// CHECK: [[META10]] = !{null, [[META11:![0-9]+]], [[META14:![0-9]+]]}
-// CHECK: [[META11]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: 
[[META12:![0-9]+]], size: 64)
-// CHECK: [[META12]] = !DISubroutineType(types: [[META13:![0-9]+]])
-// CHECK: [[META13]] = !{null, [[META14]]}
-// CHECK: [[META14]] = !DIBasicType(name: "int", size: 32, encoding: 
DW_ATE_signed)
-// CHECK: [[META15]] = !{[[META16]], [[META17]]}
-// CHECK: [[META16]] = !DILocalVariable(name: "fn", arg: 1, scope: [[DBG7]], 
file: [[META8]], line: 24, type: [[META11]])
-// CHECK: [[META17]] = !DILocalVariable(name: "arg", arg: 2, scope: [[DBG7]], 
file: [[META8]], line: 24, type: [[META14]])
-// CHECK: [[META18]] = !{i64 0, !"_ZTSFvPFvu3i32ES_E.normalized"}
-// CHECK: [[META19]] = !{i64 0, !"_ZTSFvPvu3i32E.normalized.generalized"}
-// CHECK: [[META20]] = !DILocation(line: 0, scope: [[DBG7]])
-// CHECK: [[DBG21]] = !DILocation(line: 0, scope: [[META22:![0-9]+]], 
inlinedAt: [[DBG24]])
-// CHECK: [[META22]] = distinct !DISubprogram(name: "__ubsan_check_cfi_icall", 
scope: [[META8]], file: [[META8]], type: [[META23:![0-9]+]], flags: 
DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]])
-// CHECK: [[META23]] = !DISubroutineType(types: null)
-// CHECK: [[DBG24]] = !DILocation(line: 25, column: 5, scope: [[DBG7]])
-// CHECK: [[META25]] = !{}
-// CHECK: [[PROF26]] = !{!"branch_weights", i32 1048575, i32 1}
-// CHECK: [[DBGTRAP]] = !DILocation(line: 0, scope: [[TRAPMSG:![0-9]+]], 
inlinedAt: [[DBG21]])
-// CHECK: [[TRAPMSG]] = distinct !DISubprogram(name: 
"__clang_trap_msg$Undefined Behavior Sanitizer$Control flow integrity check 
failed", scope: [[META8]], file: [[META8]], type: [[META23]], flags: 
DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]])
-// CHECK: [[DBG29]] = !DILocation(line: 26, column: 1, scope: [[DBG7]])
-// CHECK: [[DBG30]] = distinct !DISubprogram(name: "bar", scope: [[META8]], 
file: [[META8]], line: 43, type: [[META31:![0-9]+]], scopeLine: 43, flags: 
DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: 
[[META0]], retainedNodes: [[META36:![0-9]+]])
-// CHECK: [[META31]] = !DISubroutineType(types: [[META32:![0-9]+]])
-// CHECK: [[META32]] = !{null, [[META33:![0-9]+]], [[META14]], [[META14]]}
-// CHECK: [[META33]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: 
[[META34:![0-9]+]], size: 64)
-// CHECK: [[META34]] = !DISubroutineType(types: [[META35:![0-9]+]])
-// CHECK: [[META35]] = !{null, [[META14]], [[META14]]}
-// CHECK: [[META36]] = !{[[META37]], [[META38]], [[META39]]}
-// CHECK: [[META37]] = !DILocalVariable(name: "fn", arg: 1, scope: [[DBG30]], 
file: [[META8]], line: 43, type: [[META33]])
-// CHECK: [[META38]] = !DILocalVariable(name: "arg1", arg: 2, scope: 
[[DBG30]], file: [[META8]], line: 43, type: [[META14]])
-// CHECK: [[META39]] = !DILocalVariable(name: "arg2", arg: 3, scope: 
[[DBG30]], file: [[META8]], line: 43, type: [[META14]])
-// CHECK: [[META40]] = !{i64 0, !"_ZTSFvPFvu3i32S_ES_S_E.normalized"}
-// CHECK: [[META41]] = !{i64 0, !"_ZTSFvPvu3i32S0_E.normalized.generalized"}
-// CHECK: [[META42]] = !DILocation(line: 0, scope: [[DBG30]])
-// CHECK: [[DBG43]] = !DILocation(line: 0, scope: [[META22]], inlinedAt: 
[[DBG44]])
-// CHECK: [[DBG44]] = !DILocation(line: 44, column: 5, scope: [[DBG30]])
-// CHECK: [[DBG45]] = !DILocation(line: 0, scope: [[TRAPMSG]], inlinedAt: 
[[DBG43]])
-// CHECK: [[DBG46]] = !DILocation(line: 45, column: 1, scope: [[DBG30]])
-// CHECK: [[DBG47]] = distinct !DISubprogram(name: "baz", scope: [[META8]], 
file: [[META8]], line: 63, type: [[META48:![0-9]+]], scopeLine: 63, flags: 
DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: 
[[META0]], retainedNodes: [[META53:![0-9]+]])
-// CHECK: [[META48]] = !DISubroutineType(types: [[META49:![0-9]+]])
-// CHECK: [[META49]] = !{null, [[META50:![0-9]+]], [[META14]], [[META14]], 
[[META14]]}
-// CHECK: [[META50]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: 
[[META51:![0-9]+]], size: 64)
-// CHECK: [[META51]] = !DISubroutineType(types: [[META52:![0-9]+]])
-// CHECK: [[META52]] = !{null, [[META14]], [[META14]], [[META14]]}
-// CHECK: [[META53]] = !{[[META54]], [[META55]], [[META56]], [[META57]]}
-// CHECK: [[META54]] = !DILocalVariable(name: "fn", arg: 1, scope: [[DBG47]], 
file: [[META8]], line: 63, type: [[META50]])
-// CHECK: [[META55]] = !DILocalVariable(name: "arg1", arg: 2, scope: 
[[DBG47]], file: [[META8]], line: 63, type: [[META14]])
-// CHECK: [[META56]] = !DILocalVariable(name: "arg2", arg: 3, scope: 
[[DBG47]], file: [[META8]], line: 63, type: [[META14]])
-// CHECK: [[META57]] = !DILocalVariable(name: "arg3", arg: 4, scope: 
[[DBG47]], file: [[META8]], line: 63, type: [[META14]])
-// CHECK: [[META58]] = !{i64 0, !"_ZTSFvPFvu3i32S_S_ES_S_S_E.normalized"}
-// CHECK: [[META59]] = !{i64 0, !"_ZTSFvPvu3i32S0_S0_E.normalized.generalized"}
-// CHECK: [[META60]] = !DILocation(line: 0, scope: [[DBG47]])
-// CHECK: [[DBG61]] = !DILocation(line: 0, scope: [[META22]], inlinedAt: 
[[DBG62]])
-// CHECK: [[DBG62]] = !DILocation(line: 64, column: 5, scope: [[DBG47]])
-// CHECK: [[DBG63]] = !DILocation(line: 0, scope: [[TRAPMSG]], inlinedAt: 
[[DBG61]])
-// CHECK: [[DBG64]] = !DILocation(line: 65, column: 1, scope: [[DBG47]])
+// CHECK: [[DBG11]] = distinct !DISubprogram(name: "foo", scope: 
[[META12:![0-9]+]], file: [[META12]], line: 24, type: [[META13:![0-9]+]], 
scopeLine: 24, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | 
DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META19:![0-9]+]])
+// CHECK: [[META12]] = !DIFile(filename: "cfi-icall-normalize2-debuginfo.c", 
directory: "")
+// CHECK: [[META13]] = !DISubroutineType(types: [[META14:![0-9]+]])
+// CHECK: [[META14]] = !{null, [[META15:![0-9]+]], [[META18:![0-9]+]]}
+// CHECK: [[META15]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: 
[[META16:![0-9]+]], size: 64)
+// CHECK: [[META16]] = !DISubroutineType(types: [[META17:![0-9]+]])
+// CHECK: [[META17]] = !{null, [[META18]]}
+// CHECK: [[META18]] = !DIBasicType(name: "int", size: 32, encoding: 
DW_ATE_signed)
+// CHECK: [[META19]] = !{[[META20]], [[META21]]}
+// CHECK: [[META20]] = !DILocalVariable(name: "fn", arg: 1, scope: [[DBG11]], 
file: [[META12]], line: 24, type: [[META15]])
+// CHECK: [[META21]] = !DILocalVariable(name: "arg", arg: 2, scope: [[DBG11]], 
file: [[META12]], line: 24, type: [[META18]])
+// CHECK: [[META22]] = !{i64 0, !"_ZTSFvPFvu3i32ES_E.normalized"}
+// CHECK: [[META23]] = !{i64 0, !"_ZTSFvPvu3i32E.normalized.generalized"}
+// CHECK: [[META24]] = !DILocation(line: 0, scope: [[DBG11]])
+// CHECK: [[DBG25]] = !DILocation(line: 0, scope: [[META26:![0-9]+]], 
inlinedAt: [[DBG29]])
+// CHECK: [[META26]] = distinct !DISubprogram(name: "__ubsan_check_cfi_icall", 
scope: [[META27:![0-9]+]], file: [[META27]], type: [[META28:![0-9]+]], flags: 
DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]])
+// CHECK: [[META27]] = !DIFile(filename: "{{.*}}ubsan_interface.h", directory: 
{{.*}})
+// CHECK: [[META28]] = !DISubroutineType(types: null)
+// CHECK: [[DBG29]] = !DILocation(line: 25, column: 5, scope: [[DBG11]])
+// CHECK: [[META30]] = !{}
+// CHECK: [[PROF31]] = !{!"branch_weights", i32 1048575, i32 1}
+// CHECK: [[DBG32]] = !DILocation(line: 0, scope: [[META33:![0-9]+]], 
inlinedAt: [[DBG25]])
+// CHECK: [[META33]] = distinct !DISubprogram(name: 
"__clang_trap_msg$Undefined Behavior Sanitizer$Control flow integrity check 
failed", scope: [[META27]], file: [[META27]], type: [[META28]], flags: 
DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]])
+// CHECK: [[DBG34]] = !DILocation(line: 26, column: 1, scope: [[DBG11]])
+// CHECK: [[DBG35]] = distinct !DISubprogram(name: "bar", scope: [[META12]], 
file: [[META12]], line: 43, type: [[META36:![0-9]+]], scopeLine: 43, flags: 
DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: 
[[META0]], retainedNodes: [[META41:![0-9]+]])
+// CHECK: [[META36]] = !DISubroutineType(types: [[META37:![0-9]+]])
+// CHECK: [[META37]] = !{null, [[META38:![0-9]+]], [[META18]], [[META18]]}
+// CHECK: [[META38]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: 
[[META39:![0-9]+]], size: 64)
+// CHECK: [[META39]] = !DISubroutineType(types: [[META40:![0-9]+]])
+// CHECK: [[META40]] = !{null, [[META18]], [[META18]]}
+// CHECK: [[META41]] = !{[[META42]], [[META43]], [[META44]]}
+// CHECK: [[META42]] = !DILocalVariable(name: "fn", arg: 1, scope: [[DBG35]], 
file: [[META12]], line: 43, type: [[META38]])
+// CHECK: [[META43]] = !DILocalVariable(name: "arg1", arg: 2, scope: 
[[DBG35]], file: [[META12]], line: 43, type: [[META18]])
+// CHECK: [[META44]] = !DILocalVariable(name: "arg2", arg: 3, scope: 
[[DBG35]], file: [[META12]], line: 43, type: [[META18]])
+// CHECK: [[META45]] = !{i64 0, !"_ZTSFvPFvu3i32S_ES_S_E.normalized"}
+// CHECK: [[META46]] = !{i64 0, !"_ZTSFvPvu3i32S0_E.normalized.generalized"}
+// CHECK: [[META47]] = !DILocation(line: 0, scope: [[DBG35]])
+// CHECK: [[DBG48]] = !DILocation(line: 0, scope: [[META26]], inlinedAt: 
[[DBG49]])
+// CHECK: [[DBG49]] = !DILocation(line: 44, column: 5, scope: [[DBG35]])
+// CHECK: [[DBG50]] = !DILocation(line: 0, scope: [[META33]], inlinedAt: 
[[DBG48]])
+// CHECK: [[DBG51]] = !DILocation(line: 45, column: 1, scope: [[DBG35]])
+// CHECK: [[DBG52]] = distinct !DISubprogram(name: "baz", scope: [[META12]], 
file: [[META12]], line: 63, type: [[META53:![0-9]+]], scopeLine: 63, flags: 
DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: 
[[META0]], retainedNodes: [[META58:![0-9]+]])
+// CHECK: [[META53]] = !DISubroutineType(types: [[META54:![0-9]+]])
+// CHECK: [[META54]] = !{null, [[META55:![0-9]+]], [[META18]], [[META18]], 
[[META18]]}
+// CHECK: [[META55]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: 
[[META56:![0-9]+]], size: 64)
+// CHECK: [[META56]] = !DISubroutineType(types: [[META57:![0-9]+]])
+// CHECK: [[META57]] = !{null, [[META18]], [[META18]], [[META18]]}
+// CHECK: [[META58]] = !{[[META59]], [[META60]], [[META61]], [[META62]]}
+// CHECK: [[META59]] = !DILocalVariable(name: "fn", arg: 1, scope: [[DBG52]], 
file: [[META12]], line: 63, type: [[META55]])
+// CHECK: [[META60]] = !DILocalVariable(name: "arg1", arg: 2, scope: 
[[DBG52]], file: [[META12]], line: 63, type: [[META18]])
+// CHECK: [[META61]] = !DILocalVariable(name: "arg2", arg: 3, scope: 
[[DBG52]], file: [[META12]], line: 63, type: [[META18]])
+// CHECK: [[META62]] = !DILocalVariable(name: "arg3", arg: 4, scope: 
[[DBG52]], file: [[META12]], line: 63, type: [[META18]])
+// CHECK: [[META63]] = !{i64 0, !"_ZTSFvPFvu3i32S_S_ES_S_S_E.normalized"}
+// CHECK: [[META64]] = !{i64 0, !"_ZTSFvPvu3i32S0_S0_E.normalized.generalized"}
+// CHECK: [[META65]] = !DILocation(line: 0, scope: [[DBG52]])
+// CHECK: [[DBG66]] = !DILocation(line: 0, scope: [[META26]], inlinedAt: 
[[DBG67]])
+// CHECK: [[DBG67]] = !DILocation(line: 64, column: 5, scope: [[DBG52]])
+// CHECK: [[DBG68]] = !DILocation(line: 0, scope: [[META33]], inlinedAt: 
[[DBG66]])
+// CHECK: [[DBG69]] = !DILocation(line: 65, column: 1, scope: [[DBG52]])
 //.
diff --git a/clang/test/DebugInfo/Generic/ubsan-function-debuginfo.c 
b/clang/test/DebugInfo/Generic/ubsan-function-debuginfo.c
index 106aeceadf369..dd46b754a32dd 100644
--- a/clang/test/DebugInfo/Generic/ubsan-function-debuginfo.c
+++ b/clang/test/DebugInfo/Generic/ubsan-function-debuginfo.c
@@ -5,67 +5,68 @@
 // RUN:   | FileCheck %s
 
 // CHECK-LABEL: define dso_local void @call_no_prototype(
-// CHECK-SAME: ptr noundef readonly captures(none) [[F:%.*]]) 
local_unnamed_addr #[[ATTR0:[0-9]+]] !dbg [[DBG5:![0-9]+]] !func_sanitize 
[[META14:![0-9]+]] {
+// CHECK-SAME: ptr noundef readonly captures(none) [[F:%.*]]) 
local_unnamed_addr #[[ATTR0:[0-9]+]] !dbg [[DBG9:![0-9]+]] !func_sanitize 
[[META18:![0-9]+]] {
 // CHECK-NEXT:  [[ENTRY:.*:]]
-// CHECK-NEXT:      #dbg_value(ptr [[F]], [[META13:![0-9]+]], !DIExpression(), 
[[META15:![0-9]+]])
-// CHECK-NEXT:    tail call void (...) [[F]]() #[[ATTR2:[0-9]+]], !dbg 
[[DBG16:![0-9]+]]
-// CHECK-NEXT:    ret void, !dbg [[DBG17:![0-9]+]]
+// CHECK-NEXT:      #dbg_value(ptr [[F]], [[META17:![0-9]+]], !DIExpression(), 
[[META19:![0-9]+]])
+// CHECK-NEXT:    tail call void (...) [[F]]() #[[ATTR2:[0-9]+]], !dbg 
[[DBG20:![0-9]+]]
+// CHECK-NEXT:    ret void, !dbg [[DBG21:![0-9]+]]
 //
 void call_no_prototype(void (*f)()) { f(); }
 
 // CHECK-LABEL: define dso_local void @call_prototype(
-// CHECK-SAME: ptr noundef [[F:%.*]]) local_unnamed_addr #[[ATTR0]] !dbg 
[[DBG18:![0-9]+]] !func_sanitize [[META26:![0-9]+]] {
+// CHECK-SAME: ptr noundef [[F:%.*]]) local_unnamed_addr #[[ATTR0]] !dbg 
[[DBG22:![0-9]+]] !func_sanitize [[META30:![0-9]+]] {
 // CHECK-NEXT:  [[ENTRY:.*:]]
-// CHECK-NEXT:      #dbg_value(ptr [[F]], [[META25:![0-9]+]], !DIExpression(), 
[[META27:![0-9]+]])
-// CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr [[F]], i64 -8, !dbg 
[[DBG28:![0-9]+]]
-// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4, !dbg 
[[DBG28]], !nosanitize [[META32:![0-9]+]]
-// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[TMP1]], -1056584962, !dbg 
[[DBG28]], !nosanitize [[META32]]
-// CHECK-NEXT:    br i1 [[TMP2]], label %[[TYPECHECK:.*]], label 
%[[CONT1:.*]], !dbg [[DBG28]], !nosanitize [[META32]]
+// CHECK-NEXT:      #dbg_value(ptr [[F]], [[META29:![0-9]+]], !DIExpression(), 
[[META31:![0-9]+]])
+// CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr [[F]], i64 -8, !dbg 
[[DBG32:![0-9]+]]
+// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4, !dbg 
[[DBG32]], !nosanitize [[META37:![0-9]+]]
+// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[TMP1]], -1056584962, !dbg 
[[DBG32]], !nosanitize [[META37]]
+// CHECK-NEXT:    br i1 [[TMP2]], label %[[TYPECHECK:.*]], label 
%[[CONT1:.*]], !dbg [[DBG32]], !nosanitize [[META37]]
 // CHECK:       [[TYPECHECK]]:
-// CHECK-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[F]], i64 -4, !dbg 
[[DBG28]]
-// CHECK-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP3]], align 8, !dbg 
[[DBG28]], !nosanitize [[META32]]
-// CHECK-NEXT:    [[TMP5:%.*]] = icmp eq i32 [[TMP4]], 905068220, !dbg 
[[DBG28]], !nosanitize [[META32]]
-// CHECK-NEXT:    br i1 [[TMP5]], label %[[CONT1]], label 
%[[HANDLER_FUNCTION_TYPE_MISMATCH:.*]], !dbg [[DBG28]], !prof 
[[PROF33:![0-9]+]], !nosanitize [[META32]]
+// CHECK-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[F]], i64 -4, !dbg 
[[DBG32]]
+// CHECK-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP3]], align 8, !dbg 
[[DBG32]], !nosanitize [[META37]]
+// CHECK-NEXT:    [[TMP5:%.*]] = icmp eq i32 [[TMP4]], 905068220, !dbg 
[[DBG32]], !nosanitize [[META37]]
+// CHECK-NEXT:    br i1 [[TMP5]], label %[[CONT1]], label 
%[[HANDLER_FUNCTION_TYPE_MISMATCH:.*]], !dbg [[DBG32]], !prof 
[[PROF38:![0-9]+]], !nosanitize [[META37]]
 // CHECK:       [[HANDLER_FUNCTION_TYPE_MISMATCH]]:
-// CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[F]] to i64, !dbg [[DBG28]], 
!nosanitize [[META32]]
-// CHECK-NEXT:    tail call void 
@__ubsan_handle_function_type_mismatch_abort(ptr nonnull @[[GLOB1:[0-9]+]], i64 
[[TMP6]]) #[[ATTR3:[0-9]+]], !dbg [[DBG28]], !nosanitize [[META32]]
-// CHECK-NEXT:    unreachable, !dbg [[DBG28]], !nosanitize [[META32]]
+// CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[F]] to i64, !dbg [[DBG32]], 
!nosanitize [[META37]]
+// CHECK-NEXT:    tail call void 
@__ubsan_handle_function_type_mismatch_abort(ptr nonnull @[[GLOB1:[0-9]+]], i64 
[[TMP6]]) #[[ATTR3:[0-9]+]], !dbg [[DBG32]], !nosanitize [[META37]]
+// CHECK-NEXT:    unreachable, !dbg [[DBG32]], !nosanitize [[META37]]
 // CHECK:       [[CONT1]]:
-// CHECK-NEXT:    tail call void [[F]]() #[[ATTR2]], !dbg [[DBG31:![0-9]+]]
-// CHECK-NEXT:    ret void, !dbg [[DBG34:![0-9]+]]
+// CHECK-NEXT:    tail call void [[F]]() #[[ATTR2]], !dbg [[DBG36:![0-9]+]]
+// CHECK-NEXT:    ret void, !dbg [[DBG39:![0-9]+]]
 //
 void call_prototype(void (*f)(void)) { f(); }
 //.
 // CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C11, 
file: [[META1:![0-9]+]], isOptimized: true, runtimeVersion: 0, emissionKind: 
FullDebug, splitDebugInlining: false, nameTableKind: None)
 // CHECK: [[META1]] = !DIFile(filename: "{{.*}}<stdin>", directory: {{.*}})
-// CHECK: [[DBG5]] = distinct !DISubprogram(name: "call_no_prototype", scope: 
[[META6:![0-9]+]], file: [[META6]], line: 14, type: [[META7:![0-9]+]], 
scopeLine: 14, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | 
DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META12:![0-9]+]])
-// CHECK: [[META6]] = !DIFile(filename: "{{.*}}ubsan-function-debuginfo.c", 
directory: {{.*}})
-// CHECK: [[META7]] = !DISubroutineType(types: [[META8:![0-9]+]])
-// CHECK: [[META8]] = !{null, [[META9:![0-9]+]]}
-// CHECK: [[META9]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: 
[[META10:![0-9]+]], size: 64)
-// CHECK: [[META10]] = !DISubroutineType(types: [[META11:![0-9]+]])
-// CHECK: [[META11]] = !{null, null}
-// CHECK: [[META12]] = !{[[META13]]}
-// CHECK: [[META13]] = !DILocalVariable(name: "f", arg: 1, scope: [[DBG5]], 
file: [[META6]], line: 14, type: [[META9]])
-// CHECK: [[META14]] = !{i32 -1056584962, i32 187769638}
-// CHECK: [[META15]] = !DILocation(line: 0, scope: [[DBG5]])
-// CHECK: [[DBG16]] = !DILocation(line: 14, column: 39, scope: [[DBG5]])
-// CHECK: [[DBG17]] = !DILocation(line: 14, column: 44, scope: [[DBG5]])
-// CHECK: [[DBG18]] = distinct !DISubprogram(name: "call_prototype", scope: 
[[META6]], file: [[META6]], line: 37, type: [[META19:![0-9]+]], scopeLine: 37, 
flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: 
[[META0]], retainedNodes: [[META24:![0-9]+]])
-// CHECK: [[META19]] = !DISubroutineType(types: [[META20:![0-9]+]])
-// CHECK: [[META20]] = !{null, [[META21:![0-9]+]]}
-// CHECK: [[META21]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: 
[[META22:![0-9]+]], size: 64)
-// CHECK: [[META22]] = !DISubroutineType(types: [[META23:![0-9]+]])
-// CHECK: [[META23]] = !{null}
-// CHECK: [[META24]] = !{[[META25]]}
-// CHECK: [[META25]] = !DILocalVariable(name: "f", arg: 1, scope: [[DBG18]], 
file: [[META6]], line: 37, type: [[META21]])
-// CHECK: [[META26]] = !{i32 -1056584962, i32 -747727454}
-// CHECK: [[META27]] = !DILocation(line: 0, scope: [[DBG18]])
-// CHECK: [[DBG28]] = !DILocation(line: 0, scope: [[META29:![0-9]+]], 
inlinedAt: [[DBG31]])
-// CHECK: [[META29]] = distinct !DISubprogram(name: "__ubsan_check_function", 
scope: [[META6]], file: [[META6]], type: [[META30:![0-9]+]], flags: 
DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]])
-// CHECK: [[META30]] = !DISubroutineType(types: null)
-// CHECK: [[DBG31]] = !DILocation(line: 37, column: 40, scope: [[DBG18]])
-// CHECK: [[META32]] = !{}
-// CHECK: [[PROF33]] = !{!"branch_weights", i32 1048575, i32 1}
-// CHECK: [[DBG34]] = !DILocation(line: 37, column: 45, scope: [[DBG18]])
+// CHECK: [[DBG9]] = distinct !DISubprogram(name: "call_no_prototype", scope: 
[[META10:![0-9]+]], file: [[META10]], line: 14, type: [[META11:![0-9]+]], 
scopeLine: 14, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | 
DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META16:![0-9]+]])
+// CHECK: [[META10]] = !DIFile(filename: "ubsan-function-debuginfo.c", 
directory: "")
+// CHECK: [[META11]] = !DISubroutineType(types: [[META12:![0-9]+]])
+// CHECK: [[META12]] = !{null, [[META13:![0-9]+]]}
+// CHECK: [[META13]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: 
[[META14:![0-9]+]], size: 64)
+// CHECK: [[META14]] = !DISubroutineType(types: [[META15:![0-9]+]])
+// CHECK: [[META15]] = !{null, null}
+// CHECK: [[META16]] = !{[[META17]]}
+// CHECK: [[META17]] = !DILocalVariable(name: "f", arg: 1, scope: [[DBG9]], 
file: [[META10]], line: 14, type: [[META13]])
+// CHECK: [[META18]] = !{i32 -1056584962, i32 187769638}
+// CHECK: [[META19]] = !DILocation(line: 0, scope: [[DBG9]])
+// CHECK: [[DBG20]] = !DILocation(line: 14, column: 39, scope: [[DBG9]])
+// CHECK: [[DBG21]] = !DILocation(line: 14, column: 44, scope: [[DBG9]])
+// CHECK: [[DBG22]] = distinct !DISubprogram(name: "call_prototype", scope: 
[[META10]], file: [[META10]], line: 37, type: [[META23:![0-9]+]], scopeLine: 
37, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, 
unit: [[META0]], retainedNodes: [[META28:![0-9]+]])
+// CHECK: [[META23]] = !DISubroutineType(types: [[META24:![0-9]+]])
+// CHECK: [[META24]] = !{null, [[META25:![0-9]+]]}
+// CHECK: [[META25]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: 
[[META26:![0-9]+]], size: 64)
+// CHECK: [[META26]] = !DISubroutineType(types: [[META27:![0-9]+]])
+// CHECK: [[META27]] = !{null}
+// CHECK: [[META28]] = !{[[META29]]}
+// CHECK: [[META29]] = !DILocalVariable(name: "f", arg: 1, scope: [[DBG22]], 
file: [[META10]], line: 37, type: [[META25]])
+// CHECK: [[META30]] = !{i32 -1056584962, i32 -747727454}
+// CHECK: [[META31]] = !DILocation(line: 0, scope: [[DBG22]])
+// CHECK: [[DBG32]] = !DILocation(line: 0, scope: [[META33:![0-9]+]], 
inlinedAt: [[DBG36]])
+// CHECK: [[META33]] = distinct !DISubprogram(name: "__ubsan_check_function", 
scope: [[META34:![0-9]+]], file: [[META34]], type: [[META35:![0-9]+]], flags: 
DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]])
+// CHECK: [[META34]] = !DIFile(filename: "{{.*}}ubsan_interface.h", directory: 
{{.*}})
+// CHECK: [[META35]] = !DISubroutineType(types: null)
+// CHECK: [[DBG36]] = !DILocation(line: 37, column: 40, scope: [[DBG22]])
+// CHECK: [[META37]] = !{}
+// CHECK: [[PROF38]] = !{!"branch_weights", i32 1048575, i32 1}
+// CHECK: [[DBG39]] = !DILocation(line: 37, column: 45, scope: [[DBG22]])
 //.
diff --git a/clang/test/DebugInfo/Generic/unsigned-promotion-debuginfo.c 
b/clang/test/DebugInfo/Generic/unsigned-promotion-debuginfo.c
index d50e0befcee79..6f7e1df0d0d72 100644
--- a/clang/test/DebugInfo/Generic/unsigned-promotion-debuginfo.c
+++ b/clang/test/DebugInfo/Generic/unsigned-promotion-debuginfo.c
@@ -18,19 +18,19 @@ unsigned short si, sj, sk;
 // CHECKS-NEXT:    [[CONV:%.*]] = zext i16 [[TMP0]] to i32, !dbg [[DBG20]]
 // CHECKS-NEXT:    [[TMP1:%.*]] = load i16, ptr @sk, align 2, !dbg 
[[DBG23:![0-9]+]], !tbaa [[SHORT_TBAA21]]
 // CHECKS-NEXT:    [[CONV1:%.*]] = zext i16 [[TMP1]] to i32, !dbg [[DBG23]]
-// CHECKS-NEXT:    [[TMP2:%.*]] = tail call { i32, i1 } 
@llvm.smul.with.overflow.i32(i32 [[CONV]], i32 [[CONV1]]), !dbg 
[[DBG24:![0-9]+]], !nosanitize [[META28:![0-9]+]]
-// CHECKS-NEXT:    [[TMP3:%.*]] = extractvalue { i32, i1 } [[TMP2]], 1, !dbg 
[[DBG24]], !nosanitize [[META28]]
-// CHECKS-NEXT:    br i1 [[TMP3]], label %[[HANDLER_MUL_OVERFLOW:.*]], label 
%[[CONT:.*]], !dbg [[DBG24]], !prof [[PROF29:![0-9]+]], !nosanitize [[META28]]
+// CHECKS-NEXT:    [[TMP2:%.*]] = tail call { i32, i1 } 
@llvm.smul.with.overflow.i32(i32 [[CONV]], i32 [[CONV1]]), !dbg 
[[DBG24:![0-9]+]], !nosanitize [[META29:![0-9]+]]
+// CHECKS-NEXT:    [[TMP3:%.*]] = extractvalue { i32, i1 } [[TMP2]], 1, !dbg 
[[DBG24]], !nosanitize [[META29]]
+// CHECKS-NEXT:    br i1 [[TMP3]], label %[[HANDLER_MUL_OVERFLOW:.*]], label 
%[[CONT:.*]], !dbg [[DBG24]], !prof [[PROF30:![0-9]+]], !nosanitize [[META29]]
 // CHECKS:       [[HANDLER_MUL_OVERFLOW]]:
 // CHECKS-NEXT:    [[TMP4:%.*]] = zext i16 [[TMP0]] to i64, !dbg [[DBG24]]
 // CHECKS-NEXT:    [[TMP5:%.*]] = zext i16 [[TMP1]] to i64, !dbg [[DBG24]]
-// CHECKS-NEXT:    tail call void @__ubsan_handle_mul_overflow_abort(ptr 
nonnull @[[GLOB1:[0-9]+]], i64 [[TMP4]], i64 [[TMP5]]) #[[ATTR3:[0-9]+]], !dbg 
[[DBG24]], !nosanitize [[META28]]
-// CHECKS-NEXT:    unreachable, !dbg [[DBG24]], !nosanitize [[META28]]
+// CHECKS-NEXT:    tail call void @__ubsan_handle_mul_overflow_abort(ptr 
nonnull @[[GLOB1:[0-9]+]], i64 [[TMP4]], i64 [[TMP5]]) #[[ATTR3:[0-9]+]], !dbg 
[[DBG24]], !nosanitize [[META29]]
+// CHECKS-NEXT:    unreachable, !dbg [[DBG24]], !nosanitize [[META29]]
 // CHECKS:       [[CONT]]:
-// CHECKS-NEXT:    [[TMP6:%.*]] = extractvalue { i32, i1 } [[TMP2]], 0, !dbg 
[[DBG24]], !nosanitize [[META28]]
+// CHECKS-NEXT:    [[TMP6:%.*]] = extractvalue { i32, i1 } [[TMP2]], 0, !dbg 
[[DBG24]], !nosanitize [[META29]]
 // CHECKS-NEXT:    [[CONV2:%.*]] = trunc i32 [[TMP6]] to i16, !dbg [[DBG20]]
-// CHECKS-NEXT:    store i16 [[CONV2]], ptr @si, align 2, !dbg 
[[DBG30:![0-9]+]], !tbaa [[SHORT_TBAA21]]
-// CHECKS-NEXT:    ret void, !dbg [[DBG31:![0-9]+]]
+// CHECKS-NEXT:    store i16 [[CONV2]], ptr @si, align 2, !dbg 
[[DBG31:![0-9]+]], !tbaa [[SHORT_TBAA21]]
+// CHECKS-NEXT:    ret void, !dbg [[DBG32:![0-9]+]]
 //
 // CHECKU-LABEL: define dso_local void @testshortmul(
 // CHECKU-SAME: ) local_unnamed_addr #[[ATTR0:[0-9]+]] !dbg [[DBG17:![0-9]+]] {
@@ -54,7 +54,7 @@ void testshortmul(void) {
 // CHECKS: [[META4]] = !{[[META5:![0-9]+]], [[META0]], [[META9:![0-9]+]]}
 // CHECKS: [[META5]] = !DIGlobalVariableExpression(var: [[META6:![0-9]+]], 
expr: !DIExpression())
 // CHECKS: [[META6]] = distinct !DIGlobalVariable(name: "si", scope: 
[[META2]], file: [[META7]], line: 12, type: [[META8]], isLocal: false, 
isDefinition: true)
-// CHECKS: [[META7]] = !DIFile(filename: 
"{{.*}}unsigned-promotion-debuginfo.c", directory: {{.*}})
+// CHECKS: [[META7]] = !DIFile(filename: "unsigned-promotion-debuginfo.c", 
directory: "")
 // CHECKS: [[META8]] = !DIBasicType(name: "unsigned short", size: 16, 
encoding: DW_ATE_unsigned)
 // CHECKS: [[META9]] = !DIGlobalVariableExpression(var: [[META10:![0-9]+]], 
expr: !DIExpression())
 // CHECKS: [[META10]] = distinct !DIGlobalVariable(name: "sk", scope: 
[[META2]], file: [[META7]], line: 12, type: [[META8]], isLocal: false, 
isDefinition: true)
@@ -67,14 +67,15 @@ void testshortmul(void) {
 // CHECKS: [[SHORT_TBAA21]] = !{[[META22:![0-9]+]], [[META22]], i64 0}
 // CHECKS: [[META22]] = !{!"short", [[META15]], i64 0}
 // CHECKS: [[DBG23]] = !DILocation(line: 47, column: 13, scope: [[DBG17]])
-// CHECKS: [[DBG24]] = !DILocation(line: 0, scope: [[META25:![0-9]+]], 
inlinedAt: [[META27:![0-9]+]])
-// CHECKS: [[META25]] = distinct !DISubprogram(name: 
"__ubsan_check_mul_overflow", scope: [[META7]], file: [[META7]], type: 
[[META26:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: 
[[META2]])
-// CHECKS: [[META26]] = !DISubroutineType(types: null)
-// CHECKS: [[META27]] = !DILocation(line: 47, column: 11, scope: [[DBG17]])
-// CHECKS: [[META28]] = !{}
-// CHECKS: [[PROF29]] = !{!"branch_weights", i32 1, i32 1048575}
-// CHECKS: [[DBG30]] = !DILocation(line: 47, column: 6, scope: [[DBG17]])
-// CHECKS: [[DBG31]] = !DILocation(line: 48, column: 1, scope: [[DBG17]])
+// CHECKS: [[DBG24]] = !DILocation(line: 0, scope: [[META25:![0-9]+]], 
inlinedAt: [[META28:![0-9]+]])
+// CHECKS: [[META25]] = distinct !DISubprogram(name: 
"__ubsan_check_mul_overflow", scope: [[META26:![0-9]+]], file: [[META26]], 
type: [[META27:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, 
unit: [[META2]])
+// CHECKS: [[META26]] = !DIFile(filename: "{{.*}}ubsan_interface.h", 
directory: {{.*}})
+// CHECKS: [[META27]] = !DISubroutineType(types: null)
+// CHECKS: [[META28]] = !DILocation(line: 47, column: 11, scope: [[DBG17]])
+// CHECKS: [[META29]] = !{}
+// CHECKS: [[PROF30]] = !{!"branch_weights", i32 1, i32 1048575}
+// CHECKS: [[DBG31]] = !DILocation(line: 47, column: 6, scope: [[DBG17]])
+// CHECKS: [[DBG32]] = !DILocation(line: 48, column: 1, scope: [[DBG17]])
 //.
 // CHECKU: [[META0:![0-9]+]] = !DIGlobalVariableExpression(var: 
[[META1:![0-9]+]], expr: !DIExpression())
 // CHECKU: [[META1]] = distinct !DIGlobalVariable(name: "sj", scope: 
[[META2:![0-9]+]], file: [[META7:![0-9]+]], line: 12, type: [[META8:![0-9]+]], 
isLocal: false, isDefinition: true)
@@ -83,7 +84,7 @@ void testshortmul(void) {
 // CHECKU: [[META4]] = !{[[META5:![0-9]+]], [[META0]], [[META9:![0-9]+]]}
 // CHECKU: [[META5]] = !DIGlobalVariableExpression(var: [[META6:![0-9]+]], 
expr: !DIExpression())
 // CHECKU: [[META6]] = distinct !DIGlobalVariable(name: "si", scope: 
[[META2]], file: [[META7]], line: 12, type: [[META8]], isLocal: false, 
isDefinition: true)
-// CHECKU: [[META7]] = !DIFile(filename: 
"{{.*}}unsigned-promotion-debuginfo.c", directory: {{.*}})
+// CHECKU: [[META7]] = !DIFile(filename: "unsigned-promotion-debuginfo.c", 
directory: "")
 // CHECKU: [[META8]] = !DIBasicType(name: "unsigned short", size: 16, 
encoding: DW_ATE_unsigned)
 // CHECKU: [[META9]] = !DIGlobalVariableExpression(var: [[META10:![0-9]+]], 
expr: !DIExpression())
 // CHECKU: [[META10]] = distinct !DIGlobalVariable(name: "sk", scope: 
[[META2]], file: [[META7]], line: 12, type: [[META8]], isLocal: false, 
isDefinition: true)

>From 788f82041a777115db9309ef2321163db7e14a33 Mon Sep 17 00:00:00 2001
From: Vitaly Buka <[email protected]>
Date: Thu, 11 Dec 2025 15:55:45 -0800
Subject: [PATCH 2/2] comment

Created using spr 1.3.7
---
 clang/lib/CodeGen/CGDebugInfo.cpp | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp 
b/clang/lib/CodeGen/CGDebugInfo.cpp
index f4f0424d319d0..2a14678a01597 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -6651,8 +6651,12 @@ llvm::DILocation 
*CodeGenFunction::SanitizerAnnotateDebugInfo(
     Label = SanitizerHandlerToCheckLabel(Handler);
 
   if (any_of(Ordinals, [&](auto Ord) { return AnnotateDebugInfo.has(Ord); })) {
+    // Use ubsan header file to have the same filename for all checks. There is
+    // noting special in that file, we just want to make tools to count all
+    // syntetic functions of a check as the same.
     llvm::DIFile *File = llvm::DIFile::get(CGM.getLLVMContext(),
-                                           "ubsan_interface.h", "sanitizer");
+                                           /*Filename=*/"ubsan_interface.h",
+                                           /*Directory=*/"sanitizer");
     return DI->CreateSyntheticInlineAt(CheckDebugLoc, Label, File);
   }
 

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to