From 2c4caf0ab956d49f57544fd65c93dbbd60123eff Mon Sep 17 00:00:00 2001 From: Benjamin Kosnik Date: Wed, 3 Aug 2011 21:05:14 +0000 Subject: tuple: Mark more constructors constexpr. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2011-08-03 Benjamin Kosnik * include/std/tuple: Mark more constructors constexpr. * testsuite/20_util/tuple/cons/constexpr.cc: Split into and extend as: * testsuite/20_util/tuple/cons/constexpr-2.cc: ...this. * testsuite/20_util/tuple/cons/constexpr-3.cc: ... and this. * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust line numbers. 2011-08-03 Benjamin Kosnik François Dumont * testsuite/23_containers/array/at_neg.cc: Move... * testsuite/23_containers/array/at.cc: ...here. Remove -fno-exceptions, call const at member function. Co-Authored-By: François Dumont From-SVN: r177299 --- .../testsuite/20_util/tuple/cons/constexpr-2.cc | 63 ++++++++++++++++++++++ .../testsuite/20_util/tuple/cons/constexpr-3.cc | 60 +++++++++++++++++++++ .../testsuite/20_util/tuple/cons/constexpr.cc | 47 ---------------- .../20_util/weak_ptr/comparison/cmp_neg.cc | 2 +- libstdc++-v3/testsuite/23_containers/array/at.cc | 31 +++++++++++ .../testsuite/23_containers/array/at_neg.cc | 28 ---------- 6 files changed, 155 insertions(+), 76 deletions(-) create mode 100644 libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-2.cc create mode 100644 libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-3.cc delete mode 100644 libstdc++-v3/testsuite/20_util/tuple/cons/constexpr.cc create mode 100644 libstdc++-v3/testsuite/23_containers/array/at.cc delete mode 100644 libstdc++-v3/testsuite/23_containers/array/at_neg.cc (limited to 'libstdc++-v3/testsuite') diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-2.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-2.cc new file mode 100644 index 00000000000..14577b0bc06 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-2.cc @@ -0,0 +1,63 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2010, 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +#include +#include + +#include + +// 2 element tuple +int main() +{ + typedef std::tuple tuple_type; + + // 01: default ctor + __gnu_test::constexpr_default_constructible test1; + test1.operator()(); + + // 02: default copy ctor + __gnu_test::constexpr_single_value_constructible test2; + test2.operator()(); + + // 03: element move ctor, single element + const int i1(415); + constexpr tuple_type t2 { 44, std::move(i1) }; + + // 04: element move ctor, two element + const int i2(510); + const int i3(408); + constexpr tuple_type t4 { std::move(i2), std::move(i3) }; + + // 05: value-type conversion constructor + const int i4(650); + const int i5(310); + constexpr tuple_type t8(i4, i5); + + // 06: pair conversion ctor + test2.operator()>(); + test2.operator(), std::pair>(); + test2.operator()>(); + + // 07: different-tuple-type conversion constructor + // test2.operator()>(); + // test2.operator(), tuple_type>(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-3.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-3.cc new file mode 100644 index 00000000000..7f8b2f93ecd --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-3.cc @@ -0,0 +1,60 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +#include +#include + +#include + +// 3 element tuple +int main() +{ + typedef std::tuple tuple_type; + + // 01: default ctor + __gnu_test::constexpr_default_constructible test1; + test1.operator()(); + + // 02: default copy ctor + __gnu_test::constexpr_single_value_constructible test2; + test2.operator()(); + + // 03: element move ctor, single element + const int i1(415); + constexpr tuple_type t2 { 44, 55, std::move(i1) }; + + // 04: element move ctor, three element + const int i2(510); + const int i3(408); + const int i4(650); + constexpr tuple_type t4 { std::move(i2), std::move(i3), std::move(i4) }; + + // 05: value-type conversion constructor + const int i5(310); + const int i6(310); + const int i7(310); + constexpr tuple_type t8(i5, i6, i7); + + // 06: different-tuple-type conversion constructor + // test2.operator()>(); + // test2.operator(), tuple_type>(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr.cc deleted file mode 100644 index b5eba73fdac..00000000000 --- a/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr.cc +++ /dev/null @@ -1,47 +0,0 @@ -// { dg-do compile } -// { dg-options "-std=gnu++0x" } - -// Copyright (C) 2010 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . - -#include -#include - -int main() -{ - __gnu_test::constexpr_default_constructible test1; - test1.operator()>(); - - __gnu_test::constexpr_single_value_constructible test2; - test2.operator(), std::tuple>(); - // test2.operator(), std::pair>(); - // test2.operator(), std::tuple>(); - // test2.operator(), std::tuple>(); - - // test 3 - const int i1(129); - const int i2(6); - constexpr std::tuple p3(i1, i2); - - // test 4 - const int i3(415); - const int i4(550); - const int i5(6414); - constexpr std::tuple p4(i1, i2, i3, i4, i5); - - return 0; -} diff --git a/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc b/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc index 6eecc2d2aeb..b192c656f79 100644 --- a/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc +++ b/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc @@ -51,7 +51,7 @@ main() // { dg-warning "note" "" { target *-*-* } 485 } // { dg-warning "note" "" { target *-*-* } 479 } // { dg-warning "note" "" { target *-*-* } 468 } -// { dg-warning "note" "" { target *-*-* } 813 } +// { dg-warning "note" "" { target *-*-* } 829 } // { dg-warning "note" "" { target *-*-* } 1055 } // { dg-warning "note" "" { target *-*-* } 1049 } // { dg-warning "note" "" { target *-*-* } 341 } diff --git a/libstdc++-v3/testsuite/23_containers/array/at.cc b/libstdc++-v3/testsuite/23_containers/array/at.cc new file mode 100644 index 00000000000..449395206cc --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/array/at.cc @@ -0,0 +1,31 @@ +// { dg-do run { xfail *-*-* } } +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +#include + +int main() +{ + // Expected behavior is to either throw and have the uncaught + // exception end up in a terminate handler which eventually exits, + // or abort. (Depending on -fno-exceptions.) + constexpr std::array a{{1, 2, 3}}; + auto i = a.at(4); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/array/at_neg.cc b/libstdc++-v3/testsuite/23_containers/array/at_neg.cc deleted file mode 100644 index aefc39b75ec..00000000000 --- a/libstdc++-v3/testsuite/23_containers/array/at_neg.cc +++ /dev/null @@ -1,28 +0,0 @@ -// { dg-do run { xfail *-*-* } } -// { dg-options "-std=gnu++0x -fno-exceptions" } - -// Copyright (C) 2011 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . - -#include - -int main() -{ - std::array a{{1, 2, 3}}; - auto i = a.at(4); // expected behavior is to either throw or abort - return 0; -} -- cgit v1.2.1