/* { dg-do compile } */
/* { dg-options "-O -fdump-tree-dce2" } */
/* LLVM LOCAL test not applicable */
/* { dg-require-fdump "" } */

/* 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];
}

/* { dg-final { scan-tree-dump-not ".* = \[^>;\]*;" "dce2" { xfail *-*-* } } } */
/* { dg-final { cleanup-tree-dump "dce2" } } */
