From: Jason Merrill Date: Sun, 3 Jun 2018 12:37:03 +0000 (-0400) Subject: PR c++/85739 - ICE with pointer to member template parm. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c5f50290c75bb22dc4458f4cc88c8b03c22640ca;p=gcc.git PR c++/85739 - ICE with pointer to member template parm. * cvt.c (perform_qualification_conversions): Use cp_fold_convert. From-SVN: r261129 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c661d46c99a..5d4caccdb39 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2018-06-03 Jason Merrill + + PR c++/85739 - ICE with pointer to member template parm. + * cvt.c (perform_qualification_conversions): Use cp_fold_convert. + 2018-06-02 Jason Merrill PR c++/85761 - ICE with ill-formed use of const outer variable. diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index f29dacd685e..bca9d05af66 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -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; } diff --git a/gcc/testsuite/g++.dg/template/ptrmem32.C b/gcc/testsuite/g++.dg/template/ptrmem32.C new file mode 100644 index 00000000000..edf200313ea --- /dev/null +++ b/gcc/testsuite/g++.dg/template/ptrmem32.C @@ -0,0 +1,10 @@ +// PR c++/85739 + +struct l { int k; }; +template class b { }; +template class B { typedef int e; }; +template +bool operator!=(B, b); + +bool bb = (B<&l::k>() != b<&l::k>()); +