mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-26 15:28:12 +00:00
[asan] In llvm.asan.globals, allow entries to be non-GlobalVariable and skip over them
Looks like there are valid reasons why we need to allow bitcasts in llvm.asan.globals, see discussion at https://github.com/apple/swift-llvm/pull/133. Let's look through bitcasts when iterating over entries in the llvm.asan.globals list. Differential Revision: https://reviews.llvm.org/D55794 llvm-svn: 349544
This commit is contained in:
parent
a9210f6ef4
commit
a4cff19ff0
@ -441,8 +441,11 @@ public:
|
||||
for (auto MDN : Globals->operands()) {
|
||||
// Metadata node contains the global and the fields of "Entry".
|
||||
assert(MDN->getNumOperands() == 5);
|
||||
auto *GV = mdconst::extract_or_null<GlobalVariable>(MDN->getOperand(0));
|
||||
auto *V = mdconst::extract_or_null<Constant>(MDN->getOperand(0));
|
||||
// The optimizer may optimize away a global entirely.
|
||||
if (!V) continue;
|
||||
auto *StrippedV = V->stripPointerCasts();
|
||||
auto *GV = dyn_cast<GlobalVariable>(StrippedV);
|
||||
if (!GV) continue;
|
||||
// We can already have an entry for GV if it was merged with another
|
||||
// global.
|
||||
|
@ -0,0 +1,13 @@
|
||||
; Test that the compiler doesn't crash when the llvm.asan.globals containts
|
||||
; an entry that points to a BitCast instruction.
|
||||
|
||||
; RUN: opt < %s -asan -asan-module -asan-globals-live-support=1 -S
|
||||
|
||||
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
|
||||
target triple = "x86_64-apple-macosx10.11.0"
|
||||
|
||||
@g = global [1 x i32] zeroinitializer, align 4
|
||||
|
||||
!llvm.asan.globals = !{!0, !1}
|
||||
!0 = !{[1 x i32]* @g, null, !"name", i1 false, i1 false}
|
||||
!1 = !{i8* bitcast ([1 x i32]* @g to i8*), null, !"name", i1 false, i1 false}
|
Loading…
x
Reference in New Issue
Block a user