// { dg-do compile { target c++17 } } // { dg-options "-fno-inline" } template int sfoo (T); // { dg-warning "used but never defined" } template int gfoo (T); // OK, but not completable template int ifoo (T); // OK template struct Wrapper {}; template Wrapper capture (T &&) {return Wrapper ();} static int svar = sfoo (capture ([]{})); int gvar = gfoo (capture ([]{})); inline int ivar = ifoo (capture ([]{})); // These manglings change between ABIs 17 and 18 (the final // substitution number). // { dg-final { scan-assembler {_?_Z7captureINL4svarMUlvE_EE7WrapperIT_EOS3_:} } } // { dg-final { scan-assembler {_?_Z7captureIN4gvarMUlvE_EE7WrapperIT_EOS3_:} } } // { dg-final { scan-assembler {_?_Z7captureIN4ivarMUlvE_EE7WrapperIT_EOS3_:} } } // Calls to the foos are emitted. // { dg-final { scan-assembler {call[ \t]*_?_Z4sfooI7WrapperINL4svarMUlvE_EEEiT_} { target { i?86-*-* x86_64-*-* } } } } // { dg-final { scan-assembler {call[ \t]*_?_Z4gfooI7WrapperIN4gvarMUlvE_EEEiT_} { target { i?86-*-* x86_64-*-* } } } } // { dg-final { scan-assembler {call[ \t]*_?_Z4ifooI7WrapperIN4ivarMUlvE_EEEiT_} { target { i?86-*-* x86_64-*-* } } } }