From 7812075ff51a231d3cd9650216232251b3092e7a Mon Sep 17 00:00:00 2001 From: John McCall Date: Thu, 10 Sep 2015 00:57:46 +0000 Subject: [PATCH] Don't crash when emitting a block under returns_nonnull. rdar://22071955 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247228 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGCall.cpp | 4 ++-- test/CodeGen/sanitize-blocks.c | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 test/CodeGen/sanitize-blocks.c diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index 344d06ba66..2f50b85e9d 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -2440,8 +2440,8 @@ void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI, llvm::Instruction *Ret; if (RV) { - if (SanOpts.has(SanitizerKind::ReturnsNonnullAttribute)) { - if (auto RetNNAttr = CurGD.getDecl()->getAttr()) { + if (CurCodeDecl && SanOpts.has(SanitizerKind::ReturnsNonnullAttribute)) { + if (auto RetNNAttr = CurCodeDecl->getAttr()) { SanitizerScope SanScope(this); llvm::Value *Cond = Builder.CreateICmpNE( RV, llvm::Constant::getNullValue(RV->getType())); diff --git a/test/CodeGen/sanitize-blocks.c b/test/CodeGen/sanitize-blocks.c new file mode 100644 index 0000000000..103c33c2d9 --- /dev/null +++ b/test/CodeGen/sanitize-blocks.c @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 -fsanitize-trap=returns-nonnull-attribute -fsanitize=returns-nonnull-attribute -emit-llvm %s -o - -triple x86_64-apple-darwin10 -fblocks | FileCheck %s + +// Awkward interactions of sanitizers with blocks. + +// rdar://22071955 +const char *TheString = "Hello, world!"; +const char *(^getString)(void) = ^{ + return TheString; +}; + +// CHECK-LABEL: define internal i8* @getString_block_invoke + +// TODO: Actually support returns_nonnull on blocks. -- 2.40.0