]> granicus.if.org Git - clang/commit
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)
commitdb9f93e7f33d4f8bfd5f60930cf14cbd467378fc
treeb67e01496bae5f7b57c86d5d3b6d1b87d9072de5
parentf1be5aeb5cea686c911f22318411f8b51527bcf7
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.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@347810 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/CGExpr.cpp
test/CodeGenCXX/ubsan-check-debuglocs.cpp [new file with mode: 0644]
test/CodeGenObjC/ubsan-check-debuglocs.m [new file with mode: 0644]