re PR c++/13693 ([tree-ssa] build failure in mipsisa64-elf)

PR c++/13693
        * method.c (use_thunk): Don't force_target_expr for void thunks.
        * tree.c (build_target_expr_with_type): Assert non-void type.
        (force_target_expr): Likewise.

From-SVN: r77008
This commit is contained in:
Richard Henderson 2004-01-30 15:37:39 -08:00 committed by Richard Henderson
parent 7c960b3dff
commit 59445d7427
3 changed files with 21 additions and 6 deletions

View File

@ -1,3 +1,10 @@
2004-01-30 Richard Henderson <rth@redhat.com>
PR c++/13693
* method.c (use_thunk): Don't force_target_expr for void thunks.
* tree.c (build_target_expr_with_type): Assert non-void type.
(force_target_expr): Likewise.
2004-01-30 Michael Matz <matz@suse.de>
* parser.c (cp_parser_labeled_statement): Accept case ranges.

View File

@ -487,15 +487,17 @@ use_thunk (tree thunk_fndecl, bool emit_p)
t = tree_cons (NULL_TREE, a, t);
t = nreverse (t);
t = build_call (alias, t);
t = force_target_expr (TREE_TYPE (t), t);
if (!this_adjusting)
t = thunk_adjust (t, /*this_adjusting=*/0,
fixed_offset, virtual_offset);
if (VOID_TYPE_P (TREE_TYPE (t)))
finish_expr_stmt (t);
else
finish_return_stmt (t);
{
t = force_target_expr (TREE_TYPE (t), t);
if (!this_adjusting)
t = thunk_adjust (t, /*this_adjusting=*/0,
fixed_offset, virtual_offset);
finish_return_stmt (t);
}
/* Since we want to emit the thunk, we explicitly mark its name as
referenced. */

View File

@ -318,6 +318,8 @@ build_target_expr_with_type (tree init, tree type)
{
tree slot;
my_friendly_assert (!VOID_TYPE_P (type), 20040130);
if (TREE_CODE (init) == TARGET_EXPR)
return init;
else if (CLASS_TYPE_P (type) && !TYPE_HAS_TRIVIAL_INIT_REF (type)
@ -342,7 +344,11 @@ build_target_expr_with_type (tree init, tree type)
tree
force_target_expr (tree type, tree init)
{
tree slot = build_local_temp (type);
tree slot;
my_friendly_assert (!VOID_TYPE_P (type), 20040130);
slot = build_local_temp (type);
return build_target_expr (slot, init);
}