The 26_numerics/headers/cmath/c99_classification_macros_c++.cc test was written for C++98 mode (we have a separate test that uses -std=gnu++11) but with the GCC 6 switch to -std=gnu++14 by default we now check it in C++14 mode. That's pointless, as the relevant parts of <cmath> are equivalent in C++11 and C++14. This adds -std=gnu++98 to restore testing the right mode.
I've renamed c99_classification_macros_c++.cc and c99_classification_macros_c++0x.cc to *c++98.cc and *c++11.cc respectively, to make clear they are for specific language modes. Tested x86_64-linux, committed to trunk.
commit 2be85d41afefe58006af0c807c1c7da0c9c8ad69 Author: Jonathan Wakely <jwak...@redhat.com> Date: Fri Jan 8 14:28:53 2016 +0000 Use -std option in test for C99 macros in <cmath> * testsuite/26_numerics/headers/cmath/ c99_classification_macros_c++.cc: Rename to ... * testsuite/26_numerics/headers/cmath/ c99_classification_macros_c++98.cc: Here and add -std=gnu++98. * testsuite/26_numerics/headers/cmath/ c99_classification_macros_c++0x.cc: Rename to ... * testsuite/26_numerics/headers/cmath/ c99_classification_macros_c++11.cc: Here. diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++.cc deleted file mode 100644 index 6e81b68..0000000 --- a/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++.cc +++ /dev/null @@ -1,84 +0,0 @@ -// 2001-04-06 gdr - -// Copyright (C) 2001-2016 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 -// <http://www.gnu.org/licenses/>. - - -// { dg-do compile { xfail uclibc } } -// { dg-excess-errors "" { target uclibc } } - -#include <cmath> - -void fpclassify() { } - -void isfinite() { } - -void isinf() { } - -void isnan() { } - -void isnormal() { } - -void signbit() { } - -void isgreater() { } - -void isgreaterequal() { } - -void isless() { } - -void islessequal() { } - -void islessgreater() { } - -void isunordered() { } - -#if _GLIBCXX_USE_C99_MATH -template <typename _Tp> - void test_c99_classify() - { - bool test __attribute__((unused)) = true; - - typedef _Tp fp_type; - fp_type f1 = 1.0; - fp_type f2 = 3.0; - int res = 0; - - res = std::fpclassify(f1); - res = std::isfinite(f2); - res = std::isinf(f1); - res = std::isnan(f2); - res = std::isnormal(f1); - res = std::signbit(f2); - res = std::isgreater(f1, f2); - res = std::isgreaterequal(f1, f2); - res = std::isless(f1, f2); - res = std::islessequal(f1,f2); - res = std::islessgreater(f1, f2); - res = std::isunordered(f1, f2); - res = res; // Suppress unused warning. - } -#endif - -int main() -{ -#if _GLIBCXX_USE_C99_MATH - test_c99_classify<float>(); - test_c99_classify<double>(); -#endif - return 0; -} diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++0x.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++0x.cc deleted file mode 100644 index 1638667..0000000 --- a/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++0x.cc +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (C) 2010-2016 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 -// <http://www.gnu.org/licenses/>. - -// { dg-options "-std=gnu++11" } -// { dg-do compile { xfail uclibc } } -// { dg-excess-errors "" { target uclibc } } - -#include <cmath> - -void fpclassify() { } - -void isfinite() { } - -void isinf() { } - -void isnan() { } - -void isnormal() { } - -void signbit() { } - -void isgreater() { } - -void isgreaterequal() { } - -void isless() { } - -void islessequal() { } - -void islessgreater() { } - -void isunordered() { } - -#if _GLIBCXX_USE_C99_MATH -template <typename _Tp, typename _Up = _Tp> - void test_c99_classify() - { - bool test __attribute__((unused)) = true; - - typedef _Tp fp_type_one; - typedef _Up fp_type_two; - fp_type_one f1 = 1.0; - fp_type_two f2 = 3.0; - int resi; - bool res; - - resi = std::fpclassify(f1); - res = std::isfinite(f2); - res = std::isinf(f1); - res = std::isnan(f2); - res = std::isnormal(f1); - res = std::signbit(f2); - res = std::isgreater(f1, f2); - res = std::isgreaterequal(f1, f2); - res = std::isless(f1, f2); - res = std::islessequal(f1,f2); - res = std::islessgreater(f1, f2); - res = std::isunordered(f1, f2); - resi = resi; // Suppress unused warning. - res = res; - } -#endif - -int main() -{ -#if _GLIBCXX_USE_C99_MATH - test_c99_classify<float>(); - test_c99_classify<double>(); - test_c99_classify<long double>(); - test_c99_classify<float, double>(); - test_c99_classify<float, long double>(); - test_c99_classify<double, float>(); - test_c99_classify<double, long double>(); - test_c99_classify<long double, float>(); - test_c99_classify<long double, double>(); -#endif - return 0; -} diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++11.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++11.cc new file mode 100644 index 0000000..1638667 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++11.cc @@ -0,0 +1,92 @@ +// Copyright (C) 2010-2016 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 +// <http://www.gnu.org/licenses/>. + +// { dg-options "-std=gnu++11" } +// { dg-do compile { xfail uclibc } } +// { dg-excess-errors "" { target uclibc } } + +#include <cmath> + +void fpclassify() { } + +void isfinite() { } + +void isinf() { } + +void isnan() { } + +void isnormal() { } + +void signbit() { } + +void isgreater() { } + +void isgreaterequal() { } + +void isless() { } + +void islessequal() { } + +void islessgreater() { } + +void isunordered() { } + +#if _GLIBCXX_USE_C99_MATH +template <typename _Tp, typename _Up = _Tp> + void test_c99_classify() + { + bool test __attribute__((unused)) = true; + + typedef _Tp fp_type_one; + typedef _Up fp_type_two; + fp_type_one f1 = 1.0; + fp_type_two f2 = 3.0; + int resi; + bool res; + + resi = std::fpclassify(f1); + res = std::isfinite(f2); + res = std::isinf(f1); + res = std::isnan(f2); + res = std::isnormal(f1); + res = std::signbit(f2); + res = std::isgreater(f1, f2); + res = std::isgreaterequal(f1, f2); + res = std::isless(f1, f2); + res = std::islessequal(f1,f2); + res = std::islessgreater(f1, f2); + res = std::isunordered(f1, f2); + resi = resi; // Suppress unused warning. + res = res; + } +#endif + +int main() +{ +#if _GLIBCXX_USE_C99_MATH + test_c99_classify<float>(); + test_c99_classify<double>(); + test_c99_classify<long double>(); + test_c99_classify<float, double>(); + test_c99_classify<float, long double>(); + test_c99_classify<double, float>(); + test_c99_classify<double, long double>(); + test_c99_classify<long double, float>(); + test_c99_classify<long double, double>(); +#endif + return 0; +} diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++98.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++98.cc new file mode 100644 index 0000000..4c4cc4e --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++98.cc @@ -0,0 +1,84 @@ +// 2001-04-06 gdr + +// Copyright (C) 2001-2016 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 +// <http://www.gnu.org/licenses/>. + +// { dg-options "-std=gnu++98" } +// { dg-do compile { xfail uclibc } } +// { dg-excess-errors "" { target uclibc } } + +#include <cmath> + +void fpclassify() { } + +void isfinite() { } + +void isinf() { } + +void isnan() { } + +void isnormal() { } + +void signbit() { } + +void isgreater() { } + +void isgreaterequal() { } + +void isless() { } + +void islessequal() { } + +void islessgreater() { } + +void isunordered() { } + +#if _GLIBCXX_USE_C99_MATH +template <typename _Tp> + void test_c99_classify() + { + bool test __attribute__((unused)) = true; + + typedef _Tp fp_type; + fp_type f1 = 1.0; + fp_type f2 = 3.0; + int res = 0; + + res = std::fpclassify(f1); + res = std::isfinite(f2); + res = std::isinf(f1); + res = std::isnan(f2); + res = std::isnormal(f1); + res = std::signbit(f2); + res = std::isgreater(f1, f2); + res = std::isgreaterequal(f1, f2); + res = std::isless(f1, f2); + res = std::islessequal(f1,f2); + res = std::islessgreater(f1, f2); + res = std::isunordered(f1, f2); + res = res; // Suppress unused warning. + } +#endif + +int main() +{ +#if _GLIBCXX_USE_C99_MATH + test_c99_classify<float>(); + test_c99_classify<double>(); +#endif + return 0; +}