On Mon, 10 Nov 2014, Martin Uecker wrote:

> +          if (OPT_Wdiscarded_array_qualifiers

OPT_Wdiscarded_array_qualifiers is an enum constant, so it doesn't make 
sense to test it in if conditions like this.  You don't need a test in the 
if condition for whether the warning is enabled - passing 
OPT_Wdiscarded_array_qualifiers to warning_at is sufficient to cause the 
warning to appear only if enabled - but if you consider the rest of the 
test for whether to warn to be expensive so you don't want to execute it 
unless this warning is enabled, you can test the variable (actually a 
macro for a structure field) warn_discarded_array_qualifiers.

> +              && (TREE_CODE (TREE_TYPE (type2)) == ARRAY_TYPE)
> +           && (TYPE_QUALS (strip_array_types (TREE_TYPE (type2)))
> +               & ~TYPE_QUALS (TREE_TYPE (type1))))
> +                  warning_at(colon_loc, OPT_Wdiscarded_array_qualifiers,
> +                             "pointer to array loses qualifier "
> +                             "in conditional expression");

Missing space before '(' in call to warning_at.

> @@ -4613,6 +4636,14 @@ build_conditional_expr (location_t colon_loc, tree
>        else if (VOID_TYPE_P (TREE_TYPE (type2))
>              && !TYPE_ATOMIC (TREE_TYPE (type2)))
>       {
> +          if (OPT_Wdiscarded_array_qualifiers
> +              && (TREE_CODE (TREE_TYPE (type1)) == ARRAY_TYPE)
> +           && (TYPE_QUALS (strip_array_types (TREE_TYPE (type1)))
> +               & ~TYPE_QUALS (TREE_TYPE (type2))))
> +                  warning_at(colon_loc, OPT_Wdiscarded_array_qualifiers,
> +                             "pointer to array loses qualifier "
> +                             "in conditional expression");

Same issues here.

> @@ -6090,42 +6149,70 @@ convert_for_assignment (location_t location, locat
>                 == c_common_signed_type (mvr))
>             && TYPE_ATOMIC (mvl) == TYPE_ATOMIC (mvr)))
>       {
> -       if (pedantic
> +          /* Warn about loss of qualifers from pointers to arrays with
> +             qualifiers on the element type. */
> +          if (OPT_Wdiscarded_array_qualifiers

Another spurious test of OPT_Wdiscarded_array_qualifiers.

>         /* Const and volatile mean something different for function types,
>            so the usual warnings are not appropriate.  */
>         else if (TREE_CODE (ttr) != FUNCTION_TYPE
>                  && TREE_CODE (ttl) != FUNCTION_TYPE)
>           {
> +              /* Don't warn about loss of qualifier for conversions from
> +                 qualified void* to pointers to arrays with corresponding
> +                 qualifier on the the element type. */
> +              if (!pedantic)
> +                ttl = strip_array_types (ttl);
> +
>             /* Assignments between atomic and non-atomic objects are OK.  */
> -           if (TYPE_QUALS_NO_ADDR_SPACE_NO_ATOMIC (ttr)
> +              if (TYPE_QUALS_NO_ADDR_SPACE_NO_ATOMIC (ttr)
>                 & ~TYPE_QUALS_NO_ADDR_SPACE_NO_ATOMIC (ttl))

There seems to be something wrong with the indentation of the new code 
here, and as far as I can tell the indentation of the line you reindented 
was correct before the patch.

I didn't spot any substantive problems in this round of review, so suspect 
the next revision of the patch may be good to go in.

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to