On Mon, 2 May 2022, Boris Kolpackov wrote:
Jakub Jelinek <ja...@redhat.com> writes:
The first release candidate for GCC 12.1 is available [...]
There is an unfixed bogus warning that is a regression in 12
and that I think will have a pretty wide effect (any code
that assigns/appends a 1-char string literal to std::string):
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105329
For example, in my relatively small codebase I had about 20
instances of this warning. Seeing that it's enabled as part
of -Wall (not just -Wextra), I believe there will be a lot
of grumpy users.
There is a proposed work around in this (duplicate) bug that
looks pretty simple:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104336
Perhaps it makes sense to consider it?
Please no, that workaround looks like a fragile hack (basically writing
a+b-a to obfuscate b) that may break if you look at it sideways and likely
makes the generated code a bit worse. Besides, we should take it as a hint
that user code is also likely to trigger the warning by accident.
IMO there are several ways to make progress on this in parallel:
* improve the optimizer (as investigated by Andrew)
* tweak the warning so it becomes either cleverer or less eager (maybe
even use the fact that this special case is in a system header? that
should be a last resort though)
* battle that has already been lost, no need to rehash it:
--- a/gcc/c-family/c.opt
+++ b/gcc/c-family/c.opt
@@ -1450,3 +1450,3 @@ Warn when a declaration has duplicate const,
volatile, restrict or _Atomic speci
Wrestrict
-C ObjC C++ ObjC++ Var(warn_restrict) Warning LangEnabledBy(C ObjC C++ ObjC++,
Wall)
+C ObjC C++ ObjC++ Var(warn_restrict) Warning LangEnabledBy(C ObjC C++ ObjC++,
Wextra)
Warn when an argument passed to a restrict-qualified parameter aliases with
Or admit that
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -5729,4 +5729,3 @@ by this option and not enabled by the latter and vice
versa.
This enables all the warnings about constructions that some users
-consider questionable, and that are easy to avoid (or modify to
-prevent the warning), even in conjunction with macros. This also
+consider questionable. This also
enables some language-specific warnings described in @ref{C++ Dialect
--
Marc Glisse