Ensure sanitizer check function calls have a !dbg location
authorAdrian Prantl <aprantl@apple.com>
Wed, 28 Nov 2018 21:44:06 +0000 (21:44 +0000)
committerAdrian Prantl <aprantl@apple.com>
Wed, 28 Nov 2018 21:44:06 +0000 (21:44 +0000)
commitc9f2473b4306117a409bc3167f0988681ecb518f
treea8109a1fc678d5f24c6002e6a33ea69d1f12a363
parentdec0696345925e8eadc515031949d4cf4dba4e2e
Ensure sanitizer check function calls have a !dbg location

Function calls without a !dbg location inside a function that has a
DISubprogram make it impossible to construct inline information and
are rejected by the verifier. This patch ensures that sanitizer check
function calls have a !dbg location, by carrying forward the location
of the preceding instruction or by inserting an artificial location if
necessary.

This fixes a crash when compiling the attached testcase with -Os.

rdar://problem/45311226

Differential Revision: https://reviews.llvm.org/D53459

Note: This reapllies r344915, modified to reuse the IRBuilder's
DebugLoc if one exists instead of picking the one from CGDebugInfo
since the latter may get reset when emitting thunks such as block
helpers in the middle of emitting another function.

llvm-svn: 347810
clang/lib/CodeGen/CGExpr.cpp
clang/test/CodeGenCXX/ubsan-check-debuglocs.cpp [new file with mode: 0644]
clang/test/CodeGenObjC/ubsan-check-debuglocs.m [new file with mode: 0644]