aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2004-01-30 15:37:39 -0800
committerRichard Henderson <rth@gcc.gnu.org>2004-01-30 15:37:39 -0800
commit59445d742771835d8a0a8f59e10ae1b19f79fff8 (patch)
tree1d81f008b1896f9ddadfabf50c34307f267b2676 /gcc
parent7c960b3dffaa649a5d7d1a1fc71ed14804dfc445 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/cp/method.c12
-rw-r--r--gcc/cp/tree.c8
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);
}