aboutsummaryrefslogtreecommitdiff
path: root/i386-gen.c
diff options
context:
space:
mode:
authorEdmund Grimley Evans <Edmund.Grimley.Evans@gmail.com>2015-11-20 23:17:24 +0000
committerEdmund Grimley Evans <Edmund.Grimley.Evans@gmail.com>2015-11-20 23:17:24 +0000
commit4ae626451e5b64d2b5e0ad19e67b77a88a7bab55 (patch)
tree0a686ec6f138295a3c29b0dcf6ed8e032e165b0c /i386-gen.c
parent8dd185917603f68ffcdc3e98eb39f2497e99d563 (diff)
downloadtinycc-4ae626451e5b64d2b5e0ad19e67b77a88a7bab55.tar.gz
tinycc-4ae626451e5b64d2b5e0ad19e67b77a88a7bab55.tar.bz2
Bug fix for commit 553242c18a2387fb896df66eb9b5a502f0e87ff0.
In gtst, vtop->c.i is not usually zero, but it is when compiling: int f(void) { return 1 && 1 ? 1 : 1; }
Diffstat (limited to 'i386-gen.c')
-rw-r--r--i386-gen.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/i386-gen.c b/i386-gen.c
index d202925..c18b9c3 100644
--- a/i386-gen.c
+++ b/i386-gen.c
@@ -678,12 +678,14 @@ ST_FUNC int gtst(int inv, int t)
} else if (v == VT_JMP || v == VT_JMPI) {
/* && or || optimization */
if ((v & 1) == inv) {
- uint32_t n1, n = vtop->c.i;
/* insert vtop->c jump list in t */
- while ((n1 = read32le(cur_text_section->data + n)))
- n = n1;
- write32le(cur_text_section->data + n, t);
- t = vtop->c.i;
+ uint32_t n1, n = vtop->c.i;
+ if (n) {
+ while ((n1 = read32le(cur_text_section->data + n)))
+ n = n1;
+ write32le(cur_text_section->data + n, t);
+ t = vtop->c.i;
+ }
} else {
t = gjmp(t);
gsym(vtop->c.i);