diff options
-rw-r--r-- | libstdc++-v3/ChangeLog | 9 | ||||
-rw-r--r-- | libstdc++-v3/doc/xml/manual/numerics.xml | 5 | ||||
-rw-r--r-- | libstdc++-v3/include/c_compatibility/complex.h | 9 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/17_intro/headers/c++1998/complex.cc | 26 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/26_numerics/complex/c99.cc | 36 |
5 files changed, 81 insertions, 4 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 69303abec17..250c8be8e1f 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,12 @@ +2012-08-13 Marc Glisse <marc.glisse@inria.fr> + + PR libstdc++/54112 + * include/c_compatibility/complex.h: Undefine complex, always + include system's complex.h if present. + * testsuite/26_numerics/complex/c99.cc: New testcase. + * testsuite/17_intro/headers/c++1998/complex.cc: Likewise. + * doc/xml/manual/numerics.xml: Document it. + 2012-08-12 Jonathan Wakely <jwakely.gcc@gmail.com> PR libstdc++/52681 diff --git a/libstdc++-v3/doc/xml/manual/numerics.xml b/libstdc++-v3/doc/xml/manual/numerics.xml index a9e866e78c8..eb1014e98a9 100644 --- a/libstdc++-v3/doc/xml/manual/numerics.xml +++ b/libstdc++-v3/doc/xml/manual/numerics.xml @@ -44,6 +44,11 @@ prints <code>(u,v)</code> and <code>op>></code> can read <code>u</code>, <code>(u)</code>, and <code>(u,v)</code>. </para> + <para>As an extension to C++11 and for increased compatibility with C, + <code><complex.h></code> includes both <code><complex></code> + and the C99 <code><complex.h></code> (if the C library provides + it). + </para> </section> </section> diff --git a/libstdc++-v3/include/c_compatibility/complex.h b/libstdc++-v3/include/c_compatibility/complex.h index 7dc5926f1e1..1e2acafc7c2 100644 --- a/libstdc++-v3/include/c_compatibility/complex.h +++ b/libstdc++-v3/include/c_compatibility/complex.h @@ -30,10 +30,11 @@ #ifdef __GXX_EXPERIMENTAL_CXX0X__ # include <ccomplex> -#else -# if _GLIBCXX_HAVE_COMPLEX_H -# include_next <complex.h> -# endif +#endif + +#if _GLIBCXX_HAVE_COMPLEX_H +# include_next <complex.h> +# undef complex #endif #ifndef _GLIBCXX_COMPLEX_H diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++1998/complex.cc b/libstdc++-v3/testsuite/17_intro/headers/c++1998/complex.cc new file mode 100644 index 00000000000..893de06173a --- /dev/null +++ b/libstdc++-v3/testsuite/17_intro/headers/c++1998/complex.cc @@ -0,0 +1,26 @@ +// { dg-do compile } + +// Copyright (C) 2012 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/>. + +// libstdc++/54112 +#include <bits/c++config.h> +#if _GLIBCXX_HAVE_COMPLEX_H +# include <complex.h> +#endif +#include <tr1/complex> +std::complex<double> x; diff --git a/libstdc++-v3/testsuite/26_numerics/complex/c99.cc b/libstdc++-v3/testsuite/26_numerics/complex/c99.cc new file mode 100644 index 00000000000..59a9ef197dd --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/complex/c99.cc @@ -0,0 +1,36 @@ +// { dg-do compile } +// { dg-options "-std=gnu++11" } + +// Copyright (C) 2012 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/>. + +// libstdc++/54112 +#include <bits/c++config.h> +#if _GLIBCXX_HAVE_COMPLEX_H +# include <complex.h> +#endif + +int main() +{ + bool test __attribute__((unused)) = true; + +#if _GLIBCXX_HAVE_COMPLEX_H + double _Complex x = .5; + double _Complex y = cacos (x); + (void)y; +#endif +} |