re PR libstdc++/54112 (including complex.h and complex fails in C++03)
authorMarc Glisse <marc.glisse@inria.fr>
Mon, 13 Aug 2012 11:55:00 +0000 (13:55 +0200)
committerMarc Glisse <glisse@gcc.gnu.org>
Mon, 13 Aug 2012 11:55:00 +0000 (11:55 +0000)
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

libstdc++-v3/ChangeLog
libstdc++-v3/doc/xml/manual/numerics.xml
libstdc++-v3/include/c_compatibility/complex.h
libstdc++-v3/testsuite/17_intro/headers/c++1998/complex.cc [new file with mode: 0644]
libstdc++-v3/testsuite/26_numerics/complex/c99.cc [new file with mode: 0644]

index 69303abec17fcc70cd223e73be500036fac00dbf..250c8be8e1fe7ef7a148e4482ed11e4699978fe0 100644 (file)
@@ -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
index a9e866e78c8db2d4cbf05cf386faf230a9617cb2..eb1014e98a9524d504cd680a8720d176e4760dd2 100644 (file)
       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>
index 7dc5926f1e17a4c51e8daef92cce640aa5f51c49..1e2acafc7c2176d2198a1b786e48753bd3892fcb 100644 (file)
 
 #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 (file)
index 0000000..893de06
--- /dev/null
@@ -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 (file)
index 0000000..59a9ef1
--- /dev/null
@@ -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
+}