]> granicus.if.org Git - clang/commitdiff
Make alloc_size only applicable to Functions.
authorGeorge Burgess IV <george.burgess.iv@gmail.com>
Thu, 22 Dec 2016 18:48:34 +0000 (18:48 +0000)
committerGeorge Burgess IV <george.burgess.iv@gmail.com>
Thu, 22 Dec 2016 18:48:34 +0000 (18:48 +0000)
I don't remember why I didn't make alloc_size only applicable to
Functions a year ago, but I can't see any compelling reason not to do
so now.

Fixes PR31453.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290353 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/Attr.td
test/Sema/alloc-size.c

index f6a5e54b2b3b23e96f92db01a92399f8b8ec8874..107a3bdffa657374679a2a41230301be216cc7ce 100644 (file)
@@ -782,8 +782,7 @@ def EmptyBases : InheritableAttr, TargetSpecificAttr<TargetMicrosoftCXXABI> {
 
 def AllocSize : InheritableAttr {
   let Spellings = [GCC<"alloc_size">];
-  let Subjects = SubjectList<[HasFunctionProto], WarnDiag,
-                             "ExpectedFunctionWithProtoType">;
+  let Subjects = SubjectList<[Function]>;
   let Args = [IntArgument<"ElemSizeParam">, IntArgument<"NumElemsParam", 1>];
   let TemplateDependent = 1;
   let Documentation = [AllocSizeDocs];
index 600ef6870e90bf95d96ff1d0346e8d1e6d5ef8e4..7004a5a7d7f6fa3d6364e2db4be60de0c573376d 100644 (file)
@@ -14,10 +14,12 @@ void *fail8(int a, int b) __attribute__((alloc_size(1, 3))); //expected-error{{'
 
 int fail9(int a) __attribute__((alloc_size(1))); //expected-warning{{'alloc_size' attribute only applies to return values that are pointers}}
 
-int fail10 __attribute__((alloc_size(1))); //expected-warning{{'alloc_size' attribute only applies to non-K&R-style functions}}
+int fail10 __attribute__((alloc_size(1))); //expected-warning{{'alloc_size' attribute only applies to functions}}
 
 void *fail11(void *a) __attribute__((alloc_size(1))); //expected-error{{'alloc_size' attribute argument may only refer to a function parameter of integer type}}
 
 void *fail12(int a) __attribute__((alloc_size("abc"))); //expected-error{{'alloc_size' attribute requires parameter 1 to be an integer constant}}
 void *fail12(int a) __attribute__((alloc_size(1, "abc"))); //expected-error{{'alloc_size' attribute requires parameter 2 to be an integer constant}}
 void *fail13(int a) __attribute__((alloc_size(1U<<31))); //expected-error{{integer constant expression evaluates to value 2147483648 that cannot be represented in a 32-bit signed integer type}}
+
+int (*PR31453)(int) __attribute__((alloc_size(1))); //expected-warning{{'alloc_size' attribute only applies to functions}}