Re: r327959 - [ms] Parse #pragma optimize and ignore it behind its own flag
This is a bit confusing, I think. We use -Wignored-pragmas for pragmas that clang doesn't parse, and also for ignored #pragma intrinsics. -Wunknown-pragmas isn't used that much, but there is e.g. "pragma STDC FENV_ACCESS ON is not supported, ignoring pragma". Note that the text says it's unsupported and ignored, not that it's unknown. In terms of warning name, -Wignored-pragmas, seems a better fit, so maybe we should leave it as is. On Wed, Mar 21, 2018 at 9:56 PM, Hans Wennborgwrote: > Not sure either, but I think the ignored warning is used for pragmas > that clang fails to parse, so maybe unsupported is better. > > On Wed, Mar 21, 2018 at 9:33 PM, Nico Weber wrote: >> Ah! Hm, maybe that's the better group for this anyway? Not sure. >> >> On Wed, Mar 21, 2018, 9:03 PM Hans Wennborg 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 >>> 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 >>> > wrote: >>> >> >>> >> Author: hans >>> >> Date: Tue Mar 20 01:53:11 2018 >>> >> New Revision: 327959 >>> >> >>> >> URL: http://llvm.org/viewvc/llvm-project?rev=327959=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=327958=327959=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=327958=327959=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; >>> >> def warn_pragma_expected_identifier : Warning< >>> >>"expected identifier in '#pragma %0' - ignored">, >>> >> InGroup; >>> >> +def warn_pragma_expected_string : Warning< >>> >> + "expected string literal in '#pragma %0' - ignoring">, >>> >> InGroup; >>> >> +def warn_pragma_missing_argument : Warning< >>> >> + "missing argument to '#pragma %0'%select{|; expected %2}1">, >>> >> InGroup; >>> >> +def warn_pragma_invalid_argument : Warning< >>> >> + "unexpected argument '%0' to '#pragma %1'%select{|; expected %3}2">, >>> >> InGroup; >>> >> >>> >>
Re: r327959 - [ms] Parse #pragma optimize and ignore it behind its own flag
Not sure either, but I think the ignored warning is used for pragmas that clang fails to parse, so maybe unsupported is better. On Wed, Mar 21, 2018 at 9:33 PM, Nico Weberwrote: > Ah! Hm, maybe that's the better group for this anyway? Not sure. > > On Wed, Mar 21, 2018, 9:03 PM Hans Wennborg 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 >> 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 >> > wrote: >> >> >> >> Author: hans >> >> Date: Tue Mar 20 01:53:11 2018 >> >> New Revision: 327959 >> >> >> >> URL: http://llvm.org/viewvc/llvm-project?rev=327959=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=327958=327959=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=327958=327959=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; >> >> def warn_pragma_expected_identifier : Warning< >> >>"expected identifier in '#pragma %0' - ignored">, >> >> InGroup; >> >> +def warn_pragma_expected_string : Warning< >> >> + "expected string literal in '#pragma %0' - ignoring">, >> >> InGroup; >> >> +def warn_pragma_missing_argument : Warning< >> >> + "missing argument to '#pragma %0'%select{|; expected %2}1">, >> >> InGroup; >> >> +def warn_pragma_invalid_argument : Warning< >> >> + "unexpected argument '%0' to '#pragma %1'%select{|; expected %3}2">, >> >> InGroup; >> >> >> >> // '#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; >> >> +def warn_pragma_expected_comma : Warning< >> >> + "expected ',' in '#pragma %0'">, InGroup; >> >> def warn_pragma_expected_punc : Warning< >> >>"expected ')' or ',' in '#pragma %0'">, InGroup; >> >> def warn_pragma_expected_non_wide_string : Warning< >> >> @@ -960,6 +968,10 @@ def warn_pragma_pack_malformed :
Re: r327959 - [ms] Parse #pragma optimize and ignore it behind its own flag
Ah! Hm, maybe that's the better group for this anyway? Not sure. On Wed, Mar 21, 2018, 9:03 PM Hans Wennborgwrote: > 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 > 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 > > wrote: > >> > >> Author: hans > >> Date: Tue Mar 20 01:53:11 2018 > >> New Revision: 327959 > >> > >> URL: http://llvm.org/viewvc/llvm-project?rev=327959=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=327958=327959=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=327958=327959=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; > >> def warn_pragma_expected_identifier : Warning< > >>"expected identifier in '#pragma %0' - ignored">, > >> InGroup; > >> +def warn_pragma_expected_string : Warning< > >> + "expected string literal in '#pragma %0' - ignoring">, > >> InGroup; > >> +def warn_pragma_missing_argument : Warning< > >> + "missing argument to '#pragma %0'%select{|; expected %2}1">, > >> InGroup; > >> +def warn_pragma_invalid_argument : Warning< > >> + "unexpected argument '%0' to '#pragma %1'%select{|; expected %3}2">, > >> InGroup; > >> > >> // '#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; > >> +def warn_pragma_expected_comma : Warning< > >> + "expected ',' in '#pragma %0'">, InGroup; > >> def warn_pragma_expected_punc : Warning< > >>"expected ')' or ',' in '#pragma %0'">, InGroup; > >> 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 > > >> to access non-builtin intrinsics}1">, > >>InGroup; > >> +// - #pragma optimize > >> +def warn_pragma_optimize : Warning< > >> + "'#pragma optimize' is not supported">, > >> + InGroup; > >> // -
Re: r327959 - [ms] Parse #pragma optimize and ignore it behind its own flag
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-commitswrote: > 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 > wrote: >> >> Author: hans >> Date: Tue Mar 20 01:53:11 2018 >> New Revision: 327959 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=327959=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=327958=327959=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=327958=327959=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; >> def warn_pragma_expected_identifier : Warning< >>"expected identifier in '#pragma %0' - ignored">, >> InGroup; >> +def warn_pragma_expected_string : Warning< >> + "expected string literal in '#pragma %0' - ignoring">, >> InGroup; >> +def warn_pragma_missing_argument : Warning< >> + "missing argument to '#pragma %0'%select{|; expected %2}1">, >> InGroup; >> +def warn_pragma_invalid_argument : Warning< >> + "unexpected argument '%0' to '#pragma %1'%select{|; expected %3}2">, >> InGroup; >> >> // '#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; >> +def warn_pragma_expected_comma : Warning< >> + "expected ',' in '#pragma %0'">, InGroup; >> def warn_pragma_expected_punc : Warning< >>"expected ')' or ',' in '#pragma %0'">, InGroup; >> 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 >> to access non-builtin intrinsics}1">, >>InGroup; >> +// - #pragma optimize >> +def warn_pragma_optimize : Warning< >> + "'#pragma optimize' is not supported">, >> + InGroup; >> // - #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=327958=327959=diff >> >>
Re: r327959 - [ms] Parse #pragma optimize and ignore it behind its own flag
>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=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=327958=327959=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=327958=327959=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; > def warn_pragma_expected_identifier : Warning< >"expected identifier in '#pragma %0' - ignored">, > InGroup; > +def warn_pragma_expected_string : Warning< > + "expected string literal in '#pragma %0' - ignoring">, > InGroup; > +def warn_pragma_missing_argument : Warning< > + "missing argument to '#pragma %0'%select{|; expected %2}1">, > InGroup; > +def warn_pragma_invalid_argument : Warning< > + "unexpected argument '%0' to '#pragma %1'%select{|; expected %3}2">, > InGroup; > > // '#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; > +def warn_pragma_expected_comma : Warning< > + "expected ',' in '#pragma %0'">, InGroup; > def warn_pragma_expected_punc : Warning< >"expected ')' or ',' in '#pragma %0'">, InGroup; > 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 > to access non-builtin intrinsics}1">, >InGroup; > +// - #pragma optimize > +def warn_pragma_optimize : Warning< > + "'#pragma optimize' is not supported">, > + InGroup; > // - #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=327958=327959=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 MSSection; >std::unique_ptr MSRuntimeChecks; >std::unique_ptr MSIntrinsic; > + std::unique_ptr MSOptimize; >std::unique_ptr