diff options
author | Richard Henderson <rth@redhat.com> | 2004-01-30 15:37:39 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-01-30 15:37:39 -0800 |
commit | 59445d742771835d8a0a8f59e10ae1b19f79fff8 (patch) | |
tree | 1d81f008b1896f9ddadfabf50c34307f267b2676 /gcc | |
parent | 7c960b3dffaa649a5d7d1a1fc71ed14804dfc445 (diff) | |
download | gcc-59445d742771835d8a0a8f59e10ae1b19f79fff8.zip gcc-59445d742771835d8a0a8f59e10ae1b19f79fff8.tar.gz gcc-59445d742771835d8a0a8f59e10ae1b19f79fff8.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/method.c | 12 | ||||
-rw-r--r-- | gcc/cp/tree.c | 8 |
3 files changed, 21 insertions, 6 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 41bc855..825a6e5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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. diff --git a/gcc/cp/method.c b/gcc/cp/method.c index 1065855..6acab3a 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -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. */ diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index bedbbe9..7d98128 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -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); } |