aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2013-02-13 22:58:53 +0100
committerMarc Glisse <glisse@gcc.gnu.org>2013-02-13 21:58:53 +0000
commit1c259e8b49d33ec416fb686edaf6b4f3909e286a (patch)
treee62855d65f3dc4a07ed76d169c9d756ebb55c6df
parent9e3a83c18a2252b5e3a8c7ba91636534cb7c7a17 (diff)
downloadgcc-1c259e8b49d33ec416fb686edaf6b4f3909e286a.zip
gcc-1c259e8b49d33ec416fb686edaf6b4f3909e286a.tar.gz
gcc-1c259e8b49d33ec416fb686edaf6b4f3909e286a.tar.bz2
re PR libstdc++/56111 ({float,double,long double} complex not accepted anymore)
2013-02-13 Marc Glisse <marc.glisse@inria.fr> PR libstdc++/56111 * include/std/complex (complex): Undefine. * include/c_compatibility/complex.h (complex): Only undefine if <complex> has been included. * testsuite/26_numerics/complex/56111.cc: New testcase. From-SVN: r196034
-rw-r--r--libstdc++-v3/ChangeLog8
-rw-r--r--libstdc++-v3/include/c_compatibility/complex.h5
-rw-r--r--libstdc++-v3/include/std/complex3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/complex/56111.cc36
4 files changed, 51 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 338d5d7..c46b95d 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,11 @@
+2013-02-13 Marc Glisse <marc.glisse@inria.fr>
+
+ PR libstdc++/56111
+ * include/std/complex (complex): Undefine.
+ * include/c_compatibility/complex.h (complex): Only undefine if
+ <complex> has been included.
+ * testsuite/26_numerics/complex/56111.cc: New testcase.
+
2013-02-13 François Dumont <fdumont@gcc.gnu.org>
* include/bits/hashtable_policy.h (_Hash_code_base): Restore
diff --git a/libstdc++-v3/include/c_compatibility/complex.h b/libstdc++-v3/include/c_compatibility/complex.h
index cf7f72f..be0e82d 100644
--- a/libstdc++-v3/include/c_compatibility/complex.h
+++ b/libstdc++-v3/include/c_compatibility/complex.h
@@ -34,7 +34,10 @@
#if _GLIBCXX_HAVE_COMPLEX_H
# include_next <complex.h>
-# undef complex
+# ifdef _GLIBCXX_COMPLEX
+// See PR56111, keep the macro in C++03 if possible.
+# undef complex
+# endif
#endif
#ifndef _GLIBCXX_COMPLEX_H
diff --git a/libstdc++-v3/include/std/complex b/libstdc++-v3/include/std/complex
index fe3f267..e426673 100644
--- a/libstdc++-v3/include/std/complex
+++ b/libstdc++-v3/include/std/complex
@@ -44,6 +44,9 @@
#include <cmath>
#include <sstream>
+// Get rid of a macro possibly defined in <complex.h>
+#undef complex
+
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
diff --git a/libstdc++-v3/testsuite/26_numerics/complex/56111.cc b/libstdc++-v3/testsuite/26_numerics/complex/56111.cc
new file mode 100644
index 0000000..7db40d1
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/complex/56111.cc
@@ -0,0 +1,36 @@
+// { dg-do compile }
+// { dg-options "-std=c++98" }
+
+// Copyright (C) 2013 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++/56111
+// In C++03, we try to keep the macro "complex" as long as it does not
+// conflict (std::complex).
+#include <bits/c++config.h>
+#if _GLIBCXX_HAVE_COMPLEX_H
+# include <complex.h>
+#endif
+
+int main()
+{
+#if _GLIBCXX_HAVE_COMPLEX_H
+ double complex x = .5;
+ double complex y = cacos (x);
+ (void)y;
+#endif
+}