int i;
int count = 0;
char * fred (char c, int i)
{
  static int mark = 0;
  char * result = (char *) malloc (i + 2);
  count += i;
  {
    int k;
    for (k = 0; k < i; k++)
      result [k] = c;
  }
  result [i++] = 0;
  result [i] = ++mark;
  return result;
}
int main (void)
{
  char * string;
  i = 5;
  string = fred ('a', i);
  printf ("%s, %d, %d\n", string, string [i+1], count);
  string = fred ('b', i);
  printf ("%s, %d, %d\n", string, string [i+1], count);
  return 0;
}


char		type    0   1 byte

int type 0 4 bytes

i var 1 1 int

count var 1 2 int 0

fred fun 1 ? char*

c param 2 1 char

param 2 2 int

mark var 2 1 static int 0

result var 2 2 char*

malloc fun? 1? ? ?

k var 3 1 int

main fun 1 ? int

string var 2 1 char*


int	i

int count 0

char*() fred () char c int i {} st.int mark 0 char* result (char*) malloc + i 2 += count i {} int k for = k 0 < k i post++ k = [] result k c = [] result post++ i 0 = [] result i pre++ mark return result

int() main () void {} char* string = i 5 = string fred 'a' i printf "%s, %d, %d\n" string [] string + i 1 count = string fred 'b' i printf "%s, %d, %d\n" string [] string + i 1 count return 0



; generated by Norcroft  ARM C vsn 4.66d
; (ARM Toolkit v2.02) [Feb  5 1996]

	AREA	C$$code, CODE, READONLY
x$codeseg	DATA

fred	MOV	ip,sp
	STMDB	sp!,{v1,v2,fp,ip,lr,pc}
	SUB	fp,ip,#4
	CMP	sp,sl
	BLMI	__rt_stkovf_split_small
	MOV	v1,a2
	AND	v2,a1,#&ff
	ADD	a1,a2,#2		; start of user code
	BL	malloc
	LDR	a3,[pc, #L74-.-8]
	LDR	a2,[a3,#4]
	ADD	a2,a2,v1
	STR	a2,[a3,#4]
	MOV	a2,#0
	CMP	v1,#0
	BLE	L50.J5
L40.J4	STRB	v2,[a1,a2]
	ADD	a2,a2,#1
	CMP	a2,v1
	BLT	L40.J4
L50.J5	MOV	a4,#0
	MOV	a2,v1
	ADD	v1,v1,#1
	STRB	a4,[a1,a2]
	LDR	a2,[a3,#8]
	ADD	a2,a2,#1
	STR	a2,[a3,#8]!
	STRB	a2,[a1,v1]		; end of user code
	LDMDB	fp,{v1,v2,fp,sp,pc}

L74	DCD	x$dataseg

main	MOV	ip,sp
	STMDB	sp!,{v1,fp,ip,lr,pc}
	SUB	fp,ip,#4
	CMP	sp,sl
	BLMI	__rt_stkovf_split_small
	MOV	a2,#5			; start of user code
	LDR	v1,[pc, #L74-.-8]
	MOV	a1,#&61
	STR	a2,[v1,#0]
	BL	fred
	MOV	a2,a1
	LDR	a3,[v1,#0]
	ADD	a1,a1,a3
	LDRB	a3,[a1,#1]
	LDR	a4,[v1,#4]
	ADD	a1,pc,#Lec-.-8
	BL	printf
	MOV	a1,#&62
	LDR	a2,[v1,#0]
	BL	fred
	MOV	a2,a1
	LDR	a3,[v1,#0]
	ADD	a1,a1,a3
	LDRB	a3,[a1,#1]
	LDR	a4,[v1,#4]!
	ADD	a1,pc,#Lec-.-8
	BL	printf
	MOV	a1,#0			; end of user code
	LDMDB	fp,{v1,fp,sp,pc}
Lec	DCB	0x25,0x73,0x2c,0x20
	DCB	0x25,0x64,0x2c,0x20
	DCB	0x25,0x64,0x0a,00

	AREA	C$$data,DATA

x$dataseg

i	DCD	00000000

count	DCD	00000000
	DCD	00000000

	EXPORT	main
	EXPORT	fred
	EXPORT	count
	EXPORT	i

	IMPORT	printf
	IMPORT	malloc
	IMPORT	__rt_stkovf_split_small

	END