call.c (standard_conversion): Use RVALUE_CONVs for all expressions that satisfy lvalue_p...

* call.c (standard_conversion): Use RVALUE_CONVs for all
	expressions that satisfy lvalue_p, not just those that satisfy
	real_lvalue_p.

From-SVN: r37013
This commit is contained in:
Mark Mitchell 2000-10-23 06:36:37 +00:00 committed by Mark Mitchell
parent f9808f81c9
commit 583ca5a08d
3 changed files with 39 additions and 1 deletions

View File

@ -1,5 +1,9 @@
2000-10-22 Mark Mitchell <mark@codesourcery.com>
* call.c (standard_conversion): Use RVALUE_CONVs for all
expressions that satisfy lvalue_p, not just those that satisfy
real_lvalue_p.
* optimize.c (copy_body_r): Don't treat CALL_EXPRs specially.
* typeck.c (c_sizeof): Return an expression of `size_t' type,

View File

@ -685,7 +685,7 @@ standard_conversion (to, from, expr)
fcode = TREE_CODE (from);
conv = build_conv (LVALUE_CONV, from, conv);
}
else if (fromref || (expr && real_lvalue_p (expr)))
else if (fromref || (expr && lvalue_p (expr)))
conv = build_conv (RVALUE_CONV, from, conv);
/* Allow conversion between `__complex__' data types */

View File

@ -0,0 +1,34 @@
// Origin: Mark Mitchell <mark@codesourcery.com>
extern "C" void abort ();
int j;
struct S {
S () { ++j; }
S (const S&) { ++j; }
~S () {
if (--j < 0)
abort ();
}
};
struct T {
void g (S) {
};
};
struct U {
int i;
S s;
};
U u;
U f () { return u; }
int main ()
{
T t;
t.g (f ().s);
}