summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorAaron Ballman <aaron@aaronballman.com>2014-07-11 16:31:29 +0000
committerAaron Ballman <aaron@aaronballman.com>2014-07-11 16:31:29 +0000
commit6288d0648ae504183c270b664126c88bb9f51f38 (patch)
treeca99c22e0dc584aaaba6c2c275501f695ce1fe45 /clang
parent923121e85b9a52bfc33faa3b8aec1f8d26e25af5 (diff)
downloadbcm5719-llvm-6288d0648ae504183c270b664126c88bb9f51f38.tar.gz
bcm5719-llvm-6288d0648ae504183c270b664126c88bb9f51f38.zip
The returns_nonnull attribute does not require a function prototype because it affects only the return value, not any arguments. In turn, asking for a function or method result type should not require a function prototype either, so getFunctionOrMethodResultType has been relaxed.
llvm-svn: 212827
Diffstat (limited to 'clang')
-rw-r--r--clang/include/clang/Basic/Attr.td2
-rw-r--r--clang/lib/Sema/SemaDeclAttr.cpp2
-rw-r--r--clang/test/Sema/nonnull.c3
3 files changed, 4 insertions, 3 deletions
diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td
index df4b38d331c..f34034e3255 100644
--- a/clang/include/clang/Basic/Attr.td
+++ b/clang/include/clang/Basic/Attr.td
@@ -855,7 +855,7 @@ def NonNull : InheritableAttr {
def ReturnsNonNull : InheritableAttr {
let Spellings = [GCC<"returns_nonnull">];
- let Subjects = SubjectList<[ObjCMethod, HasFunctionProto], WarnDiag,
+ let Subjects = SubjectList<[ObjCMethod, Function], WarnDiag,
"ExpectedFunctionOrMethod">;
let Documentation = [Undocumented];
}
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index 45ca8dcaef9..7674aa48541 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -90,7 +90,7 @@ static QualType getFunctionOrMethodParamType(const Decl *D, unsigned Idx) {
static QualType getFunctionOrMethodResultType(const Decl *D) {
if (const FunctionType *FnTy = D->getFunctionType())
- return cast<FunctionProtoType>(FnTy)->getReturnType();
+ return cast<FunctionType>(FnTy)->getReturnType();
return cast<ObjCMethodDecl>(D)->getReturnType();
}
diff --git a/clang/test/Sema/nonnull.c b/clang/test/Sema/nonnull.c
index 0e92654c283..b1f69208241 100644
--- a/clang/test/Sema/nonnull.c
+++ b/clang/test/Sema/nonnull.c
@@ -38,7 +38,8 @@ void *test_ptr_returns_nonnull(void) __attribute__((returns_nonnull)); // no-war
int i __attribute__((nonnull)); // expected-warning {{'nonnull' attribute only applies to functions, methods, and parameters}}
int j __attribute__((returns_nonnull)); // expected-warning {{'returns_nonnull' attribute only applies to functions and methods}}
-void *test_no_fn_proto() __attribute__((returns_nonnull)); // expected-warning {{'returns_nonnull' attribute only applies to functions and methods}}
+void *test_no_fn_proto() __attribute__((returns_nonnull)); // no-warning
+void *test_with_fn_proto(void) __attribute__((returns_nonnull)); // no-warning
__attribute__((returns_nonnull))
void *test_bad_returns_null(void) {
OpenPOWER on IntegriCloud