aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-04-25 05:51:56 +0000
committerChris Lattner <sabre@nondot.org>2009-04-25 05:51:56 +0000
commit7cbeef278d6206941630ea14585ea80f44d68d69 (patch)
tree8b08c2c18d6760eba67cb5b4b256305e8c2e485e
parent9c7db4a209b74f1ca88b6670258749bf90af86dc (diff)
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
-rw-r--r--lib/Sema/SemaDecl.cpp12
-rw-r--r--test/Sema/function.c3
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<TypedefType>(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<ParmVarDecl*, 16> 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;
+