mirror of git://gcc.gnu.org/git/gcc.git
re PR c++/23840 (Bogus "invalid lvalue in unary '&'" diagnostic and ICE with va_arg)
PR c++/23840 * tree.c (lvalue_p1): A VA_ARG_EXPR with class type is an lvalue, when class rvalues are lvalues. PR c++/23840 * g++.dg/expr/stdarg1.C: New test. From-SVN: r104877
This commit is contained in:
parent
b19bb8b044
commit
c0ad5a3173
|
|
@ -1,3 +1,9 @@
|
|||
2005-10-02 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/23840
|
||||
* tree.c (lvalue_p1): A VA_ARG_EXPR with class type is an lvalue,
|
||||
when class rvalues are lvalues.
|
||||
|
||||
2005-09-28 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/16782
|
||||
|
|
|
|||
|
|
@ -158,8 +158,12 @@ lvalue_p_1 (tree ref,
|
|||
case TARGET_EXPR:
|
||||
return treat_class_rvalues_as_lvalues ? clk_class : clk_none;
|
||||
|
||||
case CALL_EXPR:
|
||||
case VA_ARG_EXPR:
|
||||
return (treat_class_rvalues_as_lvalues
|
||||
&& CLASS_TYPE_P (TREE_TYPE (ref))
|
||||
? clk_class : clk_none);
|
||||
|
||||
case CALL_EXPR:
|
||||
/* Any class-valued call would be wrapped in a TARGET_EXPR. */
|
||||
return clk_none;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
2005-10-02 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/23840
|
||||
* g++.dg/expr/stdarg1.C: New test.
|
||||
|
||||
2005-10-02 Diego Novillo <dnovillo@redhat.com>
|
||||
|
||||
PR 24142
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
// PR c++/23840
|
||||
|
||||
#include <stdarg.h>
|
||||
struct S
|
||||
{
|
||||
int f(int);
|
||||
};
|
||||
void f(int i, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start (ap, i);
|
||||
va_arg (ap, S).f(0);
|
||||
}
|
||||
Loading…
Reference in New Issue