re PR c++/45282 (wrong decltype result for .*)
PR c++/45282 * typeck2.c (build_m_component_ref): Handle prvalue object. From-SVN: r197130
This commit is contained in:
parent
a323d79533
commit
845367eb3b
|
@ -1,3 +1,8 @@
|
|||
2013-03-26 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/45282
|
||||
* typeck2.c (build_m_component_ref): Handle prvalue object.
|
||||
|
||||
2013-03-26 Gabriel Dos Reis <gdr@integrable-solutions.net>
|
||||
|
||||
* cp-gimplify.c (cp_genericize_r): Use VAR_OR_FUNCTION_DECL_P.
|
||||
|
|
|
@ -1671,7 +1671,7 @@ build_m_component_ref (tree datum, tree component, tsubst_flags_t complain)
|
|||
|
||||
if (TYPE_PTRDATAMEM_P (ptrmem_type))
|
||||
{
|
||||
bool is_lval = real_lvalue_p (datum);
|
||||
cp_lvalue_kind kind = lvalue_kind (datum);
|
||||
tree ptype;
|
||||
|
||||
/* Compute the type of the field, as described in [expr.ref].
|
||||
|
@ -1701,7 +1701,9 @@ build_m_component_ref (tree datum, tree component, tsubst_flags_t complain)
|
|||
return error_mark_node;
|
||||
|
||||
/* If the object expression was an rvalue, return an rvalue. */
|
||||
if (!is_lval)
|
||||
if (kind & clk_class)
|
||||
datum = rvalue (datum);
|
||||
else if (kind & clk_rvalueref)
|
||||
datum = move (datum);
|
||||
return datum;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
// PR c++/45282
|
||||
// { dg-require-effective-target c++11 }
|
||||
|
||||
struct A { int i; };
|
||||
int A::*ipm = &A::i;
|
||||
|
||||
template <class T, class U> class assert_same_type;
|
||||
template <class T> class assert_same_type<T,T> { };
|
||||
|
||||
assert_same_type<decltype(A().*ipm),int> x2;
|
Loading…
Reference in New Issue