c-opts.c (c_common_decode_option): Add warn_strict_aliasing to -Wall.

gcc:
	* c-opts.c (c_common_decode_option): Add warn_strict_aliasing to
	-Wall.
	* c-typeck.c (build_c_cast): Use warn_strict_aliasing, tweak
	message.
	* flags.h (warn_strict_aliasing): Declare.
	* toplev.c (warn_strict_aliasing): Define.
	(lang_independent_options): Add it.
	* doc/invoke.texi (-Wstrict-aliasing): Document it.
testsuite:
	* gcc.dg/alias-1.c: Tweak expected warning.

From-SVN: r57938
This commit is contained in:
Nathan Sidwell 2002-10-08 19:20:18 +00:00 committed by Nathan Sidwell
parent b7932de6a1
commit bf52f89914
8 changed files with 45 additions and 9 deletions

View File

@ -1,3 +1,14 @@
2002-10-08 Nathan Sidwell <nathan@codesourcery.com>
* c-opts.c (c_common_decode_option): Add warn_strict_aliasing to
-Wall.
* c-typeck.c (build_c_cast): Use warn_strict_aliasing, tweak
message.
* flags.h (warn_strict_aliasing): Declare.
* toplev.c (warn_strict_aliasing): Define.
(lang_independent_options): Add it.
* doc/invoke.texi (-Wstrict-aliasing): Document it.
2002-10-08 Zack Weinberg <zack@codesourcery.com> 2002-10-08 Zack Weinberg <zack@codesourcery.com>
* system.h (GCCBUGURL): Delete. * system.h (GCCBUGURL): Delete.

View File

@ -702,7 +702,8 @@ c_common_decode_option (argc, argv)
warn_sequence_point = on; /* Was C only. */ warn_sequence_point = on; /* Was C only. */
warn_sign_compare = on; /* Was C++ only. */ warn_sign_compare = on; /* Was C++ only. */
warn_switch = on; warn_switch = on;
warn_strict_aliasing = on;
/* Only warn about unknown pragmas that are not in system /* Only warn about unknown pragmas that are not in system
headers. */ headers. */
warn_unknown_pragmas = on; warn_unknown_pragmas = on;

View File

@ -3763,17 +3763,17 @@ build_c_cast (type, expr)
&& TREE_CODE (otype) == POINTER_TYPE && TREE_CODE (otype) == POINTER_TYPE
&& TREE_CODE (expr) == ADDR_EXPR && TREE_CODE (expr) == ADDR_EXPR
&& DECL_P (TREE_OPERAND (expr, 0)) && DECL_P (TREE_OPERAND (expr, 0))
&& flag_strict_aliasing && extra_warnings && flag_strict_aliasing && warn_strict_aliasing
&& !VOID_TYPE_P (TREE_TYPE (type))) && !VOID_TYPE_P (TREE_TYPE (type)))
{ {
/* Casting the address of a decl to non void pointer. Warn /* Casting the address of a decl to non void pointer. Warn
if the cast breaks type based aliasing. */ if the cast breaks type based aliasing. */
if (!COMPLETE_TYPE_P (TREE_TYPE (type))) if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
warning ("type punning to incomplete type might not be type based aliasing safe"); warning ("type-punning to incomplete type might break strict-aliasing rules");
else if (!alias_sets_conflict_p else if (!alias_sets_conflict_p
(get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0))), (get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0))),
get_alias_set (TREE_TYPE (type)))) get_alias_set (TREE_TYPE (type))))
warning ("type punning cast is not type based aliasing safe"); warning ("dereferencing type-punned pointer will break strict-aliasing rules");
} }
ovalue = value; ovalue = value;

View File

