[cfe-commits] r49460 - in /cfe/trunk: include/clang/Basic/DiagnosticKinds.def lib/Sema/SemaDecl.cpp test/Sema/c89.c

Chris Lattner sabre at nondot.org
Wed Apr 9 19:26:16 PDT 2008


Author: lattner
Date: Wed Apr  9 21:26:16 2008
New Revision: 49460

URL: http://llvm.org/viewvc/llvm-project?rev=49460&view=rev
Log:
 typedef void T;
 void f(T);

is only invalid in C++ mode, not C89 mode.


Modified:
    cfe/trunk/include/clang/Basic/DiagnosticKinds.def
    cfe/trunk/lib/Sema/SemaDecl.cpp
    cfe/trunk/test/Sema/c89.c

Modified: cfe/trunk/include/clang/Basic/DiagnosticKinds.def
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticKinds.def?rev=49460&r1=49459&r2=49460&view=diff

==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticKinds.def (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticKinds.def Wed Apr  9 21:26:16 2008
@@ -621,7 +621,7 @@
 DIAG(ext_param_not_declared, EXTENSION,
      "parameter '%0' was not declared, defaulting to type 'int'")
 DIAG(ext_param_typedef_of_void, EXTENSION,
-     "empty parameter list defined with a typedef of 'void' is a C99 feature")
+     "empty parameter list defined with a typedef of 'void' not allowed in C++")
 DIAG(err_param_default_argument, ERROR,
      "C does not support default arguments")
 DIAG(err_param_default_argument_redefinition, ERROR,

Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=49460&r1=49459&r2=49460&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Wed Apr  9 21:26:16 2008
@@ -841,9 +841,9 @@
         // empty arg list, don't push any params.
         ParmVarDecl *Param = (ParmVarDecl*)FTI.ArgInfo[0].Param;
 
-        // In C++ and C89, the empty parameter-type-list must be
-        // spelled "void"; a typedef of void is not permitted. 
-        if (!getLangOptions().C99 &&
+        // In C++, the empty parameter-type-list must be spelled "void"; a
+        // typedef of void is not permitted.
+        if (getLangOptions().CPlusPlus &&
             Param->getType() != Context.VoidTy) {
           Diag(Param->getLocation(), diag::ext_param_typedef_of_void);
         }

Modified: cfe/trunk/test/Sema/c89.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/c89.c?rev=49460&r1=49459&r2=49460&view=diff

==============================================================================
--- cfe/trunk/test/Sema/c89.c (original)
+++ cfe/trunk/test/Sema/c89.c Wed Apr  9 21:26:16 2008
@@ -55,5 +55,7 @@
 { bar (&z); }
 
 typedef void T;
-void foo(T); /* expected-warning {{empty parameter list defined with a typedef of 'void' is a C99 feature}} */
+void foo(T); /* typedef for void is allowed */
+
+void foo(void) {}
 





More information about the cfe-commits mailing list