From 7cbeef278d6206941630ea14585ea80f44d68d69 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 25 Apr 2009 05:51:56 +0000 Subject: [PATCH] in: typedef void foo(void); We get a typedef for a functiontypeproto with no arguments, not one with one argument and type void. This means the code being removed in SemaDecl is dead. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70013 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDecl.cpp | 12 ++---------- test/Sema/function.c | 3 +++ 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index c929acf795..d34b20780e 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -2153,7 +2153,7 @@ Sema::ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC, } NewFD->setParams(Context, &Params[0], Params.size()); - } else if (R->getAsTypedefType()) { + } else if (isa(R)) { // When we're declaring a function with a typedef, as in the // following example, we'll need to synthesize (unnamed) // parameters for use in the declaration. @@ -2162,15 +2162,7 @@ Sema::ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC, // typedef void fn(int); // fn f; // @endcode - const FunctionProtoType *FT = R->getAsFunctionProtoType(); - if (!FT) { - // This is a typedef of a function with no prototype, so we - // don't need to do anything. - } else if ((FT->getNumArgs() == 0) || - (FT->getNumArgs() == 1 && !FT->isVariadic() && - FT->getArgType(0)->isVoidType())) { - // This is a zero-argument function. We don't need to do anything. - } else { + if (const FunctionProtoType *FT = R->getAsFunctionProtoType()) { // Synthesize a parameter for each argument type. llvm::SmallVector Params; for (FunctionProtoType::arg_type_iterator ArgType = FT->arg_type_begin(); diff --git a/test/Sema/function.c b/test/Sema/function.c index 77557c9408..a1dd8b69e0 100644 --- a/test/Sema/function.c +++ b/test/Sema/function.c @@ -76,4 +76,7 @@ gnu_inline2() {} inline foo_t invalid_type() { // expected-error {{unknown type name 'foo_t'}} } +typedef void fn_t(void); +fn_t t17; + -- 2.50.1