[RFC] c-family: make -fno-permissive upgrade pedwarns
Checks
Commit Message
In the context of the recent discussion, it occurred to me that this semantic
would be useful, but currently there is no easy way to access it. Bikeshedding
welcome; the use of this flag is a bit odd, but it has the advantage of being
accepted without error going back at least to 4.3.
-- 8< --
Currently there is no flag to use to upgrade all currently-enabled pedwarns
from warning to error. -pedantic-errors also enables the -Wpedantic
pedwarns, while -Werror=pedantic uselessly makes only the -Wpedantic
pedwarns errors.
I suggest that since -fpermissive lowers some diagnostics from error to
warning, -fno-permissive could do the reverse.
gcc/ChangeLog:
* doc/invoke.texi: Document -fno-permissive.
gcc/c-family/ChangeLog:
* c.opt (fpermissive): Accept in C and ObjC as well.
* c-opts.cc (c_common_post_options): -fno-permissive sets
global_dc->pedantic_errors.
---
gcc/doc/invoke.texi | 7 +++++++
gcc/c-family/c.opt | 2 +-
gcc/c-family/c-opts.cc | 4 ++++
3 files changed, 12 insertions(+), 1 deletion(-)
base-commit: 62c4d34ec005e95f000ffabd34da440dc62ac346
Comments
On Fri, May 12, 2023 at 10:54 PM Jason Merrill via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> In the context of the recent discussion, it occurred to me that this semantic
> would be useful, but currently there is no easy way to access it. Bikeshedding
> welcome; the use of this flag is a bit odd, but it has the advantage of being
> accepted without error going back at least to 4.3.
>
> -- 8< --
>
> Currently there is no flag to use to upgrade all currently-enabled pedwarns
> from warning to error. -pedantic-errors also enables the -Wpedantic
> pedwarns, while -Werror=pedantic uselessly makes only the -Wpedantic
> pedwarns errors.
>
> I suggest that since -fpermissive lowers some diagnostics from error to
> warning, -fno-permissive could do the reverse.
Hmm, but that makes '-fno-permissive' different from '-fpermissive
-fno-permissive'?
What about '-fpermissive -fno-permissive -fno-permissive' then?
So I think over-loading -fno-permissive with differen semantics from negating
the option is bad.
Richard.
>
> gcc/ChangeLog:
>
> * doc/invoke.texi: Document -fno-permissive.
>
> gcc/c-family/ChangeLog:
>
> * c.opt (fpermissive): Accept in C and ObjC as well.
> * c-opts.cc (c_common_post_options): -fno-permissive sets
> global_dc->pedantic_errors.
> ---
> gcc/doc/invoke.texi | 7 +++++++
> gcc/c-family/c.opt | 2 +-
> gcc/c-family/c-opts.cc | 4 ++++
> 3 files changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index b92b8576027..6198df14382 100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -3438,11 +3438,18 @@ issue. Currently, the only such diagnostic issued by G++ is the one for
> a name having multiple meanings within a class.
>
> @opindex fpermissive
> +@opindex fno-permissive
> @item -fpermissive
> Downgrade some diagnostics about nonconformant code from errors to
> warnings. Thus, using @option{-fpermissive} allows some
> nonconforming code to compile.
>
> +Conversely, @option{-fno-permissive} can be used to upgrade some
> +diagnostics about nonconformant code from warnings to errors. This
> +differs from @option{-pedantic-errors} in that the latter also implies
> +@option{-Wpedantic}; this option does not enable additional
> +diagnostics, only upgrades the severity of those that are enabled.
> +
> @opindex fno-pretty-templates
> @opindex fpretty-templates
> @item -fno-pretty-templates
> diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
> index 3333cddeece..07165d2bbe8 100644
> --- a/gcc/c-family/c.opt
> +++ b/gcc/c-family/c.opt
> @@ -2075,7 +2075,7 @@ C ObjC C++ ObjC++
> Look for and use PCH files even when preprocessing.
>
> fpermissive
> -C++ ObjC++ Var(flag_permissive)
> +C ObjC C++ ObjC++ Var(flag_permissive)
> Downgrade conformance errors to warnings.
>
> fplan9-extensions
> diff --git a/gcc/c-family/c-opts.cc b/gcc/c-family/c-opts.cc
> index c68a2a27469..1973c068d59 100644
> --- a/gcc/c-family/c-opts.cc
> +++ b/gcc/c-family/c-opts.cc
> @@ -1021,6 +1021,10 @@ c_common_post_options (const char **pfilename)
> SET_OPTION_IF_UNSET (&global_options, &global_options_set,
> flag_delete_dead_exceptions, true);
>
> + if (!global_options_set.x_flag_pedantic_errors
> + && global_options_set.x_flag_permissive)
> + global_dc->pedantic_errors = !flag_permissive;
> +
> if (cxx_dialect >= cxx11)
> {
> /* If we're allowing C++0x constructs, don't warn about C++98
>
> base-commit: 62c4d34ec005e95f000ffabd34da440dc62ac346
> --
> 2.31.1
>
On 5/15/23 03:32, Richard Biener wrote:
> On Fri, May 12, 2023 at 10:54 PM Jason Merrill via Gcc-patches
> <gcc-patches@gcc.gnu.org> wrote:
>>
>> In the context of the recent discussion, it occurred to me that this semantic
>> would be useful, but currently there is no easy way to access it. Bikeshedding
>> welcome; the use of this flag is a bit odd, but it has the advantage of being
>> accepted without error going back at least to 4.3.
>>
>> -- 8< --
>>
>> Currently there is no flag to use to upgrade all currently-enabled pedwarns
>> from warning to error. -pedantic-errors also enables the -Wpedantic
>> pedwarns, while -Werror=pedantic uselessly makes only the -Wpedantic
>> pedwarns errors.
>>
>> I suggest that since -fpermissive lowers some diagnostics from error to
>> warning, -fno-permissive could do the reverse.
>
> Hmm, but that makes '-fno-permissive' different from '-fpermissive
> -fno-permissive'?
> What about '-fpermissive -fno-permissive -fno-permissive' then?
>
> So I think over-loading -fno-permissive with differen semantics from negating
> the option is bad.
Fair enough. Any other thoughts? It occurs to me now that it is
already possible to specify this behavior with -pedantic-errors
-Wno-pedantic, maybe that's sufficient if a bit cumbersome.
>> gcc/ChangeLog:
>>
>> * doc/invoke.texi: Document -fno-permissive.
>>
>> gcc/c-family/ChangeLog:
>>
>> * c.opt (fpermissive): Accept in C and ObjC as well.
>> * c-opts.cc (c_common_post_options): -fno-permissive sets
>> global_dc->pedantic_errors.
>> ---
>> gcc/doc/invoke.texi | 7 +++++++
>> gcc/c-family/c.opt | 2 +-
>> gcc/c-family/c-opts.cc | 4 ++++
>> 3 files changed, 12 insertions(+), 1 deletion(-)
>>
>> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
>> index b92b8576027..6198df14382 100644
>> --- a/gcc/doc/invoke.texi
>> +++ b/gcc/doc/invoke.texi
>> @@ -3438,11 +3438,18 @@ issue. Currently, the only such diagnostic issued by G++ is the one for
>> a name having multiple meanings within a class.
>>
>> @opindex fpermissive
>> +@opindex fno-permissive
>> @item -fpermissive
>> Downgrade some diagnostics about nonconformant code from errors to
>> warnings. Thus, using @option{-fpermissive} allows some
>> nonconforming code to compile.
>>
>> +Conversely, @option{-fno-permissive} can be used to upgrade some
>> +diagnostics about nonconformant code from warnings to errors. This
>> +differs from @option{-pedantic-errors} in that the latter also implies
>> +@option{-Wpedantic}; this option does not enable additional
>> +diagnostics, only upgrades the severity of those that are enabled.
>> +
>> @opindex fno-pretty-templates
>> @opindex fpretty-templates
>> @item -fno-pretty-templates
>> diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
>> index 3333cddeece..07165d2bbe8 100644
>> --- a/gcc/c-family/c.opt
>> +++ b/gcc/c-family/c.opt
>> @@ -2075,7 +2075,7 @@ C ObjC C++ ObjC++
>> Look for and use PCH files even when preprocessing.
>>
>> fpermissive
>> -C++ ObjC++ Var(flag_permissive)
>> +C ObjC C++ ObjC++ Var(flag_permissive)
>> Downgrade conformance errors to warnings.
>>
>> fplan9-extensions
>> diff --git a/gcc/c-family/c-opts.cc b/gcc/c-family/c-opts.cc
>> index c68a2a27469..1973c068d59 100644
>> --- a/gcc/c-family/c-opts.cc
>> +++ b/gcc/c-family/c-opts.cc
>> @@ -1021,6 +1021,10 @@ c_common_post_options (const char **pfilename)
>> SET_OPTION_IF_UNSET (&global_options, &global_options_set,
>> flag_delete_dead_exceptions, true);
>>
>> + if (!global_options_set.x_flag_pedantic_errors
>> + && global_options_set.x_flag_permissive)
>> + global_dc->pedantic_errors = !flag_permissive;
>> +
>> if (cxx_dialect >= cxx11)
>> {
>> /* If we're allowing C++0x constructs, don't warn about C++98
>>
>> base-commit: 62c4d34ec005e95f000ffabd34da440dc62ac346
>> --
>> 2.31.1
>>
>
On Mon, May 15, 2023 at 3:56 PM Jason Merrill <jason@redhat.com> wrote:
>
> On 5/15/23 03:32, Richard Biener wrote:
> > On Fri, May 12, 2023 at 10:54 PM Jason Merrill via Gcc-patches
> > <gcc-patches@gcc.gnu.org> wrote:
> >>
> >> In the context of the recent discussion, it occurred to me that this semantic
> >> would be useful, but currently there is no easy way to access it. Bikeshedding
> >> welcome; the use of this flag is a bit odd, but it has the advantage of being
> >> accepted without error going back at least to 4.3.
> >>
> >> -- 8< --
> >>
> >> Currently there is no flag to use to upgrade all currently-enabled pedwarns
> >> from warning to error. -pedantic-errors also enables the -Wpedantic
> >> pedwarns, while -Werror=pedantic uselessly makes only the -Wpedantic
> >> pedwarns errors.
> >>
> >> I suggest that since -fpermissive lowers some diagnostics from error to
> >> warning, -fno-permissive could do the reverse.
> >
> > Hmm, but that makes '-fno-permissive' different from '-fpermissive
> > -fno-permissive'?
> > What about '-fpermissive -fno-permissive -fno-permissive' then?
> >
> > So I think over-loading -fno-permissive with differen semantics from negating
> > the option is bad.
>
> Fair enough. Any other thoughts? It occurs to me now that it is
> already possible to specify this behavior with -pedantic-errors
> -Wno-pedantic, maybe that's sufficient if a bit cumbersome.
I guess so. Maybe the -fpermissive documentation could hint at
that for this case?
Richard.
> >> gcc/ChangeLog:
> >>
> >> * doc/invoke.texi: Document -fno-permissive.
> >>
> >> gcc/c-family/ChangeLog:
> >>
> >> * c.opt (fpermissive): Accept in C and ObjC as well.
> >> * c-opts.cc (c_common_post_options): -fno-permissive sets
> >> global_dc->pedantic_errors.
> >> ---
> >> gcc/doc/invoke.texi | 7 +++++++
> >> gcc/c-family/c.opt | 2 +-
> >> gcc/c-family/c-opts.cc | 4 ++++
> >> 3 files changed, 12 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> >> index b92b8576027..6198df14382 100644
> >> --- a/gcc/doc/invoke.texi
> >> +++ b/gcc/doc/invoke.texi
> >> @@ -3438,11 +3438,18 @@ issue. Currently, the only such diagnostic issued by G++ is the one for
> >> a name having multiple meanings within a class.
> >>
> >> @opindex fpermissive
> >> +@opindex fno-permissive
> >> @item -fpermissive
> >> Downgrade some diagnostics about nonconformant code from errors to
> >> warnings. Thus, using @option{-fpermissive} allows some
> >> nonconforming code to compile.
> >>
> >> +Conversely, @option{-fno-permissive} can be used to upgrade some
> >> +diagnostics about nonconformant code from warnings to errors. This
> >> +differs from @option{-pedantic-errors} in that the latter also implies
> >> +@option{-Wpedantic}; this option does not enable additional
> >> +diagnostics, only upgrades the severity of those that are enabled.
> >> +
> >> @opindex fno-pretty-templates
> >> @opindex fpretty-templates
> >> @item -fno-pretty-templates
> >> diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
> >> index 3333cddeece..07165d2bbe8 100644
> >> --- a/gcc/c-family/c.opt
> >> +++ b/gcc/c-family/c.opt
> >> @@ -2075,7 +2075,7 @@ C ObjC C++ ObjC++
> >> Look for and use PCH files even when preprocessing.
> >>
> >> fpermissive
> >> -C++ ObjC++ Var(flag_permissive)
> >> +C ObjC C++ ObjC++ Var(flag_permissive)
> >> Downgrade conformance errors to warnings.
> >>
> >> fplan9-extensions
> >> diff --git a/gcc/c-family/c-opts.cc b/gcc/c-family/c-opts.cc
> >> index c68a2a27469..1973c068d59 100644
> >> --- a/gcc/c-family/c-opts.cc
> >> +++ b/gcc/c-family/c-opts.cc
> >> @@ -1021,6 +1021,10 @@ c_common_post_options (const char **pfilename)
> >> SET_OPTION_IF_UNSET (&global_options, &global_options_set,
> >> flag_delete_dead_exceptions, true);
> >>
> >> + if (!global_options_set.x_flag_pedantic_errors
> >> + && global_options_set.x_flag_permissive)
> >> + global_dc->pedantic_errors = !flag_permissive;
> >> +
> >> if (cxx_dialect >= cxx11)
> >> {
> >> /* If we're allowing C++0x constructs, don't warn about C++98
> >>
> >> base-commit: 62c4d34ec005e95f000ffabd34da440dc62ac346
> >> --
> >> 2.31.1
> >>
> >
>
@@ -3438,11 +3438,18 @@ issue. Currently, the only such diagnostic issued by G++ is the one for
a name having multiple meanings within a class.
@opindex fpermissive
+@opindex fno-permissive
@item -fpermissive
Downgrade some diagnostics about nonconformant code from errors to
warnings. Thus, using @option{-fpermissive} allows some
nonconforming code to compile.
+Conversely, @option{-fno-permissive} can be used to upgrade some
+diagnostics about nonconformant code from warnings to errors. This
+differs from @option{-pedantic-errors} in that the latter also implies
+@option{-Wpedantic}; this option does not enable additional
+diagnostics, only upgrades the severity of those that are enabled.
+
@opindex fno-pretty-templates
@opindex fpretty-templates
@item -fno-pretty-templates
@@ -2075,7 +2075,7 @@ C ObjC C++ ObjC++
Look for and use PCH files even when preprocessing.
fpermissive
-C++ ObjC++ Var(flag_permissive)
+C ObjC C++ ObjC++ Var(flag_permissive)
Downgrade conformance errors to warnings.
fplan9-extensions
@@ -1021,6 +1021,10 @@ c_common_post_options (const char **pfilename)
SET_OPTION_IF_UNSET (&global_options, &global_options_set,
flag_delete_dead_exceptions, true);
+ if (!global_options_set.x_flag_pedantic_errors
+ && global_options_set.x_flag_permissive)
+ global_dc->pedantic_errors = !flag_permissive;
+
if (cxx_dialect >= cxx11)
{
/* If we're allowing C++0x constructs, don't warn about C++98