* 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.
&& 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");