1 /*
2    bug-2195.c
3 
4    A peephole optimizer bug in calls to __z88dk_fastcall.
5 */
6 
7 #if !defined(__SDCC_z80) && !defined(__SDCC_z180) && !defined(__SDCC_r2k) && !defined(__SDCC_r3ka) && !defined(__SDCC_tlcs90)
8 #define __z88dk_fastcall
9 #endif
10 
11 #include <string.h>
12 #include <testfwk.h>
13 
14 char v[5];
15 
kputchar(unsigned char c)16 void kputchar(unsigned char c) __z88dk_fastcall
17 {
18   static int i;
19   v[i++] = c;
20 }
21 
kputs(const char * p)22 void kputs(const char *p) __z88dk_fastcall
23 {
24   while(*p)
25     kputchar(*p++); /* The bug resulted in the peephole optimizer optimizing out the parameter to this call */
26 }
27 
testBug(void)28 void testBug(void)
29 {
30   const char *s = "test";
31   kputs(s);
32   ASSERT(!strcmp(s, v));
33 }
34 
35