OSDN Git Service

* gcc.c-torture/execute/20040208-2.c: Move ...
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.c-torture / execute / string-opt-16.c
1 /* Copyright (C) 2003  Free Software Foundation.
2
3    Test sprintf optimizations don't break anything and return the
4    correct results.
5
6    Written by Roger Sayle, June 22, 2003.  */
7
8 static char buffer[32];
9
10 extern void abort ();
11 typedef __SIZE_TYPE__ size_t;
12 extern int sprintf(char*, const char*, ...);
13 extern void *memset(void*, int, size_t);
14 extern int memcmp(const void*, const void*, size_t);
15
16 void test1()
17 {
18   sprintf(buffer,"foo");
19 }
20
21 int test2()
22 {
23   return sprintf(buffer,"foo");
24 }
25
26 void test3()
27 {
28   sprintf(buffer,"%s","bar");
29 }
30
31 int test4()
32 {
33   return sprintf(buffer,"%s","bar");
34 }
35
36 void test5(char *ptr)
37 {
38   sprintf(buffer,"%s",ptr);
39 }
40
41
42 int main()
43 {
44   memset (buffer, 'A', 32);
45   test1 ();
46   if (memcmp(buffer, "foo", 4) || buffer[4] != 'A')
47     abort ();
48
49   memset (buffer, 'A', 32);
50   if (test2 () != 3)
51     abort ();
52   if (memcmp(buffer, "foo", 4) || buffer[4] != 'A')
53     abort ();
54
55   memset (buffer, 'A', 32);
56   test3 ();
57   if (memcmp(buffer, "bar", 4) || buffer[4] != 'A')
58     abort ();
59
60   memset (buffer, 'A', 32);
61   if (test4 () != 3)
62     abort ();
63   if (memcmp(buffer, "bar", 4) || buffer[4] != 'A')
64     abort ();
65
66   memset (buffer, 'A', 32);
67   test5 ("barf");
68   if (memcmp(buffer, "barf", 5) || buffer[5] != 'A')
69     abort ();
70
71   return 0;
72 }
73
74 #ifdef __OPTIMIZE__
75 /* When optimizing, all the above cases should be transformed into
76    something else.  So any remaining calls to the original function
77    should abort.  */
78 __attribute__ ((noinline))
79 static int
80 sprintf (char *buf, const char *fmt, ...)
81 {
82   abort ();
83 }
84 #endif
85