mirror of
https://forge.sourceware.org/marek/gcc.git
synced 2026-02-22 20:01:31 -05:00
2016-11-04 Bernd Edlinger <bernd.edlinger@hotmail.de> PR c++/71973 * g++.dg/cpp1y/lambda-generic-udt.C: Fix builtin function declaration. * g++.dg/init/new15.C: Likewise. * g++.dg/ipa/inline-1.C: Likewise. * g++.dg/ipa/inline-2.C: Likewise. * g++.dg/lto/20080908-1_0.C: Likewise. * g++.dg/tc1/dr20.C: Likewise. * g++.dg/tree-ssa/inline-1.C: Likewise. * g++.dg/tree-ssa/inline-2.C: Likewise. * g++.old-deja/g++.law/except1.C: Likewise. * g++.old-deja/g++.other/vbase5.C: Likewise. * obj-c++.dg/lto/trivial-1_0.mm: Likewise. From-SVN: r241846
52 lines
1.5 KiB
C
52 lines
1.5 KiB
C
// Ensure that generic lambdas properly construct and destroy user types.
|
|
// { dg-options "-DUSE_AUTO_SYNTAX" }
|
|
// { dg-do run { target c++14 } }
|
|
|
|
int i = 3;
|
|
|
|
struct S
|
|
{
|
|
S () { ++i; }
|
|
S (S const&) { ++i; }
|
|
S (S&& old) { old.shadow = true; i += 2; }
|
|
~S () { if (shadow) i -= 2; else --i; }
|
|
|
|
bool shadow = false;
|
|
};
|
|
|
|
extern "C" int printf(const char*, ...);
|
|
#define assert(e) if (e); else \
|
|
printf ("%s:%d: !(%s)\n", __FILE__, __LINE__, #e), __builtin_abort ();
|
|
|
|
int main ()
|
|
{
|
|
assert (i == 3);
|
|
{
|
|
S s; assert (i == 4);
|
|
|
|
#if USE_AUTO_SYNTAX
|
|
auto byref = [] (auto& r) { (void) r; };
|
|
auto bycref = [] (auto const& r) { (void) r; };
|
|
auto byval = [] (auto v, auto const x) { assert (i == x); (void) v; };
|
|
auto byrval = [] (auto&& r, auto const x) { S steal (static_cast<S&&>(r));
|
|
assert (i == x); };
|
|
|
|
#elif USE_EXPLICIT_TEMPLATE_SYNTAX
|
|
auto byref = [] <typename T> (T& r) { (void) r; };
|
|
auto bycref = [] <typename T> (T const& r) { (void) r; };
|
|
auto byval = [] <typename T, typename I>
|
|
(T v, I const x) { assert (i == x); (void) v; };
|
|
auto byrval = [] <typename T, typename I>
|
|
(T&& r, I const x) { S steal (static_cast<S&&>(r));
|
|
assert (i == x); };
|
|
#endif
|
|
|
|
byref (s); assert (i == 4);
|
|
bycref (s); assert (i == 4);
|
|
byval (s, 5); assert (i == 4);
|
|
byrval (static_cast<S&&>(s), 6); assert (i == 5);
|
|
}
|
|
assert (i == 3);
|
|
}
|
|
|