mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-01-09 05:33:11 +00:00
fixed tests
This commit is contained in:
parent
048d87b251
commit
ca3d01e2b8
24
src/test/kc/pointer-void-3.kc
Normal file
24
src/test/kc/pointer-void-3.kc
Normal 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;
|
||||
}
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user