[PATCH] D55794: [asan] In llvm.asan.globals, allow entries to be non-GlobalVariable and skip over them
Phabricator via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 18 13:23:53 PST 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL349544: [asan] In llvm.asan.globals, allow entries to be non-GlobalVariable and skip… (authored by kuba.brecka, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D55794?vs=178759&id=178776#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D55794/new/
https://reviews.llvm.org/D55794
Files:
llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
llvm/trunk/test/Instrumentation/AddressSanitizer/global_metadata_bitcasts.ll
Index: llvm/trunk/test/Instrumentation/AddressSanitizer/global_metadata_bitcasts.ll
===================================================================
--- llvm/trunk/test/Instrumentation/AddressSanitizer/global_metadata_bitcasts.ll
+++ llvm/trunk/test/Instrumentation/AddressSanitizer/global_metadata_bitcasts.ll
@@ -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"
+
+ at 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}
Index: llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===================================================================
--- llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -441,8 +441,11 @@
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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D55794.178776.patch
Type: text/x-patch
Size: 1772 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181218/f6c2289b/attachment.bin>
More information about the llvm-commits
mailing list