mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 14:30:59 +08:00
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:
parent
c14add82fa
commit
c5f50290c7
@ -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.
|
||||
|
@ -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;
|
||||
}
|
||||
|
10
gcc/testsuite/g++.dg/template/ptrmem32.C
Normal file
10
gcc/testsuite/g++.dg/template/ptrmem32.C
Normal 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>());
|
||||
|
Loading…
x
Reference in New Issue
Block a user