From: Hal Finkel Date: Sat, 12 Jul 2014 04:51:04 +0000 (+0000) Subject: Add nonnull in CodeGen for __attribute__((returns_nonnull)) X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=853001f3e32cd571845bc19a27765079c657d4c4;p=clang Add nonnull in CodeGen for __attribute__((returns_nonnull)) As a follow-up to r212835, also add the LLVM nonnull function attribute when __attribute__((returns_nonnull)) is provided. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212874 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index c32e4f2c1f..2a9d84a741 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -1107,6 +1107,8 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI, } if (TargetDecl->hasAttr()) RetAttrs.addAttribute(llvm::Attribute::NoAlias); + if (TargetDecl->hasAttr()) + RetAttrs.addAttribute(llvm::Attribute::NonNull); } if (CodeGenOpts.OptimizeSize) diff --git a/test/CodeGen/nonnull.c b/test/CodeGen/nonnull.c index b39a14ce7e..4d6cc4568d 100644 --- a/test/CodeGen/nonnull.c +++ b/test/CodeGen/nonnull.c @@ -15,3 +15,9 @@ void bar2(int * x, int * y) __attribute__((nonnull(2))) { *x = 0; } +static int a; +// CHECK: define nonnull i32* @bar3() +int * bar3() __attribute__((returns_nonnull)) { + return &a; +} +