summaryrefslogtreecommitdiffstats
path: root/gcc/java/jcf-write.c
diff options
context:
space:
mode:
authorapbianco <apbianco@138bc75d-0d04-0410-961f-82ee72b054a4>2000-01-07 20:28:11 +0000
committerapbianco <apbianco@138bc75d-0d04-0410-961f-82ee72b054a4>2000-01-07 20:28:11 +0000
commit0570a5062a9e53205c0bd47ff9bc990c60e5b760 (patch)
tree597c2f89bfcc3461548b776d8a0ec9cdcf15cd4f /gcc/java/jcf-write.c
parent600e75c340b027977a2c92f943ae252673133586 (diff)
downloadppe42-gcc-0570a5062a9e53205c0bd47ff9bc990c60e5b760.tar.gz
ppe42-gcc-0570a5062a9e53205c0bd47ff9bc990c60e5b760.zip
Thu Jan 6 00:54:10 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-write.c (generate_byecode_conditional): Fixed indentation in method invocation and typo in conditional expression. (generate_bytecode_insns): COND_EXPR can be part of a binop. Issue the appropriate NOTE_POP. * parse.y (patch_binop): Shift value mask to feature the right type. (This is a fix for the PR #122: http://sourceware.cygnus.com/ml/java-prs/2000-q1/msg00000.html) git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31277 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/java/jcf-write.c')
-rw-r--r--gcc/java/jcf-write.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/java/jcf-write.c b/gcc/java/jcf-write.c
index 8c39c6120ea..98436f2e632 100644
--- a/gcc/java/jcf-write.c
+++ b/gcc/java/jcf-write.c
@@ -1160,7 +1160,8 @@ generate_bytecode_conditional (exp, true_label, false_label,
}
break;
case TRUTH_NOT_EXPR:
- generate_bytecode_conditional (TREE_OPERAND (exp, 0), false_label, true_label,
+ generate_bytecode_conditional (TREE_OPERAND (exp, 0),
+ false_label, true_label,
! true_branch_first, state);
break;
case TRUTH_ANDIF_EXPR:
@@ -1238,7 +1239,7 @@ generate_bytecode_conditional (exp, true_label, false_label,
}
if (integer_zerop (exp1) || integer_zerop (exp0))
{
- generate_bytecode_insns (integer_zerop (exp1) ? exp0 : exp0,
+ generate_bytecode_insns (integer_zerop (exp1) ? exp0 : exp1,
STACK_TARGET, state);
op = op + (OPCODE_ifnull - OPCODE_if_acmpeq);
negop = (op & 1) ? op - 1 : op + 1;
@@ -1622,6 +1623,10 @@ generate_bytecode_insns (exp, target, state)
define_jcf_label (else_label, state);
generate_bytecode_insns (TREE_OPERAND (exp, 2), target, state);
define_jcf_label (end_label, state);
+
+ /* COND_EXPR can be used in a binop. The stack must be adjusted. */
+ if (TREE_TYPE (exp) != void_type_node)
+ NOTE_POP (TYPE_PRECISION (TREE_TYPE (exp)) > 32 ? 2 : 1);
}
break;
case CASE_EXPR:
OpenPOWER on IntegriCloud