]> granicus.if.org Git - clang/commitdiff
Add nonnull in CodeGen for __attribute__((returns_nonnull))
authorHal Finkel <hfinkel@anl.gov>
Sat, 12 Jul 2014 04:51:04 +0000 (04:51 +0000)
committerHal Finkel <hfinkel@anl.gov>
Sat, 12 Jul 2014 04:51:04 +0000 (04:51 +0000)
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

lib/CodeGen/CGCall.cpp
test/CodeGen/nonnull.c

index c32e4f2c1f464ccef6bb553c39a80beca9468a16..2a9d84a74125da6fbf2e8af8f0a48ba886e94dab 100644 (file)
@@ -1107,6 +1107,8 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI,
     }
     if (TargetDecl->hasAttr<MallocAttr>())
       RetAttrs.addAttribute(llvm::Attribute::NoAlias);
+    if (TargetDecl->hasAttr<ReturnsNonNullAttr>())
+      RetAttrs.addAttribute(llvm::Attribute::NonNull);
   }
 
   if (CodeGenOpts.OptimizeSize)
index b39a14ce7e87aa7f69422497592d27b0acfeca4f..4d6cc4568d8b19e382be2b581947cdde4f0186c0 100644 (file)
@@ -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;
+}
+