diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-02-22 06:58:28 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-02-22 06:58:28 +0000 |
commit | 28965bfa833926fd908a902cf2373d07c47b9067 (patch) | |
tree | 4b43bb10276686db2ad199e006c6e8ce31089fe3 | |
parent | 150d853343758281f7b0c44e058ea81da45b79be (diff) |
Don't crash when applying an alloc_size attribute on a K&R function.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175867 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaDeclAttr.cpp | 6 | ||||
-rw-r--r-- | test/Sema/alloc_size.c | 1 |
2 files changed, 6 insertions, 1 deletions
diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp index 0a30163f99..1142e0dd2d 100644 --- a/lib/Sema/SemaDeclAttr.cpp +++ b/lib/Sema/SemaDeclAttr.cpp @@ -1097,7 +1097,11 @@ static void handleAllocSizeAttr(Sema &S, Decl *D, const AttributeList &Attr) { // In C++ the implicit 'this' function parameter also counts, and they are // counted from one. bool HasImplicitThisParam = isInstanceMethod(D); - unsigned NumArgs = getFunctionOrMethodNumArgs(D) + HasImplicitThisParam; + unsigned NumArgs; + if (hasFunctionProto(D)) + NumArgs = getFunctionOrMethodNumArgs(D) + HasImplicitThisParam; + else + NumArgs = 0; SmallVector<unsigned, 8> SizeArgs; diff --git a/test/Sema/alloc_size.c b/test/Sema/alloc_size.c index e2f52987d1..6a580b5a80 100644 --- a/test/Sema/alloc_size.c +++ b/test/Sema/alloc_size.c @@ -24,3 +24,4 @@ void* fn9(unsigned) __attribute__((alloc_size(12345678901234567890123))); // exp void* fn10(size_t, size_t) __attribute__((alloc_size(1,2))); // expected-error{{redefinition of parameter}} \ // expected-error{{a parameter list without types is only allowed in a function definition}} \ // expected-warning{{alloc_size attribute only applies to functions and methods}} +void* fn11() __attribute__((alloc_size(1))); // expected-error{{attribute parameter 1 is out of bounds}} |