re PR c/6980 (-Wbad-function-cast gives bogus warning for (double) rand())
PR c/6980 * c-typeck.c (build_c_cast): Improve wording of -Wbad-function-cast diagnostic. testsuite: * gcc.dg/Wbad-function-cast-1.c: New test. From-SVN: r87991
This commit is contained in:
parent
847450b41d
commit
ff80e49f2d
4 changed files with 64 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2004-09-24 Joseph S. Myers <jsm@polyomino.org.uk>
|
||||
|
||||
PR c/6980
|
||||
* c-typeck.c (build_c_cast): Improve wording of
|
||||
-Wbad-function-cast diagnostic.
|
||||
|
||||
2004-09-23 Hans-Peter Nilsson <hp@axis.com>
|
||||
|
||||
PR target/17626
|
||||
|
|
|
@ -3138,7 +3138,8 @@ build_c_cast (tree type, tree expr)
|
|||
if (warn_bad_function_cast
|
||||
&& TREE_CODE (value) == CALL_EXPR
|
||||
&& TREE_CODE (type) != TREE_CODE (otype))
|
||||
warning ("cast does not match function type");
|
||||
warning ("cast from function call of type %qT to non-matching "
|
||||
"type %qT", otype, type);
|
||||
|
||||
if (TREE_CODE (type) == POINTER_TYPE
|
||||
&& TREE_CODE (otype) == INTEGER_TYPE
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2004-09-24 Joseph S. Myers <jsm@polyomino.org.uk>
|
||||
|
||||
PR c/6980
|
||||
* gcc.dg/Wbad-function-cast-1.c: New test.
|
||||
|
||||
2004-09-23 Zack Weinberg <zack@codesourcery.com>
|
||||
|
||||
* g++.dg/ext/complit1.C
|
||||
|
|
51
gcc/testsuite/gcc.dg/Wbad-function-cast-1.c
Normal file
51
gcc/testsuite/gcc.dg/Wbad-function-cast-1.c
Normal file
|
@ -0,0 +1,51 @@
|
|||
/* Test operation of -Wbad-function-cast. Bug 6980 complained of the
|
||||
wording of the diagnostic. */
|
||||
/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wbad-function-cast" } */
|
||||
|
||||
void vf(void);
|
||||
int if1(void);
|
||||
char if2(void);
|
||||
long if3(void);
|
||||
float rf1(void);
|
||||
double rf2(void);
|
||||
_Complex double cf(void);
|
||||
enum e { E1 } ef(void);
|
||||
_Bool bf(void);
|
||||
char *pf1(void);
|
||||
int *pf2(void);
|
||||
|
||||
void
|
||||
foo(void)
|
||||
{
|
||||
/* Casts to void types are always OK. */
|
||||
(void)vf();
|
||||
(void)if1();
|
||||
(void)cf();
|
||||
(const void)bf();
|
||||
/* Casts to the same type or similar types are OK. */
|
||||
(int)if1();
|
||||
(long)if2();
|
||||
(char)if3();
|
||||
(float)rf1();
|
||||
(long double)rf2();
|
||||
(_Complex float)cf();
|
||||
(enum f { F1 })ef();
|
||||
(_Bool)bf();
|
||||
(void *)pf1();
|
||||
(char *)pf2();
|
||||
/* Casts to types with different TREE_CODE (which is how this
|
||||
warning has been defined) are not OK, except for casts to void
|
||||
types. */
|
||||
(float)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'float'" } */
|
||||
(double)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'double'" } */
|
||||
(_Bool)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Bool'" } */
|
||||
(int)rf1(); /* { dg-warning "cast from function call of type 'float' to non-matching type 'int'" } */
|
||||
(long)rf2(); /* { dg-warning "cast from function call of type 'double' to non-matching type 'long int'" } */
|
||||
(double)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'double'" } */
|
||||
(int)ef(); /* { dg-warning "cast from function call of type 'enum e' to non-matching type 'int'" } */
|
||||
(int)bf(); /* { dg-warning "cast from function call of type '_Bool' to non-matching type 'int'" } */
|
||||
(__SIZE_TYPE__)pf1(); /* { dg-warning "cast from function call of type 'char \\*' to non-matching type '\[^\\n\]*'" } */
|
||||
(__PTRDIFF_TYPE__)pf2(); /* { dg-warning "cast from function call of type 'int \\*' to non-matching type '\[^\\n\]*'" } */
|
||||
}
|
Loading…
Add table
Reference in a new issue