check for additional stack allocations and varargs in the whole function, not just the first block. fixes #544
This commit is contained in:
Родитель
0c2e620f5e
Коммит
aab3e76b94
|
@ -1391,6 +1391,9 @@ function analyzer(data, sidePass) {
|
|||
|
||||
// Allocas
|
||||
var finishedInitial = false;
|
||||
|
||||
lines = func.lines; // We need to consider all the function lines now, not just the first label
|
||||
|
||||
for (var i = 0; i < lines.length; i++) {
|
||||
var item = lines[i];
|
||||
if (!item.assignTo || item.intertype != 'alloca' || !isNumber(item.allocatedNum)) {
|
||||
|
|
|
@ -2288,6 +2288,25 @@ c5,de,15,8a
|
|||
Settings.TOTAL_STACK = 1024
|
||||
self.do_run(src, 'ok!')
|
||||
|
||||
def test_stack_void(self):
|
||||
src = r'''
|
||||
#include <stdio.h>
|
||||
|
||||
static char s[100]="aaaaa";
|
||||
static int func(void) {
|
||||
if(s[0]!='a') return 0;
|
||||
printf("iso open %s\n", s, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001);
|
||||
return 0;
|
||||
}
|
||||
int main(){
|
||||
int i;
|
||||
for(i=0;i<5000;i++)
|
||||
func();
|
||||
printf(".ok.\n");
|
||||
}
|
||||
'''
|
||||
self.do_run(src, '.ok.\n')
|
||||
|
||||
def test_array2(self):
|
||||
src = '''
|
||||
#include <stdio.h>
|
||||
|
|
Загрузка…
Ссылка в новой задаче