1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-01-09 05:33:11 +00:00

fixed tests

This commit is contained in:
jespergravgaard 2019-06-24 00:28:30 +02:00
parent 048d87b251
commit ca3d01e2b8
5 changed files with 108 additions and 74 deletions

View File

@ -0,0 +1,24 @@
// Test void pointer - issues when assigning returns from malloc()
void main() {
byte* buf1 = malloc(64);
byte* buf2 = malloc(64);
*buf1 = 'a';
*buf2 = 'b';
const byte* SCREEN = 0x0400;
SCREEN[0] = *buf1;
SCREEN[1] = *buf2;
}
unsigned char* HEAP_START = 0xc000;
unsigned char* heap_head = HEAP_START;
void* malloc(unsigned int size) {
void* mem = heap_head;
heap_head+= size;
return mem;
}

View File

@ -1,17 +1,21 @@
Adding pointer type conversion cast (byte*) HEAP_START in (byte*) HEAP_START ← (number) $c000
Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6
Fixing pointer addition (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot + (number) 1
Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - (number) 1
Identified constant variable (byte*) HEAP_START
Culled Empty Block (label) malloc::@1
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) main::@2
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte*) HEAP_START#0 ← ((byte*)) (number) $c000
(byte*) heap_head#0 ← (byte*) HEAP_START#0
to:@2
malloc: scope:[malloc] from @2
(word) malloc::size#1 ← phi( @2/(word) malloc::size#0 )
(byte*) heap_head#4 ← phi( @2/(byte*) heap_head#7 )
to:@3
malloc: scope:[malloc] from @3
(word) malloc::size#1 ← phi( @3/(word) malloc::size#0 )
(byte*) heap_head#4 ← phi( @3/(byte*) heap_head#7 )
(byte*) malloc::mem#0 ← (byte*) heap_head#4
(byte*) heap_head#1 ← (byte*) heap_head#4 + (word) malloc::size#1
(byte*) malloc::return#0 ← (byte*) malloc::mem#0
@ -23,21 +27,21 @@ malloc::@return: scope:[malloc] from malloc
(byte*) heap_head#2 ← (byte*) heap_head#5
return
to:@return
@2: scope:[] from @begin
@3: scope:[] from @begin
(byte*) heap_head#7 ← phi( @begin/(byte*) heap_head#0 )
(word) malloc::size#0 ← (number) $100
call malloc
(byte*) malloc::return#2 ← (byte*) malloc::return#1
to:@4
@4: scope:[] from @2
(byte*) heap_head#6 ← phi( @2/(byte*) heap_head#2 )
(byte*) malloc::return#4 ← phi( @2/(byte*) malloc::return#2 )
to:@5
@5: scope:[] from @3
(byte*) heap_head#6 ← phi( @3/(byte*) heap_head#2 )
(byte*) malloc::return#4 ← phi( @3/(byte*) malloc::return#2 )
(byte*~) $0 ← (byte*) malloc::return#4
(byte*) heap_head#3 ← (byte*) heap_head#6
(byte*) BYTES#0 ← (byte*~) $0
to:@3
main: scope:[main] from @3
(byte*) BYTES#2 ← phi( @3/(byte*) BYTES#3 )
to:@4
main: scope:[main] from @4
(byte*) BYTES#2 ← phi( @4/(byte*) BYTES#3 )
(byte) main::i#0 ← (byte) 0
to:main::@1
main::@1: scope:[main] from main main::@1
@ -51,20 +55,20 @@ main::@1: scope:[main] from main main::@1
main::@return: scope:[main] from main::@1
return
to:@return
@3: scope:[] from @4
(byte*) BYTES#3 ← phi( @4/(byte*) BYTES#0 )
@4: scope:[] from @5
(byte*) BYTES#3 ← phi( @5/(byte*) BYTES#0 )
call main
to:@5
@5: scope:[] from @3
to:@6
@6: scope:[] from @4
to:@end
@end: scope:[] from @5
@end: scope:[] from @6
SYMBOL TABLE SSA
(byte*~) $0
(label) @2
(label) @3
(label) @4
(label) @5
(label) @6
(label) @begin
(label) @end
(byte*) BYTES
@ -162,10 +166,10 @@ Constant inlined malloc::return#0 = (const byte*) HEAP_START#0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@3(between main::@1 and main::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @2
Adding NOP phi() at start of @4
Adding NOP phi() at start of @3
Adding NOP phi() at start of @5
Adding NOP phi() at start of @4
Adding NOP phi() at start of @6
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of malloc
@ -175,11 +179,11 @@ Calls in [] to malloc:2 main:5
Created 1 initial phi equivalence classes
Coalesced [14] main::i#3 ← main::i#1
Coalesced down to 1 phi equivalence classes
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) main::@3
Renumbering block @2 to @1
Renumbering block @3 to @2
Renumbering block @3 to @1
Renumbering block @4 to @2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2

