libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / tree-ssa / ssa-dom-thread-13.c
blob67e5fbd59b1462bdc5958546f36083ea4fcca3e2
1 /* { dg-do compile { target size32plus } } */
2 /* { dg-options "-O2 -fdump-tree-dom2-details -w" } */
4 union tree_node;
5 typedef union tree_node *tree;
6 extern unsigned char tree_contains_struct[0xdead][64];
7 struct tree_base
9 int code:16;
11 struct tree_typed
13 tree type;
15 struct tree_type_common
17 tree main_variant;
19 extern tree build_target_option_node (void);
20 union tree_node
22 struct tree_base base;
23 struct tree_typed typed;
24 struct tree_type_common type_common;
26 tree arf (void);
27 void error (const char *);
28 tree
29 convert (tree type, tree expr)
31 tree e = expr;
32 int code = (type)->base.code;
33 const char *invalid_conv_diag;
34 tree ret;
35 if (tree_contains_struct[expr->base.code][(42)] != 1)
36 __builtin_abort ();
37 if (type->type_common.main_variant == expr->typed.type->type_common.main_variant
38 && (expr->typed.type->base.code != 123
39 || e->base.code == 456))
40 return arf ();
41 if (expr->typed.type->base.code == 42)
42 error ("void value not ignored as it ought to be");
45 /* When the *->base.code tests in the second IF statement are false, we
46 know that expr->typed.base->base.code has the value 123. That allows
47 us to thread the test for the final IF statement on that path. */
48 /* { dg-final { scan-tree-dump-times "Threaded" 1 "dom2"} } */