Hi Andrea, I forgot to add the —in-reply-to on my git send-email.
v5 posted here: https://gcc.gnu.org/pipermail/gcc-patches/2026-July/722346.html Best, Sammy > On Jun 30, 2026, at 4:50 PM, Andrea Pinski <[email protected]> > wrote: > > On Tue, Jun 30, 2026 at 8:49 AM Sammy Al Hashemi <[email protected]> wrote: >> >> The -Wstrict-aliasing warning was gated on flag_strict_aliasing, so >> passing -fno-strict-aliasing silenced the warning even when explicitly >> requested with -Wstrict-aliasing. The warning analysis is purely >> type-based and does not depend on the optimization being active, so >> temporarily enable flag_strict_aliasing around the alias set query >> calls to get meaningful results for the warning. >> >> gcc/c-family/ChangeLog: >> >> * c-warn.cc (strict_aliasing_warning): Remove guard on >> flag_strict_aliasing. Temporarily enable it via RAII around >> alias set queries so the warning fires independently. >> >> gcc/ChangeLog: >> >> * doc/invoke.texi (-Wstrict-aliasing): Document that the >> warning now works independently of -fstrict-aliasing. >> >> gcc/testsuite/ChangeLog: >> >> * c-c++-common/Wstrict-aliasing2-with-fno.c: New test. >> * c-c++-common/Wstrict-aliasing3-with-fno.c: New test. >> >> Signed-off-by: Sammy Al Hashemi <[email protected]> >> --- >> gcc/c-family/c-warn.cc | 8 ++++++-- >> gcc/doc/invoke.texi | 16 ++++++++++------ >> .../c-c++-common/Wstrict-aliasing2-with-fno.c | 12 ++++++++++++ >> .../c-c++-common/Wstrict-aliasing3-with-fno.c | 12 ++++++++++++ >> 4 files changed, 40 insertions(+), 8 deletions(-) >> create mode 100644 gcc/testsuite/c-c++-common/Wstrict-aliasing2-with-fno.c >> create mode 100644 gcc/testsuite/c-c++-common/Wstrict-aliasing3-with-fno.c >> >> diff --git a/gcc/c-family/c-warn.cc b/gcc/c-family/c-warn.cc >> index 1767d2dc090..194b5e3712a 100644 >> --- a/gcc/c-family/c-warn.cc >> +++ b/gcc/c-family/c-warn.cc >> @@ -24,6 +24,7 @@ along with GCC; see the file COPYING3. If not see >> #include "target.h" >> #include "function.h" >> #include "tree.h" >> +#include "cp/cp-tree.h" > > Instead of including a C++ FE header in the shared C/C++ FE common code. > Can you move temp_override from cp/cp-tree.h into c-common.h? > > Thanks, > Andrea > >> #include "c-common.h" >> #include "memmodel.h" >> #include "tm_p.h" >> @@ -701,8 +702,7 @@ strict_aliasing_warning (location_t loc, tree type, tree >> expr) >> STRIP_NOPS (expr); >> tree otype = TREE_TYPE (expr); >> >> - if (!(flag_strict_aliasing >> - && POINTER_TYPE_P (type) >> + if (!(POINTER_TYPE_P (type) >> && POINTER_TYPE_P (otype) >> && !VOID_TYPE_P (TREE_TYPE (type))) >> /* If the type we are casting to is a ref-all pointer >> @@ -710,6 +710,10 @@ strict_aliasing_warning (location_t loc, tree type, >> tree expr) >> || TYPE_REF_CAN_ALIAS_ALL (type)) >> return false; >> >> + /* Temporarily enable strict aliasing so that the alias set query >> + functions return meaningful results for the warning. */ >> + temp_override<int> save (flag_strict_aliasing, 1); >> + >> if ((warn_strict_aliasing > 1) && TREE_CODE (expr) == ADDR_EXPR >> && (DECL_P (TREE_OPERAND (expr, 0)) >> || handled_component_p (TREE_OPERAND (expr, 0)))) >> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi >> index 339d1d2c97a..b361290cee4 100644 >> --- a/gcc/doc/invoke.texi >> +++ b/gcc/doc/invoke.texi >> @@ -8674,17 +8674,21 @@ the implementation. >> @opindex Wstrict-aliasing >> @opindex Wno-strict-aliasing >> @item -Wstrict-aliasing >> -This option is only active when @option{-fstrict-aliasing} is active. >> -It warns about code that might break the strict aliasing rules that the >> -compiler is using for optimization. The warning does not catch all >> +This option warns about code that might break the strict aliasing rules >> +that the compiler uses for optimization when @option{-fstrict-aliasing} >> +is active. This option is independent of @option{-fstrict-aliasing}; >> +it diagnoses code that would violate strict aliasing rules regardless of >> +whether the optimization is enabled. The warning does not catch all >> cases, but does attempt to catch the more common pitfalls. It is >> included in @option{-Wall}. >> It is equivalent to @option{-Wstrict-aliasing=3}. >> >> @item -Wstrict-aliasing=@var{n} >> -This option is only active when @option{-fstrict-aliasing} is active. >> -It warns about code that might break the strict aliasing rules that the >> -compiler is using for optimization. >> +This option warns about code that might break the strict aliasing rules >> +that the compiler uses for optimization when @option{-fstrict-aliasing} >> +is active. This option is independent of @option{-fstrict-aliasing}; >> +it diagnoses code that would violate strict aliasing rules regardless of >> +whether the optimization is enabled. >> Higher levels correspond to higher accuracy (fewer false positives). >> Higher levels also correspond to more effort, similar to the way @option{-O} >> works. >> diff --git a/gcc/testsuite/c-c++-common/Wstrict-aliasing2-with-fno.c >> b/gcc/testsuite/c-c++-common/Wstrict-aliasing2-with-fno.c >> new file mode 100644 >> index 00000000000..c7b223ed91b >> --- /dev/null >> +++ b/gcc/testsuite/c-c++-common/Wstrict-aliasing2-with-fno.c >> @@ -0,0 +1,12 @@ >> +/* Test the usage of option -Wstrict-aliasing. */ >> +/* Make sure it's enabled even when -fno-strict-aliasing. */ >> +/* Set -Wstrict-aliasing=2 so it warns on casts */ >> +/* { dg-do compile } */ >> +/* { dg-options "-Wstrict-aliasing=2 -fno-strict-aliasing" } */ >> + >> +int main(int argc, char *argv[]) >> +{ >> + int x; >> + float *q = (float*) &x; /* { dg-warning "strict-aliasing" } */ >> + return x; >> +} >> diff --git a/gcc/testsuite/c-c++-common/Wstrict-aliasing3-with-fno.c >> b/gcc/testsuite/c-c++-common/Wstrict-aliasing3-with-fno.c >> new file mode 100644 >> index 00000000000..e999b13aec4 >> --- /dev/null >> +++ b/gcc/testsuite/c-c++-common/Wstrict-aliasing3-with-fno.c >> @@ -0,0 +1,12 @@ >> +/* Test the usage of option -Wstrict-aliasing. */ >> +/* Make sure it's enabled even when -fno-strict-aliasing. */ >> +/* Set -Wstrict-aliasing=3 so that it only warns on dereference */ >> +/* { dg-do compile } */ >> +/* { dg-options "-Wstrict-aliasing=3 -fno-strict-aliasing" } */ >> + >> +int main(int argc, char *argv[]) >> +{ >> + int x; >> + *(float*) &x = 42; /* { dg-warning "strict-aliasing" } */ >> + return x; >> +} >> -- >> 2.54.0 >>