@ -228,7 +228,7 @@ in the following sections.
-Wno-import -Wnonnull -Wpacked -Wpadded @gol -Wno-import -Wnonnull -Wpacked -Wpadded @gol
-Wparentheses -Wpointer-arith -Wredundant-decls @gol -Wparentheses -Wpointer-arith -Wredundant-decls @gol
-Wreturn-type -Wsequence-point -Wshadow @gol -Wreturn-type -Wsequence-point -Wshadow @gol
-Wsign-compare -Wswitch -Wswitch-default -Wswitch-enum @gol -Wsign-compare -Wstrict-aliasing -Wswitch -Wswitch-default -Wswitch-enum @gol
-Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized @gol -Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized @gol
-Wunknown-pragmas -Wunreachable-code @gol -Wunknown-pragmas -Wunreachable-code @gol
-Wunused -Wunused-function -Wunused-label -Wunused-parameter @gol -Wunused -Wunused-function -Wunused-label -Wunused-parameter @gol
@ -2341,6 +2341,14 @@ GCC@. If this command line option is used, warnings will even be issued
for unknown pragmas in system header files. This is not the case if for unknown pragmas in system header files. This is not the case if
the warnings were only enabled by the @option{-Wall} command line option. the warnings were only enabled by the @option{-Wall} command line option.
@item -Wstrict-aliasing
@opindex Wstrict-aliasing
This option is only active when @option{-fstrict-aliasing} is active.
It warns about code which might break the strict aliasing rules that the
compiler is using for optimization. The warning does not catch all
cases, but does attempt to catch the more common pitfalls. It is
included in @option{-Wall}.
@item -Wall @item -Wall
@opindex Wall @opindex Wall
All of the above @samp{-W} options combined. This enables all the All of the above @samp{-W} options combined. This enables all the

View File

@ -184,6 +184,11 @@ extern int warn_disabled_optimization;
extern int warn_deprecated_decl; extern int warn_deprecated_decl;
/* Nonzero means warn about constructs which might not be strict
aliasing safe. */
extern int warn_strict_aliasing;
/* Nonzero if generating code to do profiling. */ /* Nonzero if generating code to do profiling. */
extern int profile_flag; extern int profile_flag;

View File

@ -1,3 +1,7 @@
2002-10-08 Nathan Sidwell <nathan@codesourcery.com>
* gcc.dg/alias-1.c: Tweak expected warning.
2002-10-06 D.Venkatasubramanian <dvenkat@noida.hcltech.com> 2002-10-06 D.Venkatasubramanian <dvenkat@noida.hcltech.com>
* gcc.dg/20020411-1.c: Disable for 16-bit "int". * gcc.dg/20020411-1.c: Disable for 16-bit "int".

View File

@ -1,5 +1,5 @@
// { dg-do compile } // { dg-do compile }
// { dg-options "-W -fstrict-aliasing" } // { dg-options "-Wstrict-aliasing -fstrict-aliasing" }
// Copyright (C) 2002 Free Software Foundation, Inc. // Copyright (C) 2002 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 29 Sep 2002 <nathan@codesourcery.com> // Contributed by Nathan Sidwell 29 Sep 2002 <nathan@codesourcery.com>
@ -19,9 +19,9 @@ YYSTYPE
addSibMacro( addSibMacro(
YYSTYPE list ) YYSTYPE list )
{ {
tDefEntry** ppT = (tDefEntry**)&list; // { dg-warning "type punning cast" "" } tDefEntry** ppT = (tDefEntry**)&list; // { dg-warning "type-punned pointer" "" }
struct incomplete *p = (struct incomplete *)&list; // { dg-warning "type punning to incomplete" "" } struct incomplete *p = (struct incomplete *)&list; // { dg-warning "type-punning to incomplete" "" }
return list; return list;
} }

View File

@ -1511,6 +1511,11 @@ int warn_missing_noreturn;
int warn_deprecated_decl = 1; int warn_deprecated_decl = 1;
/* Nonzero means warn about constructs which might not be
strict-aliasing safe. */
int warn_strict_aliasing;
/* Likewise for -W. */ /* Likewise for -W. */
static const lang_independent_options W_options[] = static const lang_independent_options W_options[] =
@ -1556,7 +1561,9 @@ static const lang_independent_options W_options[] =
{"deprecated-declarations", &warn_deprecated_decl, 1, {"deprecated-declarations", &warn_deprecated_decl, 1,
N_("Warn about uses of __attribute__((deprecated)) declarations") }, N_("Warn about uses of __attribute__((deprecated)) declarations") },
{"missing-noreturn", &warn_missing_noreturn, 1, {"missing-noreturn", &warn_missing_noreturn, 1,
N_("Warn about functions which might be candidates for attribute noreturn") } N_("Warn about functions which might be candidates for attribute noreturn") },
{"strict-aliasing", &warn_strict_aliasing, 1,
N_ ("Warn about code which might break the strict aliasing rules") }
}; };
void void