View File

@ -1,18 +1,22 @@
Adding pointer type conversion cast (byte*) HEAP_START in (byte*) HEAP_START ← (number) $c000
Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6
Fixing pointer addition (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot + (number) 1
Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - (number) 1
Fixing pointer increment (word*) main::w ← ++ (word*) main::w
Identified constant variable (byte*) HEAP_START
Culled Empty Block (label) malloc::@1
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) main::@2
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte*) HEAP_START#0 ← ((byte*)) (number) $c000
(byte*) heap_head#0 ← (byte*) HEAP_START#0
to:@2
malloc: scope:[malloc] from @2
(word) malloc::size#1 ← phi( @2/(word) malloc::size#0 )
(byte*) heap_head#4 ← phi( @2/(byte*) heap_head#7 )
to:@3
malloc: scope:[malloc] from @3
(word) malloc::size#1 ← phi( @3/(word) malloc::size#0 )
(byte*) heap_head#4 ← phi( @3/(byte*) heap_head#7 )
(byte*) malloc::mem#0 ← (byte*) heap_head#4
(byte*) heap_head#1 ← (byte*) heap_head#4 + (word) malloc::size#1
(byte*) malloc::return#0 ← (byte*) malloc::mem#0
@ -24,21 +28,21 @@ malloc::@return: scope:[malloc] from malloc
(byte*) heap_head#2 ← (byte*) heap_head#5
return
to:@return
@2: scope:[] from @begin
@3: scope:[] from @begin
(byte*) heap_head#7 ← phi( @begin/(byte*) heap_head#0 )
(word) malloc::size#0 ← (number) $200
call malloc
(byte*) malloc::return#2 ← (byte*) malloc::return#1
to:@4
@4: scope:[] from @2
(byte*) heap_head#6 ← phi( @2/(byte*) heap_head#2 )
(byte*) malloc::return#4 ← phi( @2/(byte*) malloc::return#2 )
to:@5
@5: scope:[] from @3
(byte*) heap_head#6 ← phi( @3/(byte*) heap_head#2 )
(byte*) malloc::return#4 ← phi( @3/(byte*) malloc::return#2 )
(byte*~) $0 ← (byte*) malloc::return#4
(byte*) heap_head#3 ← (byte*) heap_head#6
(word*) WORDS#0 ← (byte*~) $0
to:@3
main: scope:[main] from @3
(word*) WORDS#1 ← phi( @3/(word*) WORDS#2 )
to:@4
main: scope:[main] from @4
(word*) WORDS#1 ← phi( @4/(word*) WORDS#2 )
(word*) main::w#0 ← (word*) WORDS#1
(byte) main::i#0 ← (byte) 0
to:main::@1
@ -54,20 +58,20 @@ main::@1: scope:[main] from main main::@1
main::@return: scope:[main] from main::@1
return
to:@return
@3: scope:[] from @4
(word*) WORDS#2 ← phi( @4/(word*) WORDS#0 )
@4: scope:[] from @5
(word*) WORDS#2 ← phi( @5/(word*) WORDS#0 )
call main
to:@5
@5: scope:[] from @3
to:@6
@6: scope:[] from @4
to:@end
@end: scope:[] from @5
@end: scope:[] from @6
SYMBOL TABLE SSA
(byte*~) $0
(label) @2
(label) @3
(label) @4
(label) @5
(label) @6
(label) @begin
(label) @end
(byte*) HEAP_START
@ -170,10 +174,10 @@ Constant inlined WORDS#0 = (const byte*) HEAP_START#0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@3(between main::@1 and main::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @2
Adding NOP phi() at start of @4
Adding NOP phi() at start of @3
Adding NOP phi() at start of @5
Adding NOP phi() at start of @4
Adding NOP phi() at start of @6
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of malloc
@ -184,11 +188,11 @@ Created 2 initial phi equivalence classes
Coalesced [15] main::i#3 ← main::i#1
Coalesced [16] main::w#3 ← main::w#1
Coalesced down to 2 phi equivalence classes
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) main::@3
Renumbering block @2 to @1
Renumbering block @3 to @2
Renumbering block @3 to @1
Renumbering block @4 to @2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2

