https://github.com/anthonyhatran updated 
https://github.com/llvm/llvm-project/pull/145967

>From b7a68efce92eafcfb05e0fc9763303dc85fb4c78 Mon Sep 17 00:00:00 2001
From: Anthony Tran <anthonyt...@anthonys-air.lan>
Date: Thu, 26 Jun 2025 12:40:05 -0700
Subject: [PATCH 1/3] Addressed most of Dan's comments and added remaining test
 cases

---
 clang/lib/CodeGen/CGExpr.cpp                  | 107 ++++++++++++++++++
 .../CodeGen/ubsan-trap-reason-add-overflow.c  |  10 ++
 .../ubsan-trap-reason-alignment-assumption.c  |  14 +++
 .../ubsan-trap-reason-builtin-unreachable.c   |  11 ++
 .../ubsan-trap-reason-cfi-check-fail.c        |  27 +++++
 .../ubsan-trap-reason-div-rem-overflow.c      |  10 ++
 ...an-trap-reason-dynamic-type-cache-miss.cpp |  23 ++++
 .../ubsan-trap-reason-float-cast-overflow.c   |  10 ++
 ...ubsan-trap-reason-function-type-mismatch.c |  16 +++
 .../ubsan-trap-reason-implicit-conversion.c   |  13 +++
 .../ubsan-trap-reason-invalid-builtin.c       |  11 ++
 .../ubsan-trap-reason-invalid-objc-cast.m     |  31 +++++
 .../ubsan-trap-reason-load-invalid-value.c    |  15 +++
 .../ubsan-trap-reason-missing-return.cpp      |  12 ++
 .../CodeGen/ubsan-trap-reason-mul-overflow.c  |  10 ++
 .../ubsan-trap-reason-negate-overflow.c       |  12 ++
 .../CodeGen/ubsan-trap-reason-nonnull-arg.c   |  16 +++
 .../ubsan-trap-reason-nonnull-return.c        |  15 +++
 .../ubsan-trap-reason-nullability-arg.c       |  18 +++
 .../ubsan-trap-reason-nullability-return.c    |  18 +++
 .../CodeGen/ubsan-trap-reason-out-of-bounds.c |  12 ++
 .../ubsan-trap-reason-pointer-overflow.c      |  16 +++
 .../ubsan-trap-reason-shift-out-of-bounds.c   |  12 ++
 .../CodeGen/ubsan-trap-reason-sub-overflow.c  |  10 ++
 .../CodeGen/ubsan-trap-reason-type-mismatch.c |  11 ++
 ...ubsan-trap-reason-vla-bound-not-positive.c |  14 +++
 26 files changed, 474 insertions(+)
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-add-overflow.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-alignment-assumption.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-builtin-unreachable.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-cfi-check-fail.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-div-rem-overflow.c
 create mode 100644 
clang/test/CodeGen/ubsan-trap-reason-dynamic-type-cache-miss.cpp
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-float-cast-overflow.c
 create mode 100644 
clang/test/CodeGen/ubsan-trap-reason-function-type-mismatch.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-implicit-conversion.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-invalid-builtin.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-invalid-objc-cast.m
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-load-invalid-value.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-missing-return.cpp
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-mul-overflow.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-negate-overflow.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-nonnull-arg.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-nonnull-return.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-nullability-arg.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-nullability-return.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-out-of-bounds.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-pointer-overflow.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-shift-out-of-bounds.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-sub-overflow.c
 create mode 100644 clang/test/CodeGen/ubsan-trap-reason-type-mismatch.c
 create mode 100644 
clang/test/CodeGen/ubsan-trap-reason-vla-bound-not-positive.c

diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index 85c768807572f..34dba66edfac1 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -85,6 +85,97 @@ enum VariableTypeDescriptorKind : uint16_t {
 //                        Miscellaneous Helper Methods
 //===--------------------------------------------------------------------===//
 
+<<<<<<< HEAD
+=======
+static llvm::StringRef GetUBSanTrapForHandler(SanitizerHandler ID) {
+  switch (ID) {
+  case SanitizerHandler::AddOverflow:
+    return "Signed integer addition overflowed";
+
+  case SanitizerHandler::BuiltinUnreachable:
+    return "_builtin_unreachable(), execution reached an unreachable program "
+           "point";
+
+  case SanitizerHandler::CFICheckFail:
+    return "Control flow integrity check failed";
+
+  case SanitizerHandler::DivremOverflow:
+    return "Signed integer divide or remainder overflowed";
+
+  case SanitizerHandler::DynamicTypeCacheMiss:
+    return "Dynamic-type cache miss";
+
+  case SanitizerHandler::FloatCastOverflow:
+    return "Floating-point to integer conversion overflowed";
+
+  case SanitizerHandler::FunctionTypeMismatch:
+    return "Function called with mismatched signature";
+
+  case SanitizerHandler::ImplicitConversion:
+    return "Implicit integer conversion overflowed or lost data";
+
+  case SanitizerHandler::InvalidBuiltin:
+    return "Invalid use of builtin function";
+
+  case SanitizerHandler::InvalidObjCCast:
+    return "Invalid Objective-C cast";
+
+  case SanitizerHandler::LoadInvalidValue:
+    return "Loaded an invalid or uninitialized value for the type";
+
+  case SanitizerHandler::MissingReturn:
+    return "Execution reached the end of a value-returning function without "
+           "returning a value";
+
+  case SanitizerHandler::MulOverflow:
+    return "Signed integer multiplication overflowed";
+
+  case SanitizerHandler::NegateOverflow:
+    return "Signed integer negation overflowed";
+
+  case SanitizerHandler::NullabilityArg:
+    return "Passing null as an argument which is annotated with "
+           "_Nonnull";
+
+  case SanitizerHandler::NullabilityReturn:
+    return "Returning null from a function with a return type annotated with "
+           "_Nonnull";
+
+  case SanitizerHandler::NonnullArg:
+    return "Passing null pointer as an argument which is declared to never be "
+           "null";
+
+  case SanitizerHandler::NonnullReturn:
+    return "Returning null pointer from a function which is declared to never "
+           "return null";
+
+  case SanitizerHandler::OutOfBounds:
+    return "Array index out of bounds";
+
+  case SanitizerHandler::PointerOverflow:
+    return "Pointer arithmetic overflowed bounds";
+
+  case SanitizerHandler::ShiftOutOfBounds:
+    return "Shift exponent is too large for the type";
+
+  case SanitizerHandler::SubOverflow:
+    return "Signed integer subtraction overflowed";
+
+  case SanitizerHandler::TypeMismatch:
+    return "Type mismatch in operation";
+
+  case SanitizerHandler::AlignmentAssumption:
+    return "Alignment assumption violated";
+
+  case SanitizerHandler::VLABoundNotPositive:
+    return "Variable length array bound evaluates to non-positive value";
+
+  case SanitizerHandler::BoundsSafety:
+    return {};
+  }
+}
+
+>>>>>>> 592f9d2f8f85 (Addressed most of Dan's comments and added remaining 
test cases)
 /// CreateTempAlloca - This creates a alloca and inserts it into the entry
 /// block.
 RawAddress
@@ -4051,6 +4142,17 @@ void CodeGenFunction::EmitTrapCheck(llvm::Value *Checked,
 
   llvm::BasicBlock *&TrapBB = TrapBBs[CheckHandlerID];
 
+<<<<<<< HEAD
+=======
+  llvm::DILocation *TrapLocation = Builder.getCurrentDebugLocation();
+  llvm::StringRef TrapMessage = GetUBSanTrapForHandler(CheckHandlerID);
+
+  if (getDebugInfo()) {
+    TrapLocation = getDebugInfo()->CreateTrapFailureMessageFor(
+        TrapLocation, "Undefined Behavior Sanitizer", TrapMessage);
+  }
+
+>>>>>>> 592f9d2f8f85 (Addressed most of Dan's comments and added remaining 
test cases)
   NoMerge = NoMerge || !CGM.getCodeGenOpts().OptimizationLevel ||
             (CurCodeDecl && CurCodeDecl->hasAttr<OptimizeNoneAttr>());
 
@@ -4059,8 +4161,13 @@ void CodeGenFunction::EmitTrapCheck(llvm::Value *Checked,
     auto Call = TrapBB->begin();
     assert(isa<llvm::CallInst>(Call) && "Expected call in trap BB");
 
+<<<<<<< HEAD
     Call->applyMergedLocation(Call->getDebugLoc(),
                               Builder.getCurrentDebugLocation());
+=======
+    Call->applyMergedLocation(Call->getDebugLoc(), TrapLocation);
+
+>>>>>>> 592f9d2f8f85 (Addressed most of Dan's comments and added remaining 
test cases)
     Builder.CreateCondBr(Checked, Cont, TrapBB,
                          MDHelper.createLikelyBranchWeights());
   } else {
diff --git a/clang/test/CodeGen/ubsan-trap-reason-add-overflow.c 
b/clang/test/CodeGen/ubsan-trap-reason-add-overflow.c
new file mode 100644
index 0000000000000..4b3881ae9c7dc
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-add-overflow.c
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=signed-integer-overflow 
-fsanitize-trap=signed-integer-overflow -emit-llvm %s -o - | FileCheck %s
+
+int add_overflow(int a, int b) {
+  return a + b;
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 0) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
diff --git a/clang/test/CodeGen/ubsan-trap-reason-alignment-assumption.c 
b/clang/test/CodeGen/ubsan-trap-reason-alignment-assumption.c
new file mode 100644
index 0000000000000..a41a238eaf129
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-alignment-assumption.c
@@ -0,0 +1,14 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=alignment -fsanitize-trap=alignment -emit-llvm %s -o - | 
FileCheck %s
+
+#include <stdint.h>
+int32_t* get_int(void) __attribute__((assume_aligned(16)));
+
+void retrieve_int(void) {
+    int* i = get_int();
+    *i = 7;
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 23) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-builtin-unreachable.c 
b/clang/test/CodeGen/ubsan-trap-reason-builtin-unreachable.c
new file mode 100644
index 0000000000000..a85d92319cb7b
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-builtin-unreachable.c
@@ -0,0 +1,11 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=unreachable -fsanitize-trap=unreachable -emit-llvm %s -o - 
| FileCheck %s
+
+int call_builtin_unreachable()
+{
+    __builtin_unreachable();
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 1) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-cfi-check-fail.c 
b/clang/test/CodeGen/ubsan-trap-reason-cfi-check-fail.c
new file mode 100644
index 0000000000000..da6c9bc7fb2f9
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-cfi-check-fail.c
@@ -0,0 +1,27 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=cfi-icall -fsanitize-trap=cfi-icall -emit-llvm %s -o - | 
FileCheck %s
+
+typedef int (*fp_t)(int);
+
+int good(int x) {
+    return x + 1;
+}
+
+int bad(void) {
+    return 0;
+}
+
+int cfi_trigger(int a) {
+    fp_t p = good;
+    int r1 = p(a);
+
+    p = (fp_t)(void*)bad;
+    int r2 = p(a);
+
+    return r1 + r2;
+}
+
+
+// CHECK: call void @llvm.ubsantrap(i8 2) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-div-rem-overflow.c 
b/clang/test/CodeGen/ubsan-trap-reason-div-rem-overflow.c
new file mode 100644
index 0000000000000..f98927399272f
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-div-rem-overflow.c
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=signed-integer-overflow 
-fsanitize-trap=signed-integer-overflow -emit-llvm %s -o - | FileCheck %s
+
+int div_rem_overflow(int a, int b) {
+    return a / b;
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 3) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-dynamic-type-cache-miss.cpp 
b/clang/test/CodeGen/ubsan-trap-reason-dynamic-type-cache-miss.cpp
new file mode 100644
index 0000000000000..e279626f09227
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-dynamic-type-cache-miss.cpp
@@ -0,0 +1,23 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=vptr -fsanitize-trap=vptr -emit-llvm %s -o - | FileCheck %s
+
+struct A {
+  virtual void foo();
+};
+struct B {
+  virtual void bar();
+};
+
+void A::foo() { }
+void B::bar() { }
+
+int dynamic_type_cache_miss() {
+  B b;
+  A &a = reinterpret_cast<A&>(b);
+  a.foo();
+  return 0;
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 4) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
diff --git a/clang/test/CodeGen/ubsan-trap-reason-float-cast-overflow.c 
b/clang/test/CodeGen/ubsan-trap-reason-float-cast-overflow.c
new file mode 100644
index 0000000000000..0524d8bbf9373
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-float-cast-overflow.c
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=float-cast-overflow -fsanitize-trap=float-cast-overflow 
-emit-llvm %s -o - | FileCheck %s
+
+int f(float x) { 
+  return (int)x; 
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 5) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-function-type-mismatch.c 
b/clang/test/CodeGen/ubsan-trap-reason-function-type-mismatch.c
new file mode 100644
index 0000000000000..8811a064a51c0
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-function-type-mismatch.c
@@ -0,0 +1,16 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=function -fsanitize-trap=function -emit-llvm %s -o - | 
FileCheck %s
+
+void target() { }
+
+int function_type_mismatch() {
+    int (*fp_int)(int);
+
+    fp_int = (int (*)(int))(void *)target;
+
+    return fp_int(42);
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 6) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-implicit-conversion.c 
b/clang/test/CodeGen/ubsan-trap-reason-implicit-conversion.c
new file mode 100644
index 0000000000000..6e98aeacb17c9
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-implicit-conversion.c
@@ -0,0 +1,13 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=implicit-unsigned-integer-truncation 
-fsanitize-trap=implicit-unsigned-integer-truncation -emit-llvm %s -o - | 
FileCheck %s
+
+unsigned long long big; 
+
+unsigned implicit_conversion()
+{
+    return big;
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 7) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-invalid-builtin.c 
b/clang/test/CodeGen/ubsan-trap-reason-invalid-builtin.c
new file mode 100644
index 0000000000000..4703518e11e6e
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-invalid-builtin.c
@@ -0,0 +1,11 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=builtin -fsanitize-trap=builtin -emit-llvm %s -o - | 
FileCheck %s
+
+unsigned invalid_builtin(unsigned x)
+{
+    return __builtin_clz(x);
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 8) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-invalid-objc-cast.m 
b/clang/test/CodeGen/ubsan-trap-reason-invalid-objc-cast.m
new file mode 100644
index 0000000000000..f7460b186b9b3
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-invalid-objc-cast.m
@@ -0,0 +1,31 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=objc-cast -fsanitize-trap=objc-cast -emit-llvm %s -o - | 
FileCheck %s
+
+@interface NSFastEnumerationState
+@end
+
+#define NSUInteger unsigned int
+
+@interface NSArray
++(NSArray*) arrayWithObjects: (id) first, ...;
+- (NSUInteger) countByEnumeratingWithState:(NSFastEnumerationState *) state 
+                                   objects:(id[]) buffer 
+                                     count:(NSUInteger) len;
+-(unsigned) count;
+@end
+@interface NSString
+-(const char*) cString;
+@end
+
+void receive_NSString(NSString*);
+
+void t0(void) {
+  NSArray *array = [NSArray arrayWithObjects: @"0", @"1", (void*)0];
+  for (NSString *i in array) {
+    receive_NSString(i);
+  }
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 9) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-load-invalid-value.c 
b/clang/test/CodeGen/ubsan-trap-reason-load-invalid-value.c
new file mode 100644
index 0000000000000..e751d5135a50e
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-load-invalid-value.c
@@ -0,0 +1,15 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=bool -fsanitize-trap=bool -emit-llvm %s -o - | FileCheck %s
+
+#include <stdbool.h> 
+
+unsigned char bad_byte;
+
+bool load_invalid_value()
+{
+    return *((bool *)&bad_byte);
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 10) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-missing-return.cpp 
b/clang/test/CodeGen/ubsan-trap-reason-missing-return.cpp
new file mode 100644
index 0000000000000..d97523e503eff
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-missing-return.cpp
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=return -fsanitize-trap=return -emit-llvm %s -o - | 
FileCheck %s
+
+int missing_return(int x)
+{
+    if (x > 0)
+        return x;
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 11) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-mul-overflow.c 
b/clang/test/CodeGen/ubsan-trap-reason-mul-overflow.c
new file mode 100644
index 0000000000000..5250e70e61b43
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-mul-overflow.c
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=signed-integer-overflow 
-fsanitize-trap=signed-integer-overflow -emit-llvm %s -o - | FileCheck %s
+
+int mul_overflow(int a, int b) {
+    return a * b;
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 12) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-negate-overflow.c 
b/clang/test/CodeGen/ubsan-trap-reason-negate-overflow.c
new file mode 100644
index 0000000000000..4273efaced40d
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-negate-overflow.c
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=signed-integer-overflow 
-fsanitize-trap=signed-integer-overflow -emit-llvm %s -o - | FileCheck %s
+
+int negate_overflow()
+{
+    int x;
+    return -x;
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 13) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-nonnull-arg.c 
b/clang/test/CodeGen/ubsan-trap-reason-nonnull-arg.c
new file mode 100644
index 0000000000000..e0849c6b81c32
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-nonnull-arg.c
@@ -0,0 +1,16 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=nonnull-attribute -fsanitize-trap=nonnull-attribute 
-emit-llvm %s -o - | FileCheck %s
+
+__attribute__((nonnull))
+void nonnull_arg(int *p) { 
+    (void)p; 
+}
+
+void trigger_nonnull_arg()
+{
+    nonnull_arg(0);
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 16) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-nonnull-return.c 
b/clang/test/CodeGen/ubsan-trap-reason-nonnull-return.c
new file mode 100644
index 0000000000000..b513957775c86
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-nonnull-return.c
@@ -0,0 +1,15 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=returns-nonnull-attribute 
-fsanitize-trap=returns-nonnull-attribute -emit-llvm %s -o - | FileCheck %s
+
+__attribute__((returns_nonnull))
+int* must_return_nonnull(int bad)
+{
+    if (bad)
+        return 0;
+    static int x = 1;
+    return &x;
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 17) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-nullability-arg.c 
b/clang/test/CodeGen/ubsan-trap-reason-nullability-arg.c
new file mode 100644
index 0000000000000..e8012d05e3741
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-nullability-arg.c
@@ -0,0 +1,18 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=nullability-arg -fsanitize-trap=nullability-arg -emit-llvm 
%s -o - | FileCheck %s
+
+#include <stddef.h>
+
+int nullability_arg(int* _Nonnull p)
+{
+    return *p;
+}
+
+int trigger_nullability_arg()
+{
+    return nullability_arg(NULL);
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 14) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-nullability-return.c 
b/clang/test/CodeGen/ubsan-trap-reason-nullability-return.c
new file mode 100644
index 0000000000000..e5cad805fa968
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-nullability-return.c
@@ -0,0 +1,18 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=nullability-return -fsanitize-trap=nullability-return 
-emit-llvm %s -o - | FileCheck %s
+
+#include <stdbool.h>
+#include <stddef.h>
+
+int* _Nonnull nullability_return(bool fail)
+{
+    if (fail)
+        return NULL;
+
+    static int x = 0;
+    return &x;
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 15) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-out-of-bounds.c 
b/clang/test/CodeGen/ubsan-trap-reason-out-of-bounds.c
new file mode 100644
index 0000000000000..afaeed4193907
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-out-of-bounds.c
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=array-bounds -fsanitize-trap=array-bounds -emit-llvm %s -o 
- | FileCheck %s
+
+int out_of_bounds()
+{
+    int a[1] = {0};
+    return a[1];
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 18) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-pointer-overflow.c 
b/clang/test/CodeGen/ubsan-trap-reason-pointer-overflow.c
new file mode 100644
index 0000000000000..f219134020eb7
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-pointer-overflow.c
@@ -0,0 +1,16 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=pointer-overflow -fsanitize-trap=pointer-overflow 
-emit-llvm %s -o - | FileCheck %s
+
+#include <stddef.h>
+#include <stdint.h>
+
+int* pointer_overflow(void)
+{
+    int buf[4];
+    volatile size_t n = (SIZE_MAX / sizeof(int)) - 1;
+    return buf + n;
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 19) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-shift-out-of-bounds.c 
b/clang/test/CodeGen/ubsan-trap-reason-shift-out-of-bounds.c
new file mode 100644
index 0000000000000..287f4d500922f
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-shift-out-of-bounds.c
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=shift-base -fsanitize-trap=shift-base -emit-llvm %s -o - | 
FileCheck %s
+
+int shift_out_of_bounds()
+{
+    int sh = 32;
+    return 1 << sh;
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 20) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-sub-overflow.c 
b/clang/test/CodeGen/ubsan-trap-reason-sub-overflow.c
new file mode 100644
index 0000000000000..76e59996997f5
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-sub-overflow.c
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=signed-integer-overflow 
-fsanitize-trap=signed-integer-overflow -emit-llvm %s -o - | FileCheck %s
+
+int sub_overflow(int a, int b) {
+    return a - b;
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 21) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-type-mismatch.c 
b/clang/test/CodeGen/ubsan-trap-reason-type-mismatch.c
new file mode 100644
index 0000000000000..6a9f755f4e485
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-type-mismatch.c
@@ -0,0 +1,11 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=alignment -fsanitize-trap=alignment -emit-llvm %s -o - | 
FileCheck %s
+
+int type_mismatch(int *p)
+{
+    return *p;
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 22) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-vla-bound-not-positive.c 
b/clang/test/CodeGen/ubsan-trap-reason-vla-bound-not-positive.c
new file mode 100644
index 0000000000000..23fea161feea4
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-trap-reason-vla-bound-not-positive.c
@@ -0,0 +1,14 @@
+// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 
-debug-info-kind=standalone -dwarf-version=5 \
+// RUN: -fsanitize=vla-bound -fsanitize-trap=vla-bound -emit-llvm %s -o - | 
FileCheck %s
+
+int n = 0;
+
+int vla_bound_not_positive()
+{
+    int a[n];
+    return sizeof a;
+}
+
+// CHECK: call void @llvm.ubsantrap(i8 24) {{.*}}!dbg [[LOC:![0-9]+]]
+// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file

>From 2f5faa30d2cbf84e5cc6e8df5160774f8a7a8617 Mon Sep 17 00:00:00 2001
From: Anthony Tran <anthonyt...@anthonys-air.lan>
Date: Thu, 26 Jun 2025 13:44:43 -0700
Subject: [PATCH 2/3] Resolve leftover conflict markers

---
 clang/lib/CodeGen/CGExpr.cpp | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index 34dba66edfac1..34fd8b4aef0f2 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -85,8 +85,6 @@ enum VariableTypeDescriptorKind : uint16_t {
 //                        Miscellaneous Helper Methods
 //===--------------------------------------------------------------------===//
 
-<<<<<<< HEAD
-=======
 static llvm::StringRef GetUBSanTrapForHandler(SanitizerHandler ID) {
   switch (ID) {
   case SanitizerHandler::AddOverflow:
@@ -175,7 +173,6 @@ static llvm::StringRef 
GetUBSanTrapForHandler(SanitizerHandler ID) {
   }
 }
 
->>>>>>> 592f9d2f8f85 (Addressed most of Dan's comments and added remaining 
test cases)
 /// CreateTempAlloca - This creates a alloca and inserts it into the entry
 /// block.
 RawAddress
@@ -4142,8 +4139,6 @@ void CodeGenFunction::EmitTrapCheck(llvm::Value *Checked,
 
   llvm::BasicBlock *&TrapBB = TrapBBs[CheckHandlerID];
 
-<<<<<<< HEAD
-=======
   llvm::DILocation *TrapLocation = Builder.getCurrentDebugLocation();
   llvm::StringRef TrapMessage = GetUBSanTrapForHandler(CheckHandlerID);
 
@@ -4152,7 +4147,6 @@ void CodeGenFunction::EmitTrapCheck(llvm::Value *Checked,
         TrapLocation, "Undefined Behavior Sanitizer", TrapMessage);
   }
 
->>>>>>> 592f9d2f8f85 (Addressed most of Dan's comments and added remaining 
test cases)
   NoMerge = NoMerge || !CGM.getCodeGenOpts().OptimizationLevel ||
             (CurCodeDecl && CurCodeDecl->hasAttr<OptimizeNoneAttr>());
 
@@ -4161,13 +4155,8 @@ void CodeGenFunction::EmitTrapCheck(llvm::Value *Checked,
     auto Call = TrapBB->begin();
     assert(isa<llvm::CallInst>(Call) && "Expected call in trap BB");
 
-<<<<<<< HEAD
-    Call->applyMergedLocation(Call->getDebugLoc(),
-                              Builder.getCurrentDebugLocation());
-=======
     Call->applyMergedLocation(Call->getDebugLoc(), TrapLocation);
 
->>>>>>> 592f9d2f8f85 (Addressed most of Dan's comments and added remaining 
test cases)
     Builder.CreateCondBr(Checked, Cont, TrapBB,
                          MDHelper.createLikelyBranchWeights());
   } else {

>From 338505e7ea21640d97f26b69b2054ea31a76caf5 Mon Sep 17 00:00:00 2001
From: Anthony Tran <anthonyt...@anthonys-air.lan>
Date: Thu, 3 Jul 2025 22:07:39 -0700
Subject: [PATCH 3/3] Pass all test cases, added comment on BoundsSafety in
 switch statement, make adjustments to EmitTrapCheck

---
 clang/lib/CodeGen/CGExpr.cpp                  |  21 +++-
 .../test/CodeGen/bounds-checking-debuginfo.c  |  18 +--
 .../CodeGen/cfi-icall-generalize-debuginfo.c  |  20 +--
 .../CodeGen/cfi-icall-normalize2-debuginfo.c  | 118 +++++++++---------
 clang/test/CodeGen/ubsan-trap-debugloc.c      |  10 +-
 .../CodeGen/ubsan-trap-reason-add-overflow.c  |   2 +-
 .../ubsan-trap-reason-alignment-assumption.c  |   2 +-
 .../ubsan-trap-reason-builtin-unreachable.c   |   2 +-
 .../ubsan-trap-reason-cfi-check-fail.c        |   2 +-
 .../ubsan-trap-reason-div-rem-overflow.c      |   2 +-
 ...an-trap-reason-dynamic-type-cache-miss.cpp |   2 +-
 .../ubsan-trap-reason-float-cast-overflow.c   |   2 +-
 ...ubsan-trap-reason-function-type-mismatch.c |   2 +-
 .../ubsan-trap-reason-implicit-conversion.c   |   2 +-
 .../ubsan-trap-reason-invalid-builtin.c       |   2 +-
 .../ubsan-trap-reason-invalid-objc-cast.m     |   2 +-
 .../ubsan-trap-reason-load-invalid-value.c    |   2 +-
 .../ubsan-trap-reason-missing-return.cpp      |   2 +-
 .../CodeGen/ubsan-trap-reason-mul-overflow.c  |   2 +-
 .../ubsan-trap-reason-negate-overflow.c       |   2 +-
 .../CodeGen/ubsan-trap-reason-nonnull-arg.c   |   2 +-
 .../ubsan-trap-reason-nonnull-return.c        |   2 +-
 .../ubsan-trap-reason-nullability-arg.c       |   2 +-
 .../ubsan-trap-reason-nullability-return.c    |   2 +-
 .../CodeGen/ubsan-trap-reason-out-of-bounds.c |   2 +-
 .../ubsan-trap-reason-pointer-overflow.c      |   2 +-
 .../ubsan-trap-reason-shift-out-of-bounds.c   |   2 +-
 .../CodeGen/ubsan-trap-reason-sub-overflow.c  |   2 +-
 .../CodeGen/ubsan-trap-reason-type-mismatch.c |   2 +-
 ...ubsan-trap-reason-vla-bound-not-positive.c |   2 +-
 30 files changed, 134 insertions(+), 103 deletions(-)

diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index 34fd8b4aef0f2..71e17da1cb4ff 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -101,7 +101,8 @@ static llvm::StringRef 
GetUBSanTrapForHandler(SanitizerHandler ID) {
     return "Signed integer divide or remainder overflowed";
 
   case SanitizerHandler::DynamicTypeCacheMiss:
-    return "Dynamic-type cache miss";
+    return "Dynamic type cache miss, member call made on an object whose "
+           "dynamic type differs from the expected type";
 
   case SanitizerHandler::FloatCastOverflow:
     return "Floating-point to integer conversion overflowed";
@@ -169,6 +170,7 @@ static llvm::StringRef 
GetUBSanTrapForHandler(SanitizerHandler ID) {
     return "Variable length array bound evaluates to non-positive value";
 
   case SanitizerHandler::BoundsSafety:
+    // Not added as of current, will be added in future patch.
     return {};
   }
 }
@@ -4142,7 +4144,20 @@ void CodeGenFunction::EmitTrapCheck(llvm::Value *Checked,
   llvm::DILocation *TrapLocation = Builder.getCurrentDebugLocation();
   llvm::StringRef TrapMessage = GetUBSanTrapForHandler(CheckHandlerID);
 
-  if (getDebugInfo()) {
+  // Explicitly used to prevent infinite wrapping in cfi-check-fail-debuginfo.c
+  // test
+  auto NeedsAnnotation = [](llvm::DILocation *Loc) {
+    if (!Loc)
+      return false;
+    if (Loc->getLine() != 0)
+      return true;
+    if (auto *SubProgram =
+            llvm::dyn_cast_or_null<llvm::DISubprogram>(Loc->getScope()))
+      return (SubProgram->getFile() != nullptr);
+    return false;
+  };
+
+  if (getDebugInfo() && NeedsAnnotation(TrapLocation) && !TrapMessage.empty()) 
{
     TrapLocation = getDebugInfo()->CreateTrapFailureMessageFor(
         TrapLocation, "Undefined Behavior Sanitizer", TrapMessage);
   }
@@ -4165,6 +4180,8 @@ void CodeGenFunction::EmitTrapCheck(llvm::Value *Checked,
                          MDHelper.createLikelyBranchWeights());
     EmitBlock(TrapBB);
 
+    ApplyDebugLocation applyTrapDI(*this, TrapLocation);
+
     llvm::CallInst *TrapCall =
         Builder.CreateCall(CGM.getIntrinsic(llvm::Intrinsic::ubsantrap),
                            llvm::ConstantInt::get(CGM.Int8Ty, CheckHandlerID));
diff --git a/clang/test/CodeGen/bounds-checking-debuginfo.c 
b/clang/test/CodeGen/bounds-checking-debuginfo.c
index 74c06665dfe02..4f0f06f144f3c 100644
--- a/clang/test/CodeGen/bounds-checking-debuginfo.c
+++ b/clang/test/CodeGen/bounds-checking-debuginfo.c
@@ -25,13 +25,13 @@ void d(double*);
 // 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:       [[TRAP]]:
-// CHECK-TRAP-NEXT:    call void @llvm.ubsantrap(i8 18) #[[ATTR3:[0-9]+]], 
!dbg [[DBG23]], !nosanitize [[META10]]
-// CHECK-TRAP-NEXT:    unreachable, !dbg [[DBG23]], !nosanitize [[META10]]
+// 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:       [[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 [[DBG28:![0-9]+]]
+// CHECK-TRAP-NEXT:    ret double [[TMP2]], !dbg [[DBG30:![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]+]] {
@@ -68,9 +68,9 @@ 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: [[META1]] = !DIFile(filename: "{{.*}}<stdin>", directory: 
{{.*}})
 // CHECK-TRAP: [[DBG4]] = distinct !DISubprogram(name: "f1", scope: 
[[META5:![0-9]+]], file: [[META5]], line: 63, type: [[META6:![0-9]+]], 
scopeLine: 63, 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)
@@ -93,12 +93,14 @@ double f1(int b, int i) {
 // CHECK-TRAP: [[META25]] = !DISubroutineType(types: null)
 // CHECK-TRAP: [[DBG26]] = !DILocation(line: 66, column: 10, scope: [[DBG4]])
 // CHECK-TRAP: [[PROF27]] = !{!"branch_weights", i32 1048575, i32 1}
-// CHECK-TRAP: [[DBG28]] = !DILocation(line: 66, column: 3, scope: [[DBG4]])
+// 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: 66, 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: [[META1]] = !DIFile(filename: "{{.*}}<stdin>", directory: 
{{.*}})
 // CHECK-NOTRAP: [[DBG4]] = distinct !DISubprogram(name: "f1", scope: 
[[META5:![0-9]+]], file: [[META5]], line: 63, type: [[META6:![0-9]+]], 
scopeLine: 63, 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)
diff --git a/clang/test/CodeGen/cfi-icall-generalize-debuginfo.c 
b/clang/test/CodeGen/cfi-icall-generalize-debuginfo.c
index 304b60539c3d1..c82748c14928c 100644
--- a/clang/test/CodeGen/cfi-icall-generalize-debuginfo.c
+++ b/clang/test/CodeGen/cfi-icall-generalize-debuginfo.c
@@ -30,11 +30,11 @@ int** f(const char *a, const char **b) {
 // 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:       [[TRAP]]:
-// UNGENERALIZED-NEXT:    tail call void @llvm.ubsantrap(i8 2) 
#[[ATTR4:[0-9]+]], !dbg [[DBG34]], !nosanitize [[META38]]
-// UNGENERALIZED-NEXT:    unreachable, !dbg [[DBG34]], !nosanitize [[META38]]
+// UNGENERALIZED-NEXT:    tail call void @llvm.ubsantrap(i8 2) 
#[[ATTR4:[0-9]+]], !dbg [[DBG40:![0-9]+]], !nosanitize [[META38]]
+// UNGENERALIZED-NEXT:    unreachable, !dbg [[DBG40]], !nosanitize [[META38]]
 // 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 [[DBG40:![0-9]+]]
+// UNGENERALIZED-NEXT:    ret void, !dbg [[DBG42:![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]+]] {
@@ -43,11 +43,11 @@ int** f(const char *a, const char **b) {
 // 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:       [[TRAP]]:
-// GENERALIZED-NEXT:    tail call void @llvm.ubsantrap(i8 2) 
#[[ATTR4:[0-9]+]], !dbg [[DBG34]], !nosanitize [[META38]]
-// GENERALIZED-NEXT:    unreachable, !dbg [[DBG34]], !nosanitize [[META38]]
+// GENERALIZED-NEXT:    tail call void @llvm.ubsantrap(i8 2) 
#[[ATTR4:[0-9]+]], !dbg [[DBG40:![0-9]+]], !nosanitize [[META38]]
+// GENERALIZED-NEXT:    unreachable, !dbg [[DBG40]], !nosanitize [[META38]]
 // 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 [[DBG40:![0-9]+]]
+// GENERALIZED-NEXT:    ret void, !dbg [[DBG42:![0-9]+]]
 //
 void g(int** (*fp)(const char *, const char **)) {
   fp(0, 0);
@@ -90,7 +90,9 @@ void g(int** (*fp)(const char *, const char **)) {
 // UNGENERALIZED: [[DBG37]] = !DILocation(line: 53, column: 3, scope: 
[[DBG25]])
 // UNGENERALIZED: [[META38]] = !{}
 // UNGENERALIZED: [[PROF39]] = !{!"branch_weights", i32 1048575, i32 1}
-// UNGENERALIZED: [[DBG40]] = !DILocation(line: 54, column: 1, scope: 
[[DBG25]])
+// UNGENERALIZED: [[DBG40]] = !DILocation(line: 0, scope: [[META41:![0-9]+]], 
inlinedAt: [[DBG34]])
+// UNGENERALIZED: [[META41]] = 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]])
 //.
 // 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: 
{{.*}})
@@ -128,5 +130,7 @@ void g(int** (*fp)(const char *, const char **)) {
 // GENERALIZED: [[DBG37]] = !DILocation(line: 53, column: 3, scope: [[DBG25]])
 // GENERALIZED: [[META38]] = !{}
 // GENERALIZED: [[PROF39]] = !{!"branch_weights", i32 1048575, i32 1}
-// GENERALIZED: [[DBG40]] = !DILocation(line: 54, column: 1, scope: [[DBG25]])
+// GENERALIZED: [[DBG40]] = !DILocation(line: 0, scope: [[META41:![0-9]+]], 
inlinedAt: [[DBG34]])
+// GENERALIZED: [[META41]] = 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]])
 //.
diff --git a/clang/test/CodeGen/cfi-icall-normalize2-debuginfo.c 
b/clang/test/CodeGen/cfi-icall-normalize2-debuginfo.c
index a2f6ee0c6805c..83ae7a8653a6d 100644
--- a/clang/test/CodeGen/cfi-icall-normalize2-debuginfo.c
+++ b/clang/test/CodeGen/cfi-icall-normalize2-debuginfo.c
@@ -15,50 +15,50 @@
 // 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:       [[TRAP]]:
-// CHECK-NEXT:    tail call void @llvm.ubsantrap(i8 2) #[[ATTR3:[0-9]+]], !dbg 
[[DBG21]], !nosanitize [[META25]]
-// CHECK-NEXT:    unreachable, !dbg [[DBG21]], !nosanitize [[META25]]
+// CHECK-NEXT:    tail call void @llvm.ubsantrap(i8 2) #[[ATTR3:[0-9]+]], !dbg 
[[DBG27:![0-9]+]], !nosanitize [[META25]]
+// CHECK-NEXT:    unreachable, !dbg [[DBG27]], !nosanitize [[META25]]
 // CHECK:       [[CONT]]:
 // CHECK-NEXT:    tail call void [[FN]](i32 noundef [[ARG]]) 
#[[ATTR4:[0-9]+]], !dbg [[DBG24:![0-9]+]]
-// CHECK-NEXT:    ret void, !dbg [[DBG27:![0-9]+]]
+// CHECK-NEXT:    ret void, !dbg [[DBG29:![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 [[DBG28:![0-9]+]] !type 
[[META38:![0-9]+]] !type [[META39:![0-9]+]] {
+// 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-NEXT:  [[ENTRY:.*:]]
-// CHECK-NEXT:      #dbg_value(ptr [[FN]], [[META35:![0-9]+]], 
!DIExpression(), [[META40:![0-9]+]])
-// CHECK-NEXT:      #dbg_value(i32 [[ARG1]], [[META36:![0-9]+]], 
!DIExpression(), [[META40]])
-// CHECK-NEXT:      #dbg_value(i32 [[ARG2]], [[META37:![0-9]+]], 
!DIExpression(), [[META40]])
-// CHECK-NEXT:    [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr [[FN]], 
metadata !"_ZTSFvu3i32S_E.normalized"), !dbg [[DBG41:![0-9]+]], !nosanitize 
[[META25]]
-// CHECK-NEXT:    br i1 [[TMP0]], label %[[CONT:.*]], label %[[TRAP:.*]], !dbg 
[[DBG41]], !prof [[PROF26]], !nosanitize [[META25]]
+// 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:       [[TRAP]]:
-// CHECK-NEXT:    tail call void @llvm.ubsantrap(i8 2) #[[ATTR3]], !dbg 
[[DBG41]], !nosanitize [[META25]]
-// CHECK-NEXT:    unreachable, !dbg [[DBG41]], !nosanitize [[META25]]
+// CHECK-NEXT:    tail call void @llvm.ubsantrap(i8 2) #[[ATTR3]], !dbg 
[[DBG45:![0-9]+]], !nosanitize [[META25]]
+// CHECK-NEXT:    unreachable, !dbg [[DBG45]], !nosanitize [[META25]]
 // CHECK:       [[CONT]]:
-// CHECK-NEXT:    tail call void [[FN]](i32 noundef [[ARG1]], i32 noundef 
[[ARG2]]) #[[ATTR4]], !dbg [[DBG42:![0-9]+]]
-// CHECK-NEXT:    ret void, !dbg [[DBG43:![0-9]+]]
+// 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]+]]
 //
 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 
[[DBG44:![0-9]+]] !type [[META55:![0-9]+]] !type [[META56:![0-9]+]] {
+// 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-NEXT:  [[ENTRY:.*:]]
-// CHECK-NEXT:      #dbg_value(ptr [[FN]], [[META51:![0-9]+]], 
!DIExpression(), [[META57:![0-9]+]])
-// CHECK-NEXT:      #dbg_value(i32 [[ARG1]], [[META52:![0-9]+]], 
!DIExpression(), [[META57]])
-// CHECK-NEXT:      #dbg_value(i32 [[ARG2]], [[META53:![0-9]+]], 
!DIExpression(), [[META57]])
-// CHECK-NEXT:      #dbg_value(i32 [[ARG3]], [[META54:![0-9]+]], 
!DIExpression(), [[META57]])
-// CHECK-NEXT:    [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr [[FN]], 
metadata !"_ZTSFvu3i32S_S_E.normalized"), !dbg [[DBG58:![0-9]+]], !nosanitize 
[[META25]]
-// CHECK-NEXT:    br i1 [[TMP0]], label %[[CONT:.*]], label %[[TRAP:.*]], !dbg 
[[DBG58]], !prof [[PROF26]], !nosanitize [[META25]]
+// 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:       [[TRAP]]:
-// CHECK-NEXT:    tail call void @llvm.ubsantrap(i8 2) #[[ATTR3]], !dbg 
[[DBG58]], !nosanitize [[META25]]
-// CHECK-NEXT:    unreachable, !dbg [[DBG58]], !nosanitize [[META25]]
+// CHECK-NEXT:    tail call void @llvm.ubsantrap(i8 2) #[[ATTR3]], !dbg 
[[DBG63:![0-9]+]], !nosanitize [[META25]]
+// CHECK-NEXT:    unreachable, !dbg [[DBG63]], !nosanitize [[META25]]
 // CHECK:       [[CONT]]:
