c.opt (Waddress): New.

2007-02-19  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>

	* c.opt (Waddress): New.
	* common.opt (Walways-true): Delete.
	(Wstring-literal-comparison): Delete.
	* doc/invoke.texi (Warning Options): Delete -Walways-true and
	-Wstring-literal-comparison. Add -Waddress.
	(Waddress): New.
	(Walways-true): Delete.
	(Wstring-literal-comparison): Delete.
	* doc/extend.texi (#pragma GCC diagnostic): Use -Wformat
	consistently instead of -Walways-true in example.
	* c-opts.c (c_common_handle_option): -Waddress is enabled by -Wall.
	* c-typeck.c (parser_build_binary_op): Replace
	-Wstring-literal-comparison and -Walways-true with -Waddress.
	* c-common.c (c_common_truthvalue_conversion): Replace -Walways-true
	with -Waddress.

cp/
	* typeck.c (build_binary_op): Replace -Wstring-literal-comparison
	and -Walways-true with -Waddress.
	* cvt.c (convert_to_void): Replace unconditional warning with
	-Waddress.

testsuite/
	* gcc.dg/20031012-1.c: Replace -Walways-true with -Waddress.
	* gcc.dg/Walways-true-1.c: Likewise.
	* gcc.dg/weak/weak-3.c: Likewise.
	* gcc.dg/Werror-1.c: Likewise.
	* gcc.dg/Werror-3.c: Likewise.
	* gcc.dg/Werror-4.c: Likewise.
	* gcc.dg/Werror-5.c: Likewise.
	* gcc.dg/Werror-6.c: Likewise.
	* gcc.dg/Werror-7.c: Likewise.
	* gcc.dg/Werror-8.c: Likewise.
	* gcc.dg/Werror-10.c: Likewise.
	* gcc.dg/Werror-11.c: Likewise.
	* gcc.dg/Werror-12.c: Likewise.
	* g++.old-deja/g++.mike/warn8.C: Likewise.
	* g++.dg/warn/Walways-true-1.C: Likewise.
	* g++.dg/warn/Walways-true-2.C: Likewise.
	* g++.dg/warn/noeffect8.C: Warn only with -Waddress.
	* g++.dg/warn/Wstring-literal-comparison-1.C: Replace
	-Wstring-literal-comparison with -Waddress.
	* gcc.dg/Wstring-literal-comparison-4.c: Replace
	-Wno-string-literal-comparison with -Wno-address.

From-SVN: r122136
This commit is contained in:
Manuel López-Ibáñez 2007-02-19 20:02:28 +00:00
parent 459ffad3fd
commit c116cd05fb
36 changed files with 111 additions and 70 deletions

View File

@ -1,3 +1,21 @@
2007-02-19 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
* c.opt (Waddress): New.
* common.opt (Walways-true): Delete.
(Wstring-literal-comparison): Delete.
* doc/invoke.texi (Warning Options): Delete -Walways-true and
-Wstring-literal-comparison. Add -Waddress.
(Waddress): New.
(Walways-true): Delete.
(Wstring-literal-comparison): Delete.
* doc/extend.texi (#pragma GCC diagnostic): Use -Wformat
consistently instead of -Walways-true in example.
* c-opts.c (c_common_handle_option): -Waddress is enabled by -Wall.
* c-typeck.c (parser_build_binary_op): Replace
-Wstring-literal-comparison and -Walways-true with -Waddress.
* c-common.c (c_common_truthvalue_conversion): Replace -Walways-true
with -Waddress.
2007-02-19 Eric Botcazou <ebotcazou@adacore.com>
* tree-cfg.c (dump_function_to_file): Be prepared for functions

View File

@ -2716,7 +2716,7 @@ c_common_truthvalue_conversion (tree expr)
if (decl_with_nonnull_addr_p (inner))
{
/* Common Ada/Pascal programmer's mistake. */
warning (OPT_Walways_true,
warning (OPT_Waddress,
"the address of %qD will always evaluate as %<true%>",
inner);
return truthvalue_true_node;

View File

@ -395,9 +395,8 @@ c_common_handle_option (size_t scode, const char *arg, int value)
warn_sign_compare = value;
warn_switch = value;
warn_strict_aliasing = value;
warn_address = value;
warn_strict_overflow = value;
warn_string_literal_comparison = value;
warn_always_true = value;
warn_array_bounds = value;
/* Only warn about unknown pragmas that are not in system

View File

@ -2640,13 +2640,11 @@ parser_build_binary_op (enum tree_code code, struct c_expr arg1,
{
if ((code1 == STRING_CST && !integer_zerop (arg2.value))
|| (code2 == STRING_CST && !integer_zerop (arg1.value)))
warning (OPT_Wstring_literal_comparison,
"comparison with string literal");
warning (OPT_Waddress, "comparison with string literal results in unspecified behaviour");
}
else if (TREE_CODE_CLASS (code) == tcc_comparison
&& (code1 == STRING_CST || code2 == STRING_CST))
warning (OPT_Wstring_literal_comparison,
"comparison with string literal");
warning (OPT_Waddress, "comparison with string literal results in unspecified behaviour");
if (TREE_OVERFLOW_P (result.value)
&& !TREE_OVERFLOW_P (arg1.value)
@ -8025,7 +8023,7 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
{
if (TREE_CODE (op0) == ADDR_EXPR
&& decl_with_nonnull_addr_p (TREE_OPERAND (op0, 0)))
warning (OPT_Walways_true, "the address of %qD will never be NULL",
warning (OPT_Waddress, "the address of %qD will never be NULL",
TREE_OPERAND (op0, 0));
result_type = type0;
}
@ -8033,7 +8031,7 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
{
if (TREE_CODE (op1) == ADDR_EXPR
&& decl_with_nonnull_addr_p (TREE_OPERAND (op1, 0)))
warning (OPT_Walways_true, "the address of %qD will never be NULL",
warning (OPT_Waddress, "the address of %qD will never be NULL",
TREE_OPERAND (op1, 0));
result_type = type1;
}

View File

@ -116,6 +116,10 @@ Wabi
C++ ObjC++ Var(warn_abi) Warning
Warn about things that will change when compiling with an ABI-compliant compiler
Waddress
C ObjC C++ ObjC++ Var(warn_address) Warning
Warn about suspicious uses of memory addresses
Wall
C ObjC C++ ObjC++ Warning
Enable most warning messages

View File

@ -74,10 +74,6 @@ Waggregate-return
Common Var(warn_aggregate_return) Warning
Warn about returning structures, unions or arrays
Walways-true
Common Var(warn_always_true) Warning
Warn about comparisons that always evaluate to true
Warray-bounds
Common Var(warn_array_bounds)
Warn if an array is accessed out of bounds
@ -166,10 +162,6 @@ Wstrict-overflow=
Common Joined UInteger
Warn about optimizations that assume that signed overflow is undefined
Wstring-literal-comparison
Common Var(warn_string_literal_comparison) Warning
Warn about comparisons to constant string literals
Wswitch
Common Var(warn_switch) Warning
Warn about enumerated switches, with no default, missing a case

View File

@ -1,3 +1,10 @@
2007-02-19 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
* typeck.c (build_binary_op): Replace -Wstring-literal-comparison
and -Walways-true with -Waddress.
* cvt.c (convert_to_void): Replace unconditional warning with
-Waddress.
2007-02-18 Kazu Hirata <kazu@codesourcery.com>
* decl.c, tree.c: Fix comment typos.

View File

@ -929,7 +929,7 @@ convert_to_void (tree expr, const char *implicit)
else if (implicit && probe == expr && is_overloaded_fn (probe))
{
/* Only warn when there is no &. */
warning (0, "%s is a reference, not call, to function %qE",
warning (OPT_Waddress, "%s is a reference, not call, to function %qE",
implicit, expr);
if (TREE_CODE (expr) == COMPONENT_REF)
expr = TREE_OPERAND (expr, 0);

View File

@ -3319,8 +3319,7 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
"comparing floating point with == or != is unsafe");
if ((TREE_CODE (orig_op0) == STRING_CST && !integer_zerop (op1))
|| (TREE_CODE (orig_op1) == STRING_CST && !integer_zerop (op0)))
warning (OPT_Wstring_literal_comparison,
"comparison with string literal");
warning (OPT_Waddress, "comparison with string literal results in unspecified behaviour");
build_type = boolean_type_node;
if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
@ -3337,7 +3336,7 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
{
if (TREE_CODE (op0) == ADDR_EXPR
&& decl_with_nonnull_addr_p (TREE_OPERAND (op0, 0)))
warning (OPT_Walways_true, "the address of %qD will never be NULL",
warning (OPT_Waddress, "the address of %qD will never be NULL",
TREE_OPERAND (op0, 0));
result_type = type0;
}
@ -3346,7 +3345,7 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
{
if (TREE_CODE (op1) == ADDR_EXPR
&& decl_with_nonnull_addr_p (TREE_OPERAND (op1, 0)))
warning (OPT_Walways_true, "the address of %qD will never be NULL",
warning (OPT_Waddress, "the address of %qD will never be NULL",
TREE_OPERAND (op1, 0));
result_type = type1;
}
@ -3495,8 +3494,7 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
case GT_EXPR:
if (TREE_CODE (orig_op0) == STRING_CST
|| TREE_CODE (orig_op1) == STRING_CST)
warning (OPT_Wstring_literal_comparison,
"comparison with string literal");
warning (OPT_Waddress, "comparison with string literal results in unspecified behaviour");
build_type = boolean_type_node;
if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)

View File

@ -10149,8 +10149,8 @@ option.
@example
#pragma GCC diagnostic warning "-Wformat"
#pragma GCC diagnostic error "-Walways-true"
#pragma GCC diagnostic ignored "-Walways-true"
#pragma GCC diagnostic error "-Wformat"
#pragma GCC diagnostic ignored "-Wformat"
@end example
Note that these pragmas override any command line options. Also,

View File

@ -223,7 +223,7 @@ Objective-C and Objective-C++ Dialects}.
@item Warning Options
@xref{Warning Options,,Options to Request or Suppress Warnings}.
@gccoptlist{-fsyntax-only -pedantic -pedantic-errors @gol
-w -Wextra -Wall -Waggregate-return -Walways-true -Warray-bounds @gol
-w -Wextra -Wall -Waddress -Waggregate-return -Warray-bounds @gol
-Wno-attributes -Wc++-compat -Wc++0x-compat -Wcast-align -Wcast-qual @gol
-Wchar-subscripts -Wclobbered -Wcomment @gol
-Wconversion -Wcoverage-mismatch -Wno-deprecated-declarations @gol
@ -249,7 +249,6 @@ Objective-C and Objective-C++ Dialects}.
-Wsign-compare -Wstack-protector @gol
-Wstrict-aliasing -Wstrict-aliasing=2 @gol
-Wstrict-overflow -Wstrict-overflow=@var{n} @gol
-Wstring-literal-comparison @gol
-Wswitch -Wswitch-default -Wswitch-enum @gol
-Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized @gol
-Wunknown-pragmas -Wno-pragmas -Wunreachable-code @gol
@ -3381,18 +3380,27 @@ an incorrect result when the signed value is converted to unsigned.
This warning is also enabled by @option{-Wextra}; to get the other warnings
of @option{-Wextra} without this warning, use @samp{-Wextra -Wno-sign-compare}.
@item -Waddress
@opindex Waddress
@opindex Wno-address
Warn about suspicious uses of memory addresses. These include using
the address of a function in a conditional expression, such as
@code{void func(void); if (func)}, and comparisons against the memory
address of a string literal, such as @code{if (x == "abc")}. Such
uses typically indicate a programmer error: the address of a function
always evaluates to true, so their use in a conditional usually
indicate that the programmer forgot the parentheses in a function
call; and comparisons against string literals result in unspecified
behavior and are not portable in C, so they usually indicate that the
programmer intended to use @code{strcmp}. This warning is enabled by
@option{-Wall}.
@item -Waggregate-return
@opindex Waggregate-return
Warn if any functions that return structures or unions are defined or
called. (In languages where you can return an array, this also elicits
a warning.)
@item -Walways-true
@opindex Walways-true
Warn about comparisons which are always true such as testing if
unsigned values are greater than or equal to zero. This warning is
enabled by @option{-Wall}.
@item -Wno-attributes
@opindex Wno-attributes
@opindex Wattributes
@ -3742,15 +3750,6 @@ imply anything.
This option is only active when @option{-fstack-protector} is active. It
warns about functions that will not be protected against stack smashing.
@item -Wstring-literal-comparison
@opindex Wstring-literal-comparison
Warn about suspicious comparisons to string literal constants. In C,
direct comparisons against the memory address of a string literal, such
as @code{if (x == "abc")}, typically indicate a programmer error, and
even when intentional, result in unspecified behavior and are not portable.
Usually these warnings alert that the programmer intended to use
@code{strcmp}. This warning is enabled by @option{-Wall}.
@item -Woverlength-strings
@opindex Woverlength-strings
Warn about string constants which are longer than the ``minimum

View File

@ -1,3 +1,27 @@
2007-02-19 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
* gcc.dg/20031012-1.c: Replace -Walways-true with -Waddress.
* gcc.dg/Walways-true-1.c: Likewise.
* gcc.dg/weak/weak-3.c: Likewise.
* gcc.dg/Werror-1.c: Likewise.
* gcc.dg/Werror-3.c: Likewise.
* gcc.dg/Werror-4.c: Likewise.
* gcc.dg/Werror-5.c: Likewise.
* gcc.dg/Werror-6.c: Likewise.
* gcc.dg/Werror-7.c: Likewise.
* gcc.dg/Werror-8.c: Likewise.
* gcc.dg/Werror-10.c: Likewise.
* gcc.dg/Werror-11.c: Likewise.
* gcc.dg/Werror-12.c: Likewise.
* g++.old-deja/g++.mike/warn8.C: Likewise.
* g++.dg/warn/Walways-true-1.C: Likewise.
* g++.dg/warn/Walways-true-2.C: Likewise.
* g++.dg/warn/noeffect8.C: Warn only with -Waddress.
* g++.dg/warn/Wstring-literal-comparison-1.C: Replace
-Wstring-literal-comparison with -Waddress.
* gcc.dg/Wstring-literal-comparison-4.c: Replace
-Wno-string-literal-comparison with -Wno-address.
2007-02-19 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/self_aggregate_with_call.adb: New test.

View File

@ -1,8 +1,8 @@
// Test -Walways-true for testing an address against NULL.
// Test -Waddress for testing an address against NULL.
// Origin: Ian Lance Taylor <iant@google.com>
// { dg-do compile}
// { dg-options "-Walways-true" }
// { dg-options "-Waddress" }
extern int foo (int);

View File

@ -4,7 +4,7 @@
// Origin: Ian Lance Taylor <iant@google.com>
// { dg-do compile}
// { dg-options "-Walways-true" }
// { dg-options "-Waddress" }
// { dg-require-weak "" }
extern int foo (int) __attribute__ ((weak));

View File

@ -1,6 +1,6 @@
/* PR c/7776 */
/* { dg-do compile } */
/* { dg-options "-Wstring-literal-comparison" } */
/* { dg-options "-Waddress" } */
int test1(char *ptr)
{

View File

@ -1,6 +1,6 @@
/* PR c/7776 */
/* { dg-do compile } */
/* { dg-options "-Wall -Wno-string-literal-comparison" } */
/* { dg-options "-Wall -Wno-address" } */
int test1(char *ptr)
{

View File

@ -1,4 +1,6 @@
// PR c++/26696, 28996
// { dg-do compile }
// { dg-options "-Waddress" }
struct A
{

View File

@ -1,5 +1,5 @@
// { dg-do assemble }
// { dg-options "-Walways-true" }
// { dg-options "-Waddress" }
struct foo {
bool test();

View File

@ -1,4 +1,4 @@
/* { dg-options "-Walways-true" } */
/* { dg-options "-Waddress" } */
/* Origin: Andrew Morton <akpm@osdl.org> */
/* Warn if a function addres of a non-weak function is used
as a truth value. */

View File

@ -1,8 +1,8 @@
/* Test -Walways-true for testing an address against NULL.
/* Test -Waddress for testing an address against NULL.
Origin: Ian Lance Taylor <iant@google.com>. */
/* { dg-do compile} */
/* { dg-options "-Walways-true" } */
/* { dg-options "-Waddress" } */
extern int foo (int);

View File

@ -4,7 +4,7 @@
Origin: Ian Lance Taylor <iant@google.com>. */
/* { dg-do compile} */
/* { dg-options "-Walways-true" } */
/* { dg-options "-Waddress" } */
/* { dg-require-weak "" } */
extern int foo (int) __attribute__ ((weak));

View File

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-Walways-true -Wattributes -Werror" } */
/* { dg-options "-Waddress -Wattributes -Werror" } */
/* { dg-warning "warnings being treated as errors" "" {target "*-*-*"} 0 } */
/* This is the first in a series of test cases that test the
@ -7,7 +7,7 @@
diagnostic error foo. This one has all the bits we're testing, the
others are subsets of this one. */
#pragma GCC diagnostic error "-Walways-true"
#pragma GCC diagnostic error "-Waddress"
void __attribute__((dj)) bar() { } /* { dg-warning "warning: .* attribute directive ignored" } */

View File

@ -4,7 +4,7 @@
/* Make sure #pragma can work with -Werror. */
#pragma GCC diagnostic error "-Walways-true"
#pragma GCC diagnostic error "-Waddress"
void __attribute__((dj)) bar() { } /* { dg-warning "warning: .* attribute directive ignored" } */

View File

@ -4,7 +4,7 @@
/* Make sure #pragma can override -Werror. */
#pragma GCC diagnostic warning "-Walways-true"
#pragma GCC diagnostic warning "-Waddress"
void __attribute__((dj)) bar() { } /* { dg-warning "warning: .* attribute directive ignored" } */

View File

@ -1,9 +1,9 @@
/* { dg-do compile } */
/* { dg-options "-Wattributes -Walways-true" } */
/* { dg-options "-Wattributes -Waddress" } */
/* Make sure #pragma can override -Wfoo. */
#pragma GCC diagnostic ignored "-Walways-true"
#pragma GCC diagnostic ignored "-Waddress"
void __attribute__((dj)) bar() { } /* { dg-warning "attribute directive ignored" } */

View File

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-Walways-true -Wattributes" } */
/* { dg-options "-Waddress -Wattributes" } */
/* Make sure the command line option enables the warning. */

View File

@ -3,7 +3,7 @@
/* Make sure the pragma enables the error. */
#pragma GCC diagnostic error "-Walways-true"
#pragma GCC diagnostic error "-Waddress"
void __attribute__((dj)) bar() { } /* { dg-warning "warning: .* attribute directive ignored" } */

View File

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-Walways-true -Wattributes -Werror" } */
/* { dg-options "-Waddress -Wattributes -Werror" } */
/* { dg-warning "warnings being treated as errors" "" {target "*-*-*"} 0 } */
/* Make sure -Werror turns warnings in to errors. */

View File

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-Wattributes -Werror=always-true" } */
/* { dg-options "-Wattributes -Werror=address" } */
/* Make sure -Werror-foo emits an error and not a warning */

View File

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-Walways-true -Werror -Wno-error=always-true -Wattributes" } */
/* { dg-options "-Waddress -Werror -Wno-error=address -Wattributes" } */
/* { dg-warning "warnings being treated as errors" "" {target "*-*-*"} 0 } */
/* Make sure -Wno-error= overrides -Werror. */

View File

@ -3,7 +3,7 @@
/* Make sure #pragma can enable a warning. */
#pragma GCC diagnostic warning "-Walways-true"
#pragma GCC diagnostic warning "-Waddress"
void __attribute__((dj)) bar() { } /* { dg-warning "warning: .* attribute directive ignored" } */

View File

@ -3,7 +3,7 @@
/* Make sure #pragma can enable a warning as an error. */
#pragma GCC diagnostic error "-Walways-true"
#pragma GCC diagnostic error "-Waddress"
void __attribute__((dj)) bar() { } /* { dg-warning "warning: .* attribute directive ignored" } */

View File

@ -1,6 +1,6 @@
/* PR c/7776 */
/* { dg-do compile } */
/* { dg-options "-Wstring-literal-comparison" } */
/* { dg-options "-Waddress" } */
int test1(char *ptr)
{

View File

@ -1,6 +1,6 @@
/* PR c/7776 */
/* { dg-do compile } */
/* { dg-options "-Wall -Wno-string-literal-comparison" } */
/* { dg-options "-Wall -Wno-address" } */
int test1(char *ptr)
{

View File

@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-require-weak "" } */
/* { dg-options "-Walways-true" } */
/* { dg-options "-Waddress" } */
/* Warning when addr convert to bool always gives known result.
Ada/Pascal programmers sometimes write 0-param functions without
(), and might as well warn on variables, too. */

View File

@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-require-alias "" } */
/* { dg-require-weak "" } */
/* { dg-options "-fno-common -Walways-true" } */
/* { dg-options "-fno-common -Waddress" } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1a" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1b" } } */