PR c++/85739 - ICE with pointer to member template parm.

* cvt.c (perform_qualification_conversions): Use cp_fold_convert.

From-SVN: r261129
This commit is contained in:
Jason Merrill 2018-06-03 08:37:03 -04:00 committed by Jason Merrill
parent c14add82fa
commit c5f50290c7
3 changed files with 18 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2018-06-03 Jason Merrill <jason@redhat.com>
PR c++/85739 - ICE with pointer to member template parm.
* cvt.c (perform_qualification_conversions): Use cp_fold_convert.
2018-06-02 Jason Merrill <jason@redhat.com>
PR c++/85761 - ICE with ill-formed use of const outer variable.

View File

@ -1945,7 +1945,8 @@ can_convert_qual (tree type, tree expr)
/* Attempt to perform qualification conversions on EXPR to convert it
to TYPE. Return the resulting expression, or error_mark_node if
the conversion was impossible. */
the conversion was impossible. Since this is only used by
convert_nontype_argument, we fold the conversion. */
tree
perform_qualification_conversions (tree type, tree expr)
@ -1957,7 +1958,7 @@ perform_qualification_conversions (tree type, tree expr)
if (same_type_p (type, expr_type))
return expr;
else if (can_convert_qual (type, expr))
return build_nop (type, expr);
return cp_fold_convert (type, expr);
else
return error_mark_node;
}

View File

@ -0,0 +1,10 @@
// PR c++/85739
struct l { int k; };
template <int l::*> class b { };
template <const int l::*> class B { typedef int e; };
template <int l::*i, const int l::*n>
bool operator!=(B<n>, b<i>);
bool bb = (B<&l::k>() != b<&l::k>());