; RUN: llvm-as -f %s -o %t.bc
; RUN: lli %t.bc > /dev/null


declare void %exit(int)

int %test(sbyte %C, short %S) {
  %X = cast short %S to int
  ret int %X
}

void %FP(void(int) * %F) {
	%X = call int %test(sbyte 123, short 1024)
	call void %F(int %X)
	ret void
}

int %main() {
	call void %FP(void(int)* %exit)
	ret int 1
}


Exit only with a value from 0-255.
; RUN: llvm-as -f %s -o %t.bc
; RUN: lli %t.bc > /dev/null


declare void %exit(int)

int %test(sbyte %C, short %S) {
  %X = cast short %S to ubyte
  %Y = cast ubyte %X to int
  ret int %Y
}

void %FP(void(int) * %F) {
	%X = call int %test(sbyte 123, short 1024)
	call void %F(int %X)
	ret void
}

int %main() {
	call void %FP(void(int)* %exit)
	ret int 1
}