aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2012-08-13 13:55:00 +0200
committerMarc Glisse <glisse@gcc.gnu.org>2012-08-13 11:55:00 +0000
commit6a9573cc7b1d527e61f4ef7900c0a1c21203e24a (patch)
treec01626515a30bc9dacf466cf7f86fee9bb22d634
parent61f7b9ae9314c2e69f12508f10e0643db1cd5d25 (diff)
downloadgcc-6a9573cc7b1d527e61f4ef7900c0a1c21203e24a.zip
gcc-6a9573cc7b1d527e61f4ef7900c0a1c21203e24a.tar.gz
gcc-6a9573cc7b1d527e61f4ef7900c0a1c21203e24a.tar.bz2
re PR libstdc++/54112 (including complex.h and complex fails in C++03)
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. From-SVN: r190340
-rw-r--r--libstdc++-v3/ChangeLog9
-rw-r--r--libstdc++-v3/doc/xml/manual/numerics.xml5
-rw-r--r--libstdc++-v3/include/c_compatibility/complex.h9
-rw-r--r--libstdc++-v3/testsuite/17_intro/headers/c++1998/complex.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/complex/c99.cc36
5 files changed, 81 insertions, 4 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 69303ab..250c8be 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 a9e866e..eb1014e 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&gt;&gt;</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>&lt;complex.h&gt;</code> includes both <code>&lt;complex&gt;</code>
+ and the C99 <code>&lt;complex.h&gt;</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 7dc5926..1e2acaf 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 0000000..893de06
--- /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 0000000..59a9ef1
--- /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
+}