mirror of
https://github.com/frida/tinycc
synced 2025-01-03 02:24:24 +03:00
Bug fix for commit 553242c18a
.
In gtst, vtop->c.i is not usually zero, but it is when compiling: int f(void) { return 1 && 1 ? 1 : 1; }
This commit is contained in:
parent
8dd1859176
commit
4ae626451e
12
i386-gen.c
12
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);
|
||||
|
12
x86_64-gen.c
12
x86_64-gen.c
@ -1716,12 +1716,14 @@ 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);
|
||||
|
Loading…
Reference in New Issue
Block a user