-
Notifications
You must be signed in to change notification settings - Fork 10
Description
Hi
I have tried the test examples in /tst/ and most of them gives all the getrule: Assertion '0' failed error.
Only tst/incr.c and tst/init.c will compile.
I then made a simple example to pin point one kind of error:
$ cat -n foo.c
1 void main(void) {
2 unsigned int i = 3;
3 unsigned int a = sizeof(i);
4 while (i++ < 5) {
5 a = a + bar(a);
6 }
7 }
8 bar(x)
9 unsigned int x;
10 {
11 return 7+x;
12 }
The full command line output:
ff@ubuntu22lts:~/lcc$ ulpcc foo.c
<command-line>: warning: "__STDC__" redefined
<built-in>: note: this is the location of the previous definition
(414b4c0->op=ARGU4 at foo.c:5 is corrupt.)
rcc: src/gen.c:181: getrule: Assertion `0' failed.
/home/ff/lcc/build/lcc: fatal error in /home/ff/lcc/build/rcc
Another strange thing is that when it does compile, the function bar() without argument a it does not get called in the foo.S file.
In line 12 move r2,r0 it is supposed to load the output from bar() into i but register r0 never gets loaded with a value (or I missed it).
1 void main(void) {
2 unsigned int i = 3;
3 unsigned int a = sizeof(i);
4 while (i++ < 5) {
5 a = a + bar(); // arg from bar() removed should give error
6 }
7 }
8 bar(x)
9 unsigned int x;
10 {
11 return 7 /*+x*/;
12 }
The foo.S:
1 .global main
2 .text
3 .bss
4 main.a:
5 .space 4
6 .text
7 .bss
8 main.i:
9 .space 4
10 .text
11 main:
12 move r2,3
13 move r3,main.i
14 st r2,r3,0
15 move r2,4
16 move r3,main.a
17 st r2,r3,0
18 jump L.3
19 L.2:
20 move r1,main.a
21 ld r1,r1,0
22 move r2,r0
23 add r2,r1,r2
24 move r3,main.a
25 st r2,r3,0
26 L.3:
27 move r2,main.i
28 ld r2,r2,0
29 add r1,r2,1
30 move r3,main.i
31 st r1,r3,0
32 move r1,5
33 sub r2,r2,r1 #{ if r2 < r1 goto L.2
34 add r2,r2,r1
35 jump L.2, ov #}
36 L.1:
37
38 .global bar
39 bar:
40 move r0,7
41 L.5:
42
43 halt
I'm running on Ubuntu VERSION="22.04.2 LTS (Jammy Jellyfish)".
After reading all the assembler output I kind of learned it but I would prefer to use ulpcc instead. It is a great and promising tool.