/* { dg-do compile } */ /* { dg-options "-O2" } */ struct string { long long _M_p; long long i; string(); int begin(); int end(); string(int, int); }; struct symbol { int type; string name; long long raw_name; long long demangled_name; long long version_name; int version_status; int status; void init(); }; void symbol::init() { name = string(); } struct pair { symbol first; symbol second; pair(const symbol& __a, const symbol& __b) : first(__a), second(__b) { } }; struct vector { void push_back(const pair& __x); }; /* This ends up with two RHS deref copies, and we need to get the offsets right on them. */ void f(vector incompatible) { symbol base; incompatible.push_back(pair(base, base)); }