re PR c++/50523 (C++ FE apparently incorrectly rejects tramp3d)
PR c++/50523 * call.c (implicit_conversion): Mask out inappropriate LOOKUP flags at the top of the function. From-SVN: r179203
This commit is contained in:
parent
fcb7afc20f
commit
12b03642cb
4 changed files with 29 additions and 3 deletions
|
@ -1,5 +1,9 @@
|
|||
2011-09-26 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/50523
|
||||
* call.c (implicit_conversion): Mask out inappropriate LOOKUP
|
||||
flags at the top of the function.
|
||||
|
||||
* pt.c (tsubst_copy) [PARM_DECL]: Handle 'this' in NSDMI.
|
||||
|
||||
2011-09-26 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
|
|
@ -1660,6 +1660,12 @@ implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
|
|||
|| expr == error_mark_node)
|
||||
return NULL;
|
||||
|
||||
/* Other flags only apply to the primary function in overload
|
||||
resolution, or after we've chosen one. */
|
||||
flags &= (LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION|LOOKUP_COPY_PARM
|
||||
|LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND|LOOKUP_PREFER_RVALUE
|
||||
|LOOKUP_NO_NARROWING|LOOKUP_PROTECT);
|
||||
|
||||
if (TREE_CODE (to) == REFERENCE_TYPE)
|
||||
conv = reference_binding (to, from, expr, c_cast_p, flags);
|
||||
else
|
||||
|
@ -1716,15 +1722,13 @@ implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
|
|||
&& (flags & LOOKUP_NO_CONVERSION) == 0)
|
||||
{
|
||||
struct z_candidate *cand;
|
||||
int convflags = (flags & (LOOKUP_NO_TEMP_BIND|LOOKUP_ONLYCONVERTING
|
||||
|LOOKUP_NO_NARROWING));
|
||||
|
||||
if (CLASS_TYPE_P (to)
|
||||
&& BRACE_ENCLOSED_INITIALIZER_P (expr)
|
||||
&& !CLASSTYPE_NON_AGGREGATE (complete_type (to)))
|
||||
return build_aggr_conv (to, expr, flags);
|
||||
|
||||
cand = build_user_type_conversion_1 (to, expr, convflags);
|
||||
cand = build_user_type_conversion_1 (to, expr, flags);
|
||||
if (cand)
|
||||
conv = cand->second_conv;
|
||||
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
2011-09-26 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/50523
|
||||
* g++.dg/overload/ref-conv2.C: New.
|
||||
|
||||
* g++.dg/cpp0x/nsdmi-template1.C: New.
|
||||
|
||||
2011-09-26 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
|
15
gcc/testsuite/g++.dg/overload/ref-conv2.C
Normal file
15
gcc/testsuite/g++.dg/overload/ref-conv2.C
Normal file
|
@ -0,0 +1,15 @@
|
|||
// PR c++/50523
|
||||
|
||||
template <class T>
|
||||
struct A
|
||||
{
|
||||
A(const T&);
|
||||
operator T&() const;
|
||||
operator const T&() const;
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
A<int> a(1);
|
||||
A<int> a2(a);
|
||||
}
|
Loading…
Add table
Reference in a new issue