gdb
[external/binutils.git] / gdb / testsuite / gdb.base / macscp1.c
1 #include <stdio.h>
2
3 #define SPLICE(a, b) INNER_SPLICE(a, b)
4 #define INNER_SPLICE(a, b) a ## b
5 #define STRINGIFY(a) INNER_STRINGIFY(a)
6 #define INNER_STRINGIFY(a) #a
7
8 #define FIFTY_SEVEN 57
9
10 #define FORTY_EIGHT 48
11 #undef  FORTY_EIGHT
12
13 struct outer
14 {
15   struct fields
16   {
17     struct fault
18     {
19       int addr;
20     } fault;
21   } fields;
22 };
23 struct outer address;
24
25 #define addr fields.fault.addr
26
27 /* A macro named UNTIL_<func> is #defined until just before the
28    definition of the function <func>.
29
30    A macro named BEFORE_<func> is not #defined until just before the
31    definition of <func>.
32
33    The macro WHERE is redefined before each function <func> to the
34    token list ``before <func>''.
35
36    The macscp IN_MACSCP2_H and IN_MACSCP3_H are defined while
37    processing those header files; macscp4.h uses them to choose
38    appropriate function names, output strings, and macro definitions.  */
39
40 #define UNTIL_MACSCP1_1
41 #define UNTIL_MACSCP2_1
42 #define UNTIL_MACSCP4_1_FROM_MACSCP2
43 #define UNTIL_MACSCP4_2_FROM_MACSCP2
44 #define UNTIL_MACSCP2_2
45 #define UNTIL_MACSCP1_2
46 #define UNTIL_MACSCP3_1
47 #define UNTIL_MACSCP4_1_FROM_MACSCP3
48 #define UNTIL_MACSCP4_2_FROM_MACSCP3
49 #define UNTIL_MACSCP3_2
50 #define UNTIL_MACSCP1_3
51
52 #define WHERE before macscp1_1
53 #define BEFORE_MACSCP1_1
54 #undef UNTIL_MACSCP1_1
55 void
56 macscp1_1 ()
57 {
58   puts ("macscp1_1");
59 }
60
61 #include "macscp2.h"
62
63 #undef WHERE
64 #define WHERE before macscp1_2
65 #define BEFORE_MACSCP1_2
66 #undef UNTIL_MACSCP1_2
67 void
68 macscp1_2 ()
69 {
70   puts ("macscp1_2");
71 }
72
73 #include "macscp3.h"
74
75 #undef WHERE
76 #define WHERE before macscp1_3
77 #define BEFORE_MACSCP1_3
78 #undef UNTIL_MACSCP1_3
79 void
80 macscp1_3 ()
81 {
82   puts ("macscp1_3");
83 }
84
85 void
86 macscp_expr (void)
87 {
88   int foo = -1;
89
90   foo = 0;  /* set breakpoint here */
91 #define MACRO_TO_EXPAND foo
92   foo = 1;
93 #undef MACRO_TO_EXPAND
94   foo = 2;
95 }
96
97 #define TWENTY_THREE 23
98
99 int
100 main (int argc, char **argv)
101 {
102   macscp1_1 ();
103   macscp2_1 ();
104   macscp4_1_from_macscp2 ();
105   macscp4_2_from_macscp2 ();
106   macscp2_2 ();
107   macscp1_2 ();
108   macscp3_1 ();
109   macscp4_1_from_macscp3 ();
110   macscp4_2_from_macscp3 ();
111   macscp3_2 ();
112   macscp1_3 ();
113   macscp_expr ();
114 }