1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-tree-dse1-details -fno-short-enums" } */
3 /* { dg-skip-if "temporary variable for constraint_expr is never used" { msp430-*-* } } */
4 
5 enum constraint_expr_type
6 {
7   SCALAR, DEREF, ADDRESSOF
8 };
9 typedef struct constraint_expr
10 {
11   enum constraint_expr_type type;
12   unsigned int var;
13   long offset;
14 } constraint_expr ;
15 typedef struct constraint
16 {
17   struct constraint_expr lhs;
18   struct constraint_expr rhs;
19 } constraint;
20 static _Bool
constraint_expr_equal(struct constraint_expr x,struct constraint_expr y)21 constraint_expr_equal (struct constraint_expr x, struct constraint_expr y)
22 {
23   return x.type == y.type && x.var == y.var && x.offset == y.offset;
24 }
25 
26 _Bool
constraint_equal(struct constraint a,struct constraint b)27 constraint_equal (struct constraint a, struct constraint b)
28 {
29   return constraint_expr_equal (a.lhs, b.lhs)
30     && constraint_expr_equal (a.rhs, b.rhs);
31 }
32 
33 /* { dg-final { scan-tree-dump-times "Deleted dead store: x = " 1 "dse1" } } */
34 /* { dg-final { scan-tree-dump-times "Deleted dead store: y = " 1 "dse1" } } */
35 
36