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