re PR c++/30108 (internal compiler error: in make_decl_rtl, at varasm.c:890)
PR c++/30108 * call.c (convert_default_arg): Copy non-constant arguments. PR c++/30108 * g++.dg/other/default6.C: New test. From-SVN: r122844
This commit is contained in:
parent
6d4817e374
commit
3026f2dfd9
@ -1,3 +1,8 @@
|
||||
2007-03-12 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/30108
|
||||
* call.c (convert_default_arg): Copy non-constant arguments.
|
||||
|
||||
2007-03-11 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/31038
|
||||
|
@ -4664,10 +4664,14 @@ convert_default_arg (tree type, tree arg, tree fn, int parmnum)
|
||||
}
|
||||
else
|
||||
{
|
||||
/* This could get clobbered by the following call. */
|
||||
if (TREE_HAS_CONSTRUCTOR (arg))
|
||||
/* We must make a copy of ARG, in case subsequent processing
|
||||
alters any part of it. For example, during gimplification a
|
||||
cast of the form (T) &X::f (where "f" is a member function)
|
||||
will lead to replacing the PTRMEM_CST for &X::f with a
|
||||
VAR_DECL. We can avoid the copy for constants, since they
|
||||
are never modified in place. */
|
||||
if (!CONSTANT_CLASS_P (arg))
|
||||
arg = copy_node (arg);
|
||||
|
||||
arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
|
||||
"default argument", fn, parmnum);
|
||||
arg = convert_for_arg_passing (type, arg);
|
||||
|
@ -1,3 +1,8 @@
|
||||
2007-03-12 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/30108
|
||||
* g++.dg/other/default6.C: New test.
|
||||
|
||||
2007-03-12 Richard Sandiford <richard@codesourcery.com>
|
||||
|
||||
* lib/target-supports.exp (check_profiling_available): Return false
|
||||
|
18
gcc/testsuite/g++.dg/other/default6.C
Normal file
18
gcc/testsuite/g++.dg/other/default6.C
Normal file
@ -0,0 +1,18 @@
|
||||
// PR c++/30108
|
||||
|
||||
class BaseRobot {
|
||||
typedef void (BaseRobot::*PseudoState)(void);
|
||||
typedef PseudoState STATE;
|
||||
STATE initial ();
|
||||
int ready ();
|
||||
STATE stpOtherTask ();
|
||||
STATE commonEventProcessing (STATE pIdleTarget=(STATE)&BaseRobot::ready);
|
||||
};
|
||||
BaseRobot::STATE BaseRobot::initial ()
|
||||
{
|
||||
return commonEventProcessing ();
|
||||
}
|
||||
BaseRobot::STATE BaseRobot::stpOtherTask ()
|
||||
{
|
||||
return commonEventProcessing ();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user