From c6f7345e44e079f373d6bdecaa06c7e06574dc27 Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Thu, 16 Oct 2008 17:31:08 +0000 Subject: [PATCH] In C++, an empty parameter list indicates a function that takes no parameters. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57646 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaType.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp index 209a003988..a9e8b0117d 100644 --- a/lib/Sema/SemaType.cpp +++ b/lib/Sema/SemaType.cpp @@ -406,8 +406,14 @@ QualType Sema::GetTypeForDeclarator(Declarator &D, Scope *S) { } if (FTI.NumArgs == 0) { - // Simple void foo(), where the incoming T is the result type. - T = Context.getFunctionTypeNoProto(T); + if (getLangOptions().CPlusPlus) { + // C++ 8.3.5p2: If the parameter-declaration-clause is empty, the + // function takes no arguments. + T = Context.getFunctionType(T, NULL, 0, FTI.isVariadic); + } else { + // Simple void foo(), where the incoming T is the result type. + T = Context.getFunctionTypeNoProto(T); + } } else if (FTI.ArgInfo[0].Param == 0) { // C99 6.7.5.3p3: Reject int(x,y,z) when it's not a function definition. Diag(FTI.ArgInfo[0].IdentLoc, diag::err_ident_list_in_fn_declaration); -- 2.40.0