My June 9 patch to remove the call to scalar_constant_value from convert_like_real wrongly also removed the NULL handling that avoids repeated warnings. This patch restores that code.
Tested x86_64-pc-linux-gnu, applying to trunk.
commit 6d452cf34a321c16b6777c2e20a72b39fbf77a24 Author: Jason Merrill <ja...@redhat.com> Date: Wed Jan 17 11:29:23 2018 -0500 PR c++/81067 - redundant NULL warning. * call.c (convert_like_real): Restore null_node handling. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index f5542850cea..1f326d5c1ad 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -6804,6 +6804,12 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, if (type_unknown_p (expr)) expr = instantiate_type (totype, expr, complain); + if (expr == null_node + && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype)) + /* If __null has been converted to an integer type, we do not want to + continue to warn about uses of EXPR as an integer, rather than as a + pointer. */ + expr = build_int_cst (totype, 0); return expr; case ck_ambig: /* We leave bad_p off ck_ambig because overload resolution considers