C++ PATCH to fix missing warning (PR c++/70194)

Jeff Law law@redhat.com
Thu Mar 17 16:33:00 GMT 2016


On 03/16/2016 06:43 PM, Martin Sebor wrote:
>> @@ -3974,6 +3974,38 @@ build_vec_cmp (tree_code code, tree type,
>>     return build3 (VEC_COND_EXPR, type, cmp, minus_one_vec, zero_vec);
>>   }
>>
>> +/* Possibly warn about an address never being NULL.  */
>> +
>> +static void
>> +warn_for_null_address (location_t location, tree op, tsubst_flags_t
>> complain)
>> +{
> ...
>> +  if (TREE_CODE (cop) == ADDR_EXPR
>> +      && decl_with_nonnull_addr_p (TREE_OPERAND (cop, 0))
>> +      && !TREE_NO_WARNING (cop))
>> +    warning_at (location, OPT_Waddress, "the address of %qD will never "
>> +        "be NULL", TREE_OPERAND (cop, 0));
>> +
>> +  if (CONVERT_EXPR_P (op)
>> +      && TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == REFERENCE_TYPE)
>> +    {
>> +      tree inner_op = op;
>> +      STRIP_NOPS (inner_op);
>> +
>> +      if (DECL_P (inner_op))
>> +    warning_at (location, OPT_Waddress,
>> +            "the compiler can assume that the address of "
>> +            "%qD will never be NULL", inner_op);
>
> Since I noted the subtle differences between the phrasing of
> the various -Waddress warnings in the bug, I have to ask: what is
> the significance of the difference between the two warnings here?
>
> Would it not be appropriate to issue the first warning in the latter
> case?  Or perhaps even use the same text as is already used elsewhere:
> "the address of %qD will always evaluate as ‘true’" (since it may not
> be the macro NULL that's mentioned in the expression).
They were added at different times AFAICT.  The former is fairly old 
(Douglas Gregor, 2008) at this point.  The latter was added by Patrick 
Palka for 65168 about a year ago.

You could directly ask Patrick about motivations for a different message.

Jeff




More information about the Gcc-patches mailing list