From 28965bfa833926fd908a902cf2373d07c47b9067 Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Fri, 22 Feb 2013 06:58:28 +0000 Subject: [PATCH] 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 --- lib/Sema/SemaDeclAttr.cpp | 6 +++++- test/Sema/alloc_size.c | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) 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 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}} -- 2.40.0