Re: r327959 - [ms] Parse #pragma optimize and ignore it behind its own flag

2018-03-22 Thread Hans Wennborg via cfe-commits
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 Wennborg  wrote:
> 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

2018-03-21 Thread Hans Wennborg via cfe-commits
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;
>> >>
>> >>  // '#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

2018-03-21 Thread Nico Weber via cfe-commits
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 : 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

2018-03-21 Thread Hans Wennborg via cfe-commits
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;
>>  // - #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

2018-03-21 Thread Nico Weber via cfe-commits
>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