-// CHECK-NEXT:    tail call void [[FN]](i32 noundef [[ARG1]], i32 noundef 
[[ARG2]], i32 noundef [[ARG3]]) #[[ATTR4]], !dbg [[DBG59:![0-9]+]]
-// CHECK-NEXT:    ret void, !dbg [[DBG60:![0-9]+]]
+// 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]+]]
 //
 void baz(void (*fn)(int, int, int), int arg1, int arg2, int arg3) {
     fn(arg1, arg2, arg3);
@@ -87,38 +87,42 @@ void baz(void (*fn)(int, int, int), int arg1, int arg2, int 
arg3) {
 // CHECK: [[DBG24]] = !DILocation(line: 25, column: 5, scope: [[DBG7]])
 // CHECK: [[META25]] = !{}
 // CHECK: [[PROF26]] = !{!"branch_weights", i32 1048575, i32 1}
-// CHECK: [[DBG27]] = !DILocation(line: 26, column: 1, scope: [[DBG7]])
-// CHECK: [[DBG28]] = distinct !DISubprogram(name: "bar", scope: [[META8]], 
file: [[META8]], line: 43, type: [[META29:![0-9]+]], scopeLine: 43, flags: 
DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: 
[[META0]], retainedNodes: [[META34:![0-9]+]])
-// CHECK: [[META29]] = !DISubroutineType(types: [[META30:![0-9]+]])
-// CHECK: [[META30]] = !{null, [[META31:![0-9]+]], [[META14]], [[META14]]}
-// CHECK: [[META31]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: 
[[META32:![0-9]+]], size: 64)
-// CHECK: [[META32]] = !DISubroutineType(types: [[META33:![0-9]+]])
-// CHECK: [[META33]] = !{null, [[META14]], [[META14]]}
-// CHECK: [[META34]] = !{[[META35]], [[META36]], [[META37]]}
-// CHECK: [[META35]] = !DILocalVariable(name: "fn", arg: 1, scope: [[DBG28]], 
file: [[META8]], line: 43, type: [[META31]])
-// CHECK: [[META36]] = !DILocalVariable(name: "arg1", arg: 2, scope: 
[[DBG28]], file: [[META8]], line: 43, type: [[META14]])
-// CHECK: [[META37]] = !DILocalVariable(name: "arg2", arg: 3, scope: 
[[DBG28]], file: [[META8]], line: 43, type: [[META14]])
-// CHECK: [[META38]] = !{i64 0, !"_ZTSFvPFvu3i32S_ES_S_E.normalized"}
-// CHECK: [[META39]] = !{i64 0, !"_ZTSFvPvu3i32S0_E.normalized.generalized"}
-// CHECK: [[META40]] = !DILocation(line: 0, scope: [[DBG28]])
-// CHECK: [[DBG41]] = !DILocation(line: 0, scope: [[META22]], inlinedAt: 
[[DBG42]])
-// CHECK: [[DBG42]] = !DILocation(line: 44, column: 5, scope: [[DBG28]])
-// CHECK: [[DBG43]] = !DILocation(line: 45, column: 1, scope: [[DBG28]])
-// CHECK: [[DBG44]] = distinct !DISubprogram(name: "baz", scope: [[META8]], 
file: [[META8]], line: 63, type: [[META45:![0-9]+]], scopeLine: 63, flags: 
DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: 
[[META0]], retainedNodes: [[META50:![0-9]+]])
-// CHECK: [[META45]] = !DISubroutineType(types: [[META46:![0-9]+]])
-// CHECK: [[META46]] = !{null, [[META47:![0-9]+]], [[META14]], [[META14]], 
[[META14]]}
-// CHECK: [[META47]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: 
[[META48:![0-9]+]], size: 64)
+// CHECK: [[DBG27]] = !DILocation(line: 0, scope: [[META28:![0-9]+]], 
inlinedAt: [[DBG21]])
+// CHECK: [[META28]] = 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: [[META28]], 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, [[META14]], [[META14]], [[META14]]}
-// CHECK: [[META50]] = !{[[META51]], [[META52]], [[META53]], [[META54]]}
-// CHECK: [[META51]] = !DILocalVariable(name: "fn", arg: 1, scope: [[DBG44]], 
file: [[META8]], line: 63, type: [[META47]])
-// CHECK: [[META52]] = !DILocalVariable(name: "arg1", arg: 2, scope: 
[[DBG44]], file: [[META8]], line: 63, type: [[META14]])
-// CHECK: [[META53]] = !DILocalVariable(name: "arg2", arg: 3, scope: 
[[DBG44]], file: [[META8]], line: 63, type: [[META14]])
-// CHECK: [[META54]] = !DILocalVariable(name: "arg3", arg: 4, scope: 
[[DBG44]], file: [[META8]], line: 63, type: [[META14]])
-// CHECK: [[META55]] = !{i64 0, !"_ZTSFvPFvu3i32S_S_ES_S_S_E.normalized"}
-// CHECK: [[META56]] = !{i64 0, !"_ZTSFvPvu3i32S0_S0_E.normalized.generalized"}
-// CHECK: [[META57]] = !DILocation(line: 0, scope: [[DBG44]])
-// CHECK: [[DBG58]] = !DILocation(line: 0, scope: [[META22]], inlinedAt: 
[[DBG59]])
-// CHECK: [[DBG59]] = !DILocation(line: 64, column: 5, scope: [[DBG44]])
-// CHECK: [[DBG60]] = !DILocation(line: 65, column: 1, scope: [[DBG44]])
+// 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: [[META28]], inlinedAt: 
[[DBG61]])
+// CHECK: [[DBG64]] = !DILocation(line: 65, column: 1, scope: [[DBG47]])
 //.
diff --git a/clang/test/CodeGen/ubsan-trap-debugloc.c 
b/clang/test/CodeGen/ubsan-trap-debugloc.c
index 87cbfadec7d30..b6779e604e215 100644
--- a/clang/test/CodeGen/ubsan-trap-debugloc.c
+++ b/clang/test/CodeGen/ubsan-trap-debugloc.c
@@ -1,3 +1,4 @@
+// CASE 1
 // RUN: %clang_cc1 -emit-llvm -disable-llvm-passes -O 
-fsanitize=signed-integer-overflow -fsanitize-trap=signed-integer-overflow 
-fsanitize-merge=signed-integer-overflow %s -o - 
-debug-info-kind=line-tables-only | FileCheck %s
 
 
@@ -17,8 +18,11 @@ void bar(volatile int a) __attribute__((optnone)) {
 }
 
 // With optimisations enabled the traps are merged and need to share a debug 
location
-// CHECK: [[LOC]] = !DILocation(line: 0
+// CHECK: [[LOC]] = !DILocation(line: 0,
 
 // With optimisations disabled the traps are not merged and retain accurate 
debug locations
-// CHECK: [[LOC2]] = !DILocation(line: 15, column: 9
-// CHECK: [[LOC3]] = !DILocation(line: 16, column: 9
+ // CHECK-DAG: [[SRC2:![0-9]+]] = !DILocation(line: 16, column: 9,
+ // CHECK-DAG: [[SRC3:![0-9]+]] = !DILocation(line: 17, column: 9,
+ // CHECK-DAG: [[LOC2]] = !DILocation(line: 0, scope: [[SCOPE2:![0-9]+]], 
inlinedAt: [[SRC2]])
+ // CHECK-DAG: [[LOC3]] = !DILocation(line: 0, scope: [[SCOPE3:![0-9]+]], 
inlinedAt: [[SRC3]])
+
diff --git a/clang/test/CodeGen/ubsan-trap-reason-add-overflow.c 
b/clang/test/CodeGen/ubsan-trap-reason-add-overflow.c
index 4b3881ae9c7dc..4bbc8279b9d74 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-add-overflow.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-add-overflow.c
@@ -7,4 +7,4 @@ int add_overflow(int a, int b) {
 
 // CHECK: call void @llvm.ubsantrap(i8 0) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Signed integer addition overflowed"
diff --git a/clang/test/CodeGen/ubsan-trap-reason-alignment-assumption.c 
b/clang/test/CodeGen/ubsan-trap-reason-alignment-assumption.c
index a41a238eaf129..9763606cb9bd0 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-alignment-assumption.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-alignment-assumption.c
@@ -11,4 +11,4 @@ void retrieve_int(void) {
 
 // CHECK: call void @llvm.ubsantrap(i8 23) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Alignment assumption violated"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-builtin-unreachable.c 
b/clang/test/CodeGen/ubsan-trap-reason-builtin-unreachable.c
index a85d92319cb7b..05c2baf1c25d0 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-builtin-unreachable.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-builtin-unreachable.c
@@ -8,4 +8,4 @@ int call_builtin_unreachable()
 
 // CHECK: call void @llvm.ubsantrap(i8 1) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$_builtin_unreachable(), execution reached an unreachable program 
point"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-cfi-check-fail.c 
b/clang/test/CodeGen/ubsan-trap-reason-cfi-check-fail.c
index da6c9bc7fb2f9..24c4f8441d733 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-cfi-check-fail.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-cfi-check-fail.c
@@ -24,4 +24,4 @@ int cfi_trigger(int a) {
 
 // CHECK: call void @llvm.ubsantrap(i8 2) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Control flow integrity check failed"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-div-rem-overflow.c 
b/clang/test/CodeGen/ubsan-trap-reason-div-rem-overflow.c
index f98927399272f..30fd535304ea0 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-div-rem-overflow.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-div-rem-overflow.c
@@ -7,4 +7,4 @@ int div_rem_overflow(int a, int b) {
 
 // CHECK: call void @llvm.ubsantrap(i8 3) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Signed integer divide or remainder overflowed"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-dynamic-type-cache-miss.cpp 
b/clang/test/CodeGen/ubsan-trap-reason-dynamic-type-cache-miss.cpp
index e279626f09227..8cfdbd8ffdf3b 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-dynamic-type-cache-miss.cpp
+++ b/clang/test/CodeGen/ubsan-trap-reason-dynamic-type-cache-miss.cpp
@@ -20,4 +20,4 @@ int dynamic_type_cache_miss() {
 
 // CHECK: call void @llvm.ubsantrap(i8 4) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Dynamic type cache miss, member call made on an object whose dynamic 
type differs from the expected type"
diff --git a/clang/test/CodeGen/ubsan-trap-reason-float-cast-overflow.c 
b/clang/test/CodeGen/ubsan-trap-reason-float-cast-overflow.c
index 0524d8bbf9373..0dc7ddbbd17d9 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-float-cast-overflow.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-float-cast-overflow.c
@@ -7,4 +7,4 @@ int f(float x) {
 
 // CHECK: call void @llvm.ubsantrap(i8 5) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Floating-point to integer conversion overflowed"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-function-type-mismatch.c 
b/clang/test/CodeGen/ubsan-trap-reason-function-type-mismatch.c
index 8811a064a51c0..fcd3cd7bbacaf 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-function-type-mismatch.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-function-type-mismatch.c
@@ -13,4 +13,4 @@ int function_type_mismatch() {
 
 // CHECK: call void @llvm.ubsantrap(i8 6) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Function called with mismatched signature"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-implicit-conversion.c 
b/clang/test/CodeGen/ubsan-trap-reason-implicit-conversion.c
index 6e98aeacb17c9..7cb37448cba49 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-implicit-conversion.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-implicit-conversion.c
@@ -10,4 +10,4 @@ unsigned implicit_conversion()
 
 // CHECK: call void @llvm.ubsantrap(i8 7) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Implicit integer conversion overflowed or lost data"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-invalid-builtin.c 
b/clang/test/CodeGen/ubsan-trap-reason-invalid-builtin.c
index 4703518e11e6e..63f8e7b3f584a 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-invalid-builtin.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-invalid-builtin.c
@@ -8,4 +8,4 @@ unsigned invalid_builtin(unsigned x)
 
 // CHECK: call void @llvm.ubsantrap(i8 8) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Invalid use of builtin function"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-invalid-objc-cast.m 
b/clang/test/CodeGen/ubsan-trap-reason-invalid-objc-cast.m
index f7460b186b9b3..fe5b20ba1daf3 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-invalid-objc-cast.m
+++ b/clang/test/CodeGen/ubsan-trap-reason-invalid-objc-cast.m
@@ -28,4 +28,4 @@ void t0(void) {
 
 // CHECK: call void @llvm.ubsantrap(i8 9) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Invalid Objective-C cast",
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-load-invalid-value.c 
b/clang/test/CodeGen/ubsan-trap-reason-load-invalid-value.c
index e751d5135a50e..fbe8926846ae7 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-load-invalid-value.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-load-invalid-value.c
@@ -12,4 +12,4 @@ bool load_invalid_value()
 
 // CHECK: call void @llvm.ubsantrap(i8 10) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Loaded an invalid or uninitialized value for the type"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-missing-return.cpp 
b/clang/test/CodeGen/ubsan-trap-reason-missing-return.cpp
index d97523e503eff..dce28caf23907 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-missing-return.cpp
+++ b/clang/test/CodeGen/ubsan-trap-reason-missing-return.cpp
@@ -9,4 +9,4 @@ int missing_return(int x)
 
 // CHECK: call void @llvm.ubsantrap(i8 11) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Execution reached the end of a value-returning function without 
returning a value"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-mul-overflow.c 
b/clang/test/CodeGen/ubsan-trap-reason-mul-overflow.c
index 5250e70e61b43..55d2452f4e5b6 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-mul-overflow.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-mul-overflow.c
@@ -7,4 +7,4 @@ int mul_overflow(int a, int b) {
 
 // CHECK: call void @llvm.ubsantrap(i8 12) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Signed integer multiplication overflowed"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-negate-overflow.c 
b/clang/test/CodeGen/ubsan-trap-reason-negate-overflow.c
index 4273efaced40d..2abd92ed28a3b 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-negate-overflow.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-negate-overflow.c
@@ -9,4 +9,4 @@ int negate_overflow()
 
 // CHECK: call void @llvm.ubsantrap(i8 13) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Signed integer negation overflowed"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-nonnull-arg.c 
b/clang/test/CodeGen/ubsan-trap-reason-nonnull-arg.c
index e0849c6b81c32..1a48824ad97ee 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-nonnull-arg.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-nonnull-arg.c
@@ -13,4 +13,4 @@ void trigger_nonnull_arg()
 
 // CHECK: call void @llvm.ubsantrap(i8 16) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Passing null pointer as an argument which is declared to never be 
null"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-nonnull-return.c 
b/clang/test/CodeGen/ubsan-trap-reason-nonnull-return.c
index b513957775c86..63ace9d09c80f 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-nonnull-return.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-nonnull-return.c
@@ -12,4 +12,4 @@ int* must_return_nonnull(int bad)
 
 // CHECK: call void @llvm.ubsantrap(i8 17) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Returning null pointer from a function which is declared to never 
return null"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-nullability-arg.c 
b/clang/test/CodeGen/ubsan-trap-reason-nullability-arg.c
index e8012d05e3741..17dbffa01d080 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-nullability-arg.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-nullability-arg.c
@@ -15,4 +15,4 @@ int trigger_nullability_arg()
 
 // CHECK: call void @llvm.ubsantrap(i8 14) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Passing null as an argument which is annotated with _Nonnull"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-nullability-return.c 
b/clang/test/CodeGen/ubsan-trap-reason-nullability-return.c
index e5cad805fa968..e096df2178f2f 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-nullability-return.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-nullability-return.c
@@ -15,4 +15,4 @@ int* _Nonnull nullability_return(bool fail)
 
 // CHECK: call void @llvm.ubsantrap(i8 15) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Returning null from a function with a return type annotated with 
_Nonnull"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-out-of-bounds.c 
b/clang/test/CodeGen/ubsan-trap-reason-out-of-bounds.c
index afaeed4193907..a37d5eb1f199a 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-out-of-bounds.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-out-of-bounds.c
@@ -9,4 +9,4 @@ int out_of_bounds()
 
 // CHECK: call void @llvm.ubsantrap(i8 18) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Array index out of bounds"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-pointer-overflow.c 
b/clang/test/CodeGen/ubsan-trap-reason-pointer-overflow.c
index f219134020eb7..f2a60d5436bfc 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-pointer-overflow.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-pointer-overflow.c
@@ -13,4 +13,4 @@ int* pointer_overflow(void)
 
 // CHECK: call void @llvm.ubsantrap(i8 19) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Pointer arithmetic overflowed bounds"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-shift-out-of-bounds.c 
b/clang/test/CodeGen/ubsan-trap-reason-shift-out-of-bounds.c
index 287f4d500922f..eed75db377da3 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-shift-out-of-bounds.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-shift-out-of-bounds.c
@@ -9,4 +9,4 @@ int shift_out_of_bounds()
 
 // CHECK: call void @llvm.ubsantrap(i8 20) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Shift exponent is too large for the type"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-sub-overflow.c 
b/clang/test/CodeGen/ubsan-trap-reason-sub-overflow.c
index 76e59996997f5..43d1850e6cc8c 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-sub-overflow.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-sub-overflow.c
@@ -7,4 +7,4 @@ int sub_overflow(int a, int b) {
 
 // CHECK: call void @llvm.ubsantrap(i8 21) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Signed integer subtraction overflowed"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-type-mismatch.c 
b/clang/test/CodeGen/ubsan-trap-reason-type-mismatch.c
index 6a9f755f4e485..9d1ed6aa25039 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-type-mismatch.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-type-mismatch.c
@@ -8,4 +8,4 @@ int type_mismatch(int *p)
 
 // CHECK: call void @llvm.ubsantrap(i8 22) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Type mismatch in operation"
\ No newline at end of file
diff --git a/clang/test/CodeGen/ubsan-trap-reason-vla-bound-not-positive.c 
b/clang/test/CodeGen/ubsan-trap-reason-vla-bound-not-positive.c
index 23fea161feea4..dd2dd13fba34f 100644
--- a/clang/test/CodeGen/ubsan-trap-reason-vla-bound-not-positive.c
+++ b/clang/test/CodeGen/ubsan-trap-reason-vla-bound-not-positive.c
@@ -11,4 +11,4 @@ int vla_bound_not_positive()
 
 // CHECK: call void @llvm.ubsantrap(i8 24) {{.*}}!dbg [[LOC:![0-9]+]]
 // CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}})
-// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer
\ No newline at end of file
+// CHECK: distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior 
Sanitizer$Variable length array bound evaluates to non-positive value"
\ No newline at end of file

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to