View File

@ -1,18 +1,20 @@
Adding pointer type conversion cast (byte*) HEAP_START in (byte*) HEAP_START ← (number) $c000
Adding void pointer type conversion cast (void*) main::buf1 in (void~) main::$2 ← call free (byte*) main::buf1
Adding void pointer type conversion cast (void*) main::buf2 in (void~) main::$3 ← call free (byte*) main::buf2
Adding pointer type conversion cast (byte*) main::screen in (byte*) main::screen ← (number) $400
Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6
Fixing pointer addition (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot + (number) 1
Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - (number) 1
Identified constant variable (byte*) HEAP_START
Identified constant variable (byte*) main::screen
Culled Empty Block (label) malloc::@1
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte*) HEAP_START#0 ← ((byte*)) (number) $c000
(byte*) heap_head#0 ← (byte*) HEAP_START#0
to:@3
to:@4
malloc: scope:[malloc] from main main::@3
(word) malloc::size#2 ← phi( main/(word) malloc::size#0 main::@3/(word) malloc::size#1 )
(byte*) heap_head#7 ← phi( main/(byte*) heap_head#13 main::@3/(byte*) heap_head#3 )
@ -32,8 +34,8 @@ free: scope:[free] from main::@2 main::@5
free::@return: scope:[free] from free
return
to:@return
main: scope:[main] from @3
(byte*) heap_head#13 ← phi( @3/(byte*) heap_head#15 )
main: scope:[main] from @4
(byte*) heap_head#13 ← phi( @4/(byte*) heap_head#15 )
(word) malloc::size#0 ← (number) $64
call malloc
(byte*) malloc::return#2 ← (byte*) malloc::return#1
@ -73,14 +75,14 @@ main::@2: scope:[main] from main::@1
(byte*) heap_head#17 ← phi( main::@1/(byte*) heap_head#18 )
(byte*) main::buf2#4 ← phi( main::@1/(byte*) main::buf2#1 )
(byte*) main::buf1#2 ← phi( main::@1/(byte*) main::buf1#1 )
(void*) free::ptr#0 ← (void*)(byte*) main::buf1#2
(byte*) free::ptr#0 ← (byte*) main::buf1#2
call free
to:main::@5
main::@5: scope:[main] from main::@2
(byte*) heap_head#16 ← phi( main::@2/(byte*) heap_head#17 )
(byte*) main::buf1#5 ← phi( main::@2/(byte*) main::buf1#2 )
(byte*) main::buf2#2 ← phi( main::@2/(byte*) main::buf2#4 )
(void*) free::ptr#1 ← (void*)(byte*) main::buf2#2
(byte*) free::ptr#1 ← (byte*) main::buf2#2
call free
to:main::@6
main::@6: scope:[main] from main::@5
@ -96,28 +98,28 @@ main::@return: scope:[main] from main::@6
(byte*) heap_head#5 ← (byte*) heap_head#11
return
to:@return
@3: scope:[] from @begin
@4: scope:[] from @begin
(byte*) heap_head#15 ← phi( @begin/(byte*) heap_head#0 )
call main
to:@4
@4: scope:[] from @3
(byte*) heap_head#12 ← phi( @3/(byte*) heap_head#5 )
to:@5
@5: scope:[] from @4
(byte*) heap_head#12 ← phi( @4/(byte*) heap_head#5 )
(byte*) heap_head#6 ← (byte*) heap_head#12
to:@end
@end: scope:[] from @4
@end: scope:[] from @5
SYMBOL TABLE SSA
(label) @3
(label) @4
(label) @5
(label) @begin
(label) @end
(byte*) HEAP_START
(byte*) HEAP_START#0
(void()) free((void*) free::ptr)
(void()) free((byte*) free::ptr)
(label) free::@return
(void*) free::ptr
(void*) free::ptr#0
(void*) free::ptr#1
(byte*) free::ptr
(byte*) free::ptr#0
(byte*) free::ptr#1
(byte*) heap_head
(byte*) heap_head#0
(byte*) heap_head#1
@ -251,8 +253,8 @@ Resolved ranged next value [31] main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value [33] if(main::i#1!=rangelast(0,$63)) goto main::@1 to (number) $64
Simplifying expression containing zero main::screen#0 in [42] *((const byte*) main::screen#0 + (byte) 0) ← *((byte*) main::buf1#0)
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused variable (void*) free::ptr#0 and assignment [17] (void*) free::ptr#0 ← (void*)(byte*) main::buf1#0
Eliminating unused variable (void*) free::ptr#1 and assignment [19] (void*) free::ptr#1 ← (void*)(byte*) main::buf2#0
Eliminating unused variable (byte*) free::ptr#0 and assignment [17] (byte*) free::ptr#0 ← (byte*) main::buf1#0
Eliminating unused variable (byte*) free::ptr#1 and assignment [19] (byte*) free::ptr#1 ← (byte*) main::buf2#0
Successful SSA optimization PassNEliminateUnusedVars
Adding number conversion cast (unumber) $64 in if((byte) main::i#1!=(number) $64) goto main::@1
Successful SSA optimization PassNAddNumberTypeConversions
@ -273,8 +275,8 @@ Identical Phi Values (word) malloc::size#2 (byte) $64
Successful SSA optimization Pass2IdenticalPhiElimination
Added new block during phi lifting main::@7(between main::@1 and main::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @3
Adding NOP phi() at start of @4
Adding NOP phi() at start of @5
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@2
@ -288,9 +290,9 @@ Created 2 initial phi equivalence classes
Coalesced [9] heap_head#19 ← heap_head#1
Coalesced [26] main::i#3 ← main::i#1
Coalesced down to 2 phi equivalence classes
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) main::@7
Renumbering block @3 to @1
Renumbering block @4 to @1
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end
@ -363,8 +365,8 @@ malloc::@return: scope:[malloc] from malloc
VARIABLE REGISTER WEIGHTS
(byte*) HEAP_START
(void()) free((void*) free::ptr)
(void*) free::ptr
(void()) free((byte*) free::ptr)
(byte*) free::ptr
(byte*) heap_head
(byte*) heap_head#1 0.8
(byte*) heap_head#7 3.0
@ -849,9 +851,9 @@ FINAL SYMBOL TABLE
(label) @end
(byte*) HEAP_START
(const byte*) HEAP_START#0 HEAP_START = (byte*) 49152
(void()) free((void*) free::ptr)
(void()) free((byte*) free::ptr)
(label) free::@return
(void*) free::ptr
(byte*) free::ptr
(byte*) heap_head
(byte*) heap_head#1 heap_head zp ZP_WORD:2 0.8
(byte*) heap_head#7 heap_head zp ZP_WORD:2 3.0

View File

@ -3,9 +3,9 @@
(label) @end
(byte*) HEAP_START
(const byte*) HEAP_START#0 HEAP_START = (byte*) 49152
(void()) free((void*) free::ptr)
(void()) free((byte*) free::ptr)
(label) free::@return
(void*) free::ptr
(byte*) free::ptr
(byte*) heap_head
(byte*) heap_head#1 heap_head zp ZP_WORD:2 0.8
(byte*) heap_head#7 heap_head zp ZP_WORD:2 3.0