/* { dg-do compile } */ /* { dg-options "-O -fdump-tree-dce2" } */ /* Verify that we can eliminate the useless conversions to/from const qualified pointer types this_2 = o_1; D.20003_4 = this_2->data_m; this_5 = D.20003_4; D.20005_6 = this_5->value; copyprop should propagate o_1 and D.20003_4 to the loads of data_m and value. dce removes all traces of this. */ struct Data { int get() const { return value; } int value; }; struct Object { int operator[](int i) const { return data_m->get(); } Data *data_m; }; int foo(Object&o) { return o[0]; } /* Remaining should be two loads. */ /* { dg-final { scan-tree-dump-times " = \[^\n\]*;" 2 "dce2" } } */ /* { dg-final { cleanup-tree-dump "dce2" } } */