Hello,
here is a patch for PR54112. It does 2 things:
* #undef complex after including the system's complex.h
* in C++11, still include the system's complex.h
The C++11 standard says that including complex.h is equivalent to
including <complex>, with the rationale that a C++ compiler can't parse a
C99 complex.h header. However, g++, as an extension, handles _Complex, so
it makes sense to also provide the prototypes for cacos and other C99
complex math functions.
Tested, no regression.
(Cc: Benjamin, who wrote the header)
2012-07-28 Marc Glisse <marc.gli...@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.
--
Marc Glisse
Index: libstdc++-v3/include/c_compatibility/complex.h
===================================================================
--- libstdc++-v3/include/c_compatibility/complex.h (revision 189925)
+++ libstdc++-v3/include/c_compatibility/complex.h (working copy)
@@ -23,20 +23,21 @@
// <http://www.gnu.org/licenses/>.
/** @file complex.h
* This is a Standard C++ Library header.
*/
#include <bits/c++config.h>
#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
#define _GLIBCXX_COMPLEX_H 1
#endif
Index: libstdc++-v3/testsuite/26_numerics/complex/c99.cc
===================================================================
--- libstdc++-v3/testsuite/26_numerics/complex/c99.cc (revision 0)
+++ libstdc++-v3/testsuite/26_numerics/complex/c99.cc (revision 0)
@@ -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
+}
Property changes on: libstdc++-v3/testsuite/26_numerics/complex/c99.cc
___________________________________________________________________
Added: svn:eol-style
+ native
Added: svn:keywords
+ Author Date Id Revision URL
Index: libstdc++-v3/testsuite/17_intro/headers/c++1998/complex.cc
===================================================================
--- libstdc++-v3/testsuite/17_intro/headers/c++1998/complex.cc (revision 0)
+++ libstdc++-v3/testsuite/17_intro/headers/c++1998/complex.cc (revision 0)
@@ -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;
Property changes on: libstdc++-v3/testsuite/17_intro/headers/c++1998/complex.cc
___________________________________________________________________
Added: svn:eol-style
+ native
Added: svn:keywords
+ Author Date Id Revision URL