c-typeck.c (build_c_cast): Issue -Wcast-qual warnings if the qualifiers don't match at any level of...
* c-typeck.c (build_c_cast): Issue -Wcast-qual warnings if the qualifiers don't match at any level of pointerness. From-SVN: r31356
This commit is contained in:
parent
f668c81cda
commit
cd6311ef6e
2 changed files with 18 additions and 7 deletions
|
@ -2,6 +2,9 @@
|
|||
|
||||
* cccp.c: Accept and ignore -lang-fortran.
|
||||
|
||||
* c-typeck.c (build_c_cast): Issue -Wcast-qual warnings if the
|
||||
qualifiers don't match at any level of pointerness.
|
||||
|
||||
2000-01-12 Robert Lipe <robertl@sco.com>
|
||||
|
||||
* i386/sysv5.h (CPP_SPEC, LIBSPEC): Add -pthreadT.
|
||||
|
|
|
@ -3701,16 +3701,24 @@ build_c_cast (type, expr)
|
|||
&& TREE_CODE (type) == POINTER_TYPE
|
||||
&& TREE_CODE (otype) == POINTER_TYPE)
|
||||
{
|
||||
/* Go to the innermost object being pointed to. */
|
||||
tree in_type = type;
|
||||
tree in_otype = otype;
|
||||
int warn = 0;
|
||||
|
||||
while (TREE_CODE (in_type) == POINTER_TYPE)
|
||||
in_type = TREE_TYPE (in_type);
|
||||
while (TREE_CODE (in_otype) == POINTER_TYPE)
|
||||
in_otype = TREE_TYPE (in_otype);
|
||||
|
||||
if (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type))
|
||||
/* Check that the qualifiers on IN_TYPE are a superset of
|
||||
the qualifiers of IN_OTYPE. The outermost level of
|
||||
POINTER_TYPE nodes is uninteresting and we stop as soon
|
||||
as we hit a non-POINTER_TYPE node on either type. */
|
||||
do
|
||||
{
|
||||
in_otype = TREE_TYPE (in_otype);
|
||||
in_type = TREE_TYPE (in_type);
|
||||
warn |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
|
||||
}
|
||||
while (TREE_CODE (in_type) == POINTER_TYPE
|
||||
&& TREE_CODE (in_otype) == POINTER_TYPE);
|
||||
|
||||
if (warn)
|
||||
/* There are qualifiers present in IN_OTYPE that are not
|
||||
present in IN_TYPE. */
|
||||
pedwarn ("cast discards qualifiers from pointer target type");
|
||||
|
|
Loading…
Add table
Reference in a new issue