From: Douglas Gregor Date: Tue, 13 Jan 2009 23:10:51 +0000 (+0000) Subject: Permitting typedefs without a name is a Microsoft/GNU extension X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ee159c14c1ac99d7944645e2b111b04dca089855;p=clang Permitting typedefs without a name is a Microsoft/GNU extension git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62192 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticKinds.def b/include/clang/Basic/DiagnosticKinds.def index a9f60d2d63..52c6cbf2fa 100644 --- a/include/clang/Basic/DiagnosticKinds.def +++ b/include/clang/Basic/DiagnosticKinds.def @@ -593,6 +593,8 @@ DIAG(err_expected_unqualified_id, ERROR, "expected unqualified-id") DIAG(err_no_declarators, ERROR, "declaration does not declare anything") +DIAG(ext_no_declarators, EXTENSION, + "typedef without a name is a Microsoft extension") DIAG(err_func_def_no_params, ERROR, "function definition does not declare parameters") DIAG(err_expected_lparen_after_type, ERROR, diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 9b419e5b63..8d2e5590b9 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -875,7 +875,15 @@ Sema::DeclTy *Sema::ParsedFreeStandingDeclSpec(Scope *S, DeclSpec &DS) { return Tag; } + // Permit typedefs without declarators as a Microsoft extension. if (!DS.isMissingDeclaratorOk()) { + if (getLangOptions().Microsoft && + DS.getStorageClassSpec() == DeclSpec::SCS_typedef) { + Diag(DS.getSourceRange().getBegin(), diag::ext_no_declarators) + << DS.getSourceRange(); + return Tag; + } + // FIXME: This diagnostic is emitted even when various previous // errors occurred (see e.g. test/Sema/decl-invalid.c). However, // DeclSpec has no means of communicating this information, and the