mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
[SanitizerCoverage] Clang crashes if user declares __sancov_lowest_stack
variable
Summary: If the user declares or defines `__sancov_lowest_stack` with an unexpected type, then `getOrInsertGlobal` inserts a bitcast and the following cast fails: ``` Constant *SanCovLowestStackConstant = M.getOrInsertGlobal(SanCovLowestStackName, IntptrTy); SanCovLowestStack = cast<GlobalVariable>(SanCovLowestStackConstant); ``` This variable is a SanitizerCoverage implementation detail and the user should generally never have a need to access it, so we emit an error now. rdar://problem/44143130 Reviewers: morehouse Differential Revision: https://reviews.llvm.org/D57633 llvm-svn: 353100
This commit is contained in:
parent
1b78df33e7
commit
a0346fe540
@ -377,7 +377,12 @@ bool SanitizerCoverageModule::runOnModule(Module &M) {
|
||||
|
||||
Constant *SanCovLowestStackConstant =
|
||||
M.getOrInsertGlobal(SanCovLowestStackName, IntptrTy);
|
||||
SanCovLowestStack = cast<GlobalVariable>(SanCovLowestStackConstant);
|
||||
SanCovLowestStack = dyn_cast<GlobalVariable>(SanCovLowestStackConstant);
|
||||
if (!SanCovLowestStack) {
|
||||
C->emitError(StringRef("'") + SanCovLowestStackName +
|
||||
"' should not be declared by the user");
|
||||
return true;
|
||||
}
|
||||
SanCovLowestStack->setThreadLocalMode(
|
||||
GlobalValue::ThreadLocalMode::InitialExecTLSModel);
|
||||
if (Options.StackDepth && !SanCovLowestStack->isDeclaration())
|
||||
|
@ -0,0 +1,12 @@
|
||||
; Ensure that we terminate with a useful error message (instead of crash) if the
|
||||
; user declares `__sancov_lowest_stack` with an unexpected type.
|
||||
; RUN: not opt < %s -sancov -sanitizer-coverage-level=1 \
|
||||
; RUN: -sanitizer-coverage-stack-depth -S 2>&1 | FileCheck %s
|
||||
|
||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
; Wrong type: i32 instead of expected i64
|
||||
@__sancov_lowest_stack = thread_local global i32 0
|
||||
|
||||
; CHECK: error: '__sancov_lowest_stack' should not be declared by the user
|
Loading…
Reference in New Issue
Block a user