1/* { dg-do run } */
2/* { dg-options "-O2 -fno-inline" } */
3
4typedef struct _GtkCssStyleProperty GtkCssStyleProperty;
5
6struct _GtkCssStyleProperty
7{
8  int *initial_value;
9  unsigned int id;
10  unsigned int inherit :1;
11  unsigned int animated :1;
12  unsigned int affects_size :1;
13  unsigned int affects_font :1;
14
15  int * parse_value;
16  int * query_value;
17  int * assign_value;
18};
19
20void
21g_assertion_message_expr (const char *domain,
22			  const char *file,
23			  int line,
24			  const char *func,
25			  const char *expr) __attribute__((__noreturn__));
26
27void
28g_assertion_message_expr (const char *domain,
29			  const char *file,
30			  int line,
31			  const char *func,
32			  const char *expr)
33{
34  __builtin_abort ();
35}
36int
37get_id (GtkCssStyleProperty *property)
38{
39  return 1;
40}
41int
42_gtk_css_style_property_get_type ()
43{
44  return 1;
45}
46
47GtkCssStyleProperty *
48g_object_new (int object_type,
49            const char *first_property_name,
50            ...)
51{
52  return (GtkCssStyleProperty *) __builtin_malloc (sizeof (GtkCssStyleProperty));
53}
54
55typedef enum {
56  INHERIT = (1 << 0),
57  ANIMATED = (1 << 1),
58  RESIZE = (1 << 2),
59  FONT = (1 << 3)
60} GtkStylePropertyFlags;
61
62int t = 0;
63void
64gtk_css_style_property_register (const char * name,
65				 int expected_id,
66				 int value_type,
67				 int flags,
68				 int *parse_value,
69				 int *query_value,
70				 int *assign_value,
71				 int *initial_value)
72{
73  GtkCssStyleProperty *node;
74
75  do
76    {
77      if (__builtin_expect (__extension__ (
78					   {
79					     int _g_boolean_var_;
80					     if (initial_value != ((void *)0))
81					       _g_boolean_var_ = 1;
82					     else
83					       _g_boolean_var_ = 0;
84					     _g_boolean_var_;
85					   }),
86			    1))
87	;
88      else
89        g_assertion_message_expr ("Gtk",
90				  "gtkcssstylepropertyimpl.c",
91				  85,
92				  ((const char*) (__PRETTY_FUNCTION__)),
93				  "initial_value != NULL");
94    } while (0);
95
96  do
97    {
98      if (__builtin_expect (__extension__ (
99					   {
100					     int _g_boolean_var_;
101					     if (parse_value != ((void *)0))
102					       _g_boolean_var_ = 1;
103					     else
104					       _g_boolean_var_ = 0;
105					     _g_boolean_var_;
106					   }),
107			    1))
108	;
109      else
110	g_assertion_message_expr ("Gtk",
111				  "gtkcssstylepropertyimpl.c",
112				  86,
113				  ((const char*) (__PRETTY_FUNCTION__)),
114				  "parse_value != NULL");
115    } while (0);
116
117  do
118    {
119      if (__builtin_expect (__extension__ (
120					   {
121					     int _g_boolean_var_;
122					     if (value_type == ((int) ((1) << (2)))
123						 || query_value != ((void *)0))
124					       _g_boolean_var_ = 1;
125					     else
126					       _g_boolean_var_ = 0;
127					     _g_boolean_var_;
128					   }),
129			    1))
130	;
131      else
132	g_assertion_message_expr ("Gtk",
133				  "gtkcssstylepropertyimpl.c",
134				  87, ((const char*) (__PRETTY_FUNCTION__)),
135				  "value_type == NONE || query_value != NULL");
136    } while (0);
137
138  /* FLAGS is changed in a cond_exec instruction with pr57637.  */
139  if (flags  == 15)
140    t = 15;
141
142  do
143    {
144      if (__builtin_expect (__extension__ (
145					   {
146					     int _g_boolean_var_;
147					     if (value_type == ((1) << (2))
148						 || assign_value != ((void *)0))
149					       _g_boolean_var_ = 1;
150					     else
151					       _g_boolean_var_ = 0;
152					     _g_boolean_var_;
153					   }),
154			    1))
155	;
156      else
157	g_assertion_message_expr ("Gtk",
158				  "gtkcssstylepropertyimpl.c",
159				  88, ((const char*) (__PRETTY_FUNCTION__)),
160				  "value_type == NONE || assign_value != NULL");
161    } while (0);
162
163  node = g_object_new ((_gtk_css_style_property_get_type ()),
164			"value-type", value_type,
165			"affects-size", (flags & RESIZE) ? (0) : (!(0)),
166			"affects-font", (flags & FONT) ? (!(0)) : (0),
167			"animated", (flags & ANIMATED) ? (!(0)) : (0),
168			"inherit", (flags & INHERIT) ? (!(0)) : (0),
169			"initial-value", initial_value,
170			"name", name,
171			((void *)0));
172
173  node->parse_value = parse_value;
174  node->query_value = query_value;
175  node->assign_value = assign_value;
176
177  do
178    {
179      if (__builtin_expect (__extension__ (
180					   {
181					     int _g_boolean_var_;
182					     if (get_id (node) == expected_id)
183					       _g_boolean_var_ = 1;
184					     else
185					       _g_boolean_var_ = 0;
186					     _g_boolean_var_;
187					   }),
188			    1))
189	;
190      else
191	g_assertion_message_expr ("Gtk",
192				  "gtkcssstylepropertyimpl.c",
193				  106,
194				  ((const char*) (__PRETTY_FUNCTION__)),
195				  "get_id (node) == expected_id");
196    } while (0);
197}
198
199int main ()
200{
201  gtk_css_style_property_register ("test", 1, 4, 15, &t, &t, &t, &t);
202
203  if (t != 15)
204    __builtin_abort ();
205  return 0;
206}
207