Ah! Hm, maybe that's the better group for this anyway? Not sure. On Wed, Mar 21, 2018, 9:03 PM Hans Wennborg <h...@chromium.org> wrote:
> Aw, rats. I put it under -Wignored-pragmas rather than > -Wunsupported-pragmas, because I was looking at #pragma intrinsic. > > I'll take a look at this again tomorrow. > > On Wed, Mar 21, 2018 at 5:18 PM, Nico Weber via cfe-commits > <cfe-commits@lists.llvm.org> wrote: > > From the bot changes, it seems that -Wunknown-pragma doesn't disable this > > new warning. Shouldn't it do that? > > > > On Tue, Mar 20, 2018, 9:55 AM Hans Wennborg via cfe-commits > > <cfe-commits@lists.llvm.org> wrote: > >> > >> Author: hans > >> Date: Tue Mar 20 01:53:11 2018 > >> New Revision: 327959 > >> > >> URL: http://llvm.org/viewvc/llvm-project?rev=327959&view=rev > >> Log: > >> [ms] Parse #pragma optimize and ignore it behind its own flag > >> > >> This allows users to turn off warnings about this pragma specifically, > >> while still receiving warnings about other ignored pragmas. > >> > >> Differential Revision: https://reviews.llvm.org/D44630 > >> > >> Modified: > >> cfe/trunk/include/clang/Basic/DiagnosticGroups.td > >> cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td > >> cfe/trunk/include/clang/Parse/Parser.h > >> cfe/trunk/lib/Parse/ParsePragma.cpp > >> cfe/trunk/test/Preprocessor/pragma_microsoft.c > >> > >> Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td > >> URL: > >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=327959&r1=327958&r2=327959&view=diff > >> > >> > ============================================================================== > >> --- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original) > >> +++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Tue Mar 20 > 01:53:11 > >> 2018 > >> @@ -515,8 +515,13 @@ def UninitializedStaticSelfInit : DiagGr > >> def Uninitialized : DiagGroup<"uninitialized", > [UninitializedSometimes, > >> > >> UninitializedStaticSelfInit]>; > >> def IgnoredPragmaIntrinsic : DiagGroup<"ignored-pragma-intrinsic">; > >> +// #pragma optimize is often used to avoid to work around MSVC codegen > >> bugs or > >> +// to disable inlining. It's not completely clear what alternative to > >> suggest > >> +// (#pragma clang optimize, noinline) so suggest nothing for now. > >> +def IgnoredPragmaOptimize : DiagGroup<"ignored-pragma-optimize">; > >> def UnknownPragmas : DiagGroup<"unknown-pragmas">; > >> -def IgnoredPragmas : DiagGroup<"ignored-pragmas", > >> [IgnoredPragmaIntrinsic]>; > >> +def IgnoredPragmas : DiagGroup<"ignored-pragmas", > >> + [IgnoredPragmaIntrinsic, IgnoredPragmaOptimize]>; > >> def PragmaClangAttribute : DiagGroup<"pragma-clang-attribute">; > >> def PragmaPackSuspiciousInclude : > >> DiagGroup<"pragma-pack-suspicious-include">; > >> def PragmaPack : DiagGroup<"pragma-pack", > [PragmaPackSuspiciousInclude]>; > >> > >> Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td > >> URL: > >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=327959&r1=327958&r2=327959&view=diff > >> > >> > ============================================================================== > >> --- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original) > >> +++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Tue Mar 20 > >> 01:53:11 2018 > >> @@ -895,6 +895,12 @@ def warn_pragma_expected_rparen : Warnin > >> "missing ')' after '#pragma %0' - ignoring">, > InGroup<IgnoredPragmas>; > >> def warn_pragma_expected_identifier : Warning< > >> "expected identifier in '#pragma %0' - ignored">, > >> InGroup<IgnoredPragmas>; > >> +def warn_pragma_expected_string : Warning< > >> + "expected string literal in '#pragma %0' - ignoring">, > >> InGroup<IgnoredPragmas>; > >> +def warn_pragma_missing_argument : Warning< > >> + "missing argument to '#pragma %0'%select{|; expected %2}1">, > >> InGroup<IgnoredPragmas>; > >> +def warn_pragma_invalid_argument : Warning< > >> + "unexpected argument '%0' to '#pragma %1'%select{|; expected %3}2">, > >> InGroup<IgnoredPragmas>; > >> > >> // '#pragma clang section' related errors > >> def err_pragma_expected_clang_section_name : Error< > >> @@ -923,6 +929,8 @@ def warn_pragma_ms_struct : Warning< > >> def warn_pragma_extra_tokens_at_eol : Warning< > >> "extra tokens at end of '#pragma %0' - ignored">, > >> InGroup<IgnoredPragmas>; > >> +def warn_pragma_expected_comma : Warning< > >> + "expected ',' in '#pragma %0'">, InGroup<IgnoredPragmas>; > >> def warn_pragma_expected_punc : Warning< > >> "expected ')' or ',' in '#pragma %0'">, InGroup<IgnoredPragmas>; > >> def warn_pragma_expected_non_wide_string : Warning< > >> @@ -960,6 +968,10 @@ def warn_pragma_pack_malformed : Warning > >> def warn_pragma_intrinsic_builtin : Warning< > >> "%0 is not a recognized builtin%select{|; consider including > <intrin.h> > >> to access non-builtin intrinsics}1">, > >> InGroup<IgnoredPragmaIntrinsic>; > >> +// - #pragma optimize > >> +def warn_pragma_optimize : Warning< > >> + "'#pragma optimize' is not supported">, > >> + InGroup<IgnoredPragmaOptimize>; > >> // - #pragma unused > >> def warn_pragma_unused_expected_var : Warning< > >> "expected '#pragma unused' argument to be a variable name">, > >> > >> Modified: cfe/trunk/include/clang/Parse/Parser.h > >> URL: > >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/Parser.h?rev=327959&r1=327958&r2=327959&view=diff > >> > >> > ============================================================================== > >> --- cfe/trunk/include/clang/Parse/Parser.h (original) > >> +++ cfe/trunk/include/clang/Parse/Parser.h Tue Mar 20 01:53:11 2018 > >> @@ -179,6 +179,7 @@ class Parser : public CodeCompletionHand > >> std::unique_ptr<PragmaHandler> MSSection; > >> std::unique_ptr<PragmaHandler> MSRuntimeChecks; > >> std::unique_ptr<PragmaHandler> MSIntrinsic; > >> + std::unique_ptr<PragmaHandler> MSOptimize; > >> std::unique_ptr<PragmaHandler> CUDAForceHostDeviceHandler; > >> std::unique_ptr<PragmaHandler> OptimizeHandler; > >> std::unique_ptr<PragmaHandler> LoopHintHandler; > >> > >> Modified: cfe/trunk/lib/Parse/ParsePragma.cpp > >> URL: > >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParsePragma.cpp?rev=327959&r1=327958&r2=327959&view=diff > >> > >> > ============================================================================== > >> --- cfe/trunk/lib/Parse/ParsePragma.cpp (original) > >> +++ cfe/trunk/lib/Parse/ParsePragma.cpp Tue Mar 20 01:53:11 2018 > >> @@ -220,6 +220,12 @@ struct PragmaMSIntrinsicHandler : public > >> Token &FirstToken) override; > >> }; > >> > >> +struct PragmaMSOptimizeHandler : public PragmaHandler { > >> + PragmaMSOptimizeHandler() : PragmaHandler("optimize") {} > >> + void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, > >> + Token &FirstToken) override; > >> +}; > >> + > >> struct PragmaForceCUDAHostDeviceHandler : public PragmaHandler { > >> PragmaForceCUDAHostDeviceHandler(Sema &Actions) > >> : PragmaHandler("force_cuda_host_device"), Actions(Actions) {} > >> @@ -324,6 +330,8 @@ void Parser::initializePragmaHandlers() > >> PP.AddPragmaHandler(MSRuntimeChecks.get()); > >> MSIntrinsic.reset(new PragmaMSIntrinsicHandler()); > >> PP.AddPragmaHandler(MSIntrinsic.get()); > >> + MSOptimize.reset(new PragmaMSOptimizeHandler()); > >> + PP.AddPragmaHandler(MSOptimize.get()); > >> } > >> > >> if (getLangOpts().CUDA) { > >> @@ -410,6 +418,8 @@ void Parser::resetPragmaHandlers() { > >> MSRuntimeChecks.reset(); > >> PP.RemovePragmaHandler(MSIntrinsic.get()); > >> MSIntrinsic.reset(); > >> + PP.RemovePragmaHandler(MSOptimize.get()); > >> + MSOptimize.reset(); > >> } > >> > >> if (getLangOpts().CUDA) { > >> @@ -2949,6 +2959,61 @@ void PragmaMSIntrinsicHandler::HandlePra > >> PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) > >> << "intrinsic"; > >> } > >> + > >> +// #pragma optimize("gsty", on|off) > >> +void PragmaMSOptimizeHandler::HandlePragma(Preprocessor &PP, > >> + PragmaIntroducerKind > >> Introducer, > >> + Token &Tok) { > >> + SourceLocation StartLoc = Tok.getLocation(); > >> + PP.Lex(Tok); > >> + > >> + if (Tok.isNot(tok::l_paren)) { > >> + PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_lparen) << > >> "optimize"; > >> + return; > >> + } > >> + PP.Lex(Tok); > >> + > >> + if (Tok.isNot(tok::string_literal)) { > >> + PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_string) << > >> "optimize"; > >> + return; > >> + } > >> + // We could syntax check the string but it's probably not worth the > >> effort. > >> + PP.Lex(Tok); > >> + > >> + if (Tok.isNot(tok::comma)) { > >> + PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_comma) << > >> "optimize"; > >> + return; > >> + } > >> + PP.Lex(Tok); > >> + > >> + if (Tok.is(tok::eod) || Tok.is(tok::r_paren)) { > >> + PP.Diag(Tok.getLocation(), diag::warn_pragma_missing_argument) > >> + << "optimize" << /*Expected=*/true << "'on' or 'off'"; > >> + return; > >> + } > >> + IdentifierInfo *II = Tok.getIdentifierInfo(); > >> + if (!II || (!II->isStr("on") && !II->isStr("off"))) { > >> + PP.Diag(Tok.getLocation(), diag::warn_pragma_invalid_argument) > >> + << PP.getSpelling(Tok) << "optimize" << /*Expected=*/true > >> + << "'on' or 'off'"; > >> + return; > >> + } > >> + PP.Lex(Tok); > >> + > >> + if (Tok.isNot(tok::r_paren)) { > >> + PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_rparen) << > >> "optimize"; > >> + return; > >> + } > >> + PP.Lex(Tok); > >> + > >> + if (Tok.isNot(tok::eod)) { > >> + PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) > >> + << "optimize"; > >> + return; > >> + } > >> + PP.Diag(StartLoc, diag::warn_pragma_optimize); > >> +} > >> + > >> void PragmaForceCUDAHostDeviceHandler::HandlePragma( > >> Preprocessor &PP, PragmaIntroducerKind Introducer, Token &Tok) { > >> Token FirstTok = Tok; > >> > >> Modified: cfe/trunk/test/Preprocessor/pragma_microsoft.c > >> URL: > >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/pragma_microsoft.c?rev=327959&r1=327958&r2=327959&view=diff > >> > >> > ============================================================================== > >> --- cfe/trunk/test/Preprocessor/pragma_microsoft.c (original) > >> +++ cfe/trunk/test/Preprocessor/pragma_microsoft.c Tue Mar 20 01:53:11 > >> 2018 > >> @@ -190,3 +190,11 @@ void g() {} > >> #pragma intrinsic(asdf) // no-warning > >> #pragma clang diagnostic pop > >> #pragma intrinsic(asdf) // expected-warning {{'asdf' is not a > recognized > >> builtin; consider including <intrin.h>}} > >> + > >> +#pragma optimize // expected-warning{{missing '(' after > '#pragma > >> optimize'}} > >> +#pragma optimize( // expected-warning{{expected string literal > in > >> '#pragma optimize'}} > >> +#pragma optimize(a // expected-warning{{expected string literal > in > >> '#pragma optimize'}} > >> +#pragma optimize("g" // expected-warning{{expected ',' in '#pragma > >> optimize'}} > >> +#pragma optimize("g", // expected-warning{{missing argument to > >> '#pragma optimize'; expected 'on' or 'off'}} > >> +#pragma optimize("g",xyz // expected-warning{{unexpected argument > 'xyz' > >> to '#pragma optimize'; expected 'on' or 'off'}} > >> +#pragma optimize("g",on) // expected-warning{{#pragma optimize' is not > >> supported}} > >> > >> > >> _______________________________________________ > >> cfe-commits mailing list > >> cfe-commits@lists.llvm.org > >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > > > > > > _______________________________________________ > > cfe-commits mailing list > > cfe-commits@lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits