bug-gnulib@gnu.org mirror (unofficial)
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: Pedro Alves <palves@redhat.com>, Paul Eggert <eggert@cs.ucla.edu>,
	bug-gnulib@gnu.org
Subject: Re: [PATCH] Fix real-floating argument functions in C++ mode
Date: Mon, 14 Nov 2016 23:08:21 +0000	[thread overview]
Message-ID: <a3fde60f-175f-fa5d-a2aa-90bab49b8e48@redhat.com> (raw)
In-Reply-To: <f548b4f6-d369-507c-89ca-d7863b2af00c@redhat.com>

On 11/14/2016 09:19 PM, Pedro Alves wrote:

> Let me try that and send a new patch.

Here's an simpler implementation, IMO.  I went ahead and added
the _GL_BEGIN_NAMESPACE/_GL_END_NAMESPACE macros to c++defs.h as
I'm fairly sure they'll end up being useful in more places.

Passes same testing as before, with all tests now green.

>From cf4f33cb8f8185f1c7d7ee6dd6da45e7153ab7d2 Mon Sep 17 00:00:00 2001
From: Pedro Alves <palves@redhat.com>
Date: Mon, 14 Nov 2016 22:49:33 +0000
Subject: [PATCH] Fix real-floating argument functions in C++ mode

ChangeLog:
2016-11-14  Pedro Alves  <palves@redhat.com>

	Fix real-floating argument functions in C++ mode.  Define
	isfinite, isinf, isnan, signbit in the gnulib namespace instead of
	in the global namespace.
	* build-aux/snippet/c++defs.h (_GL_BEGIN_NAMESPACE)
	(_GL_END_NAMESPACE): New.
	* lib/math.in.h (_GL_MATH_CXX_REAL_FLOATING_DECL_2): Use them.
	(isfinite, isinf, isnan, signbit) [__cplusplus &&
	GNULIB_NAMESPACE]: Define them in the GNULIB_NAMESPACE namespace
	instead of in the global namespace.
	* tests/test-math-c++.cc: Check that the isfinite, isinf, isnan,
	signbit overloads exist in the GNULIB_NAMESPACE namespace, instead
	of in the global namespace.
---
 build-aux/snippet/c++defs.h |  9 +++++++++
 lib/math.in.h               | 12 +++++++-----
 tests/test-math-c++.cc      |  5 +++--
 3 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/build-aux/snippet/c++defs.h b/build-aux/snippet/c++defs.h
index 8fc95e3..b19a0be 100644
--- a/build-aux/snippet/c++defs.h
+++ b/build-aux/snippet/c++defs.h
@@ -17,6 +17,15 @@
 #ifndef _GL_CXXDEFS_H
 #define _GL_CXXDEFS_H
 
+/* Begin/end the GNULIB_NAMESPACE namespace.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE {
+# define _GL_END_NAMESPACE }
+#else
+# define _GL_BEGIN_NAMESPACE
+# define _GL_END_NAMESPACE
+#endif
+
 /* The three most frequent use cases of these macros are:
 
    * For providing a substitute for a function that is missing on some
diff --git a/lib/math.in.h b/lib/math.in.h
index 9a194cb..e1dc970 100644
--- a/lib/math.in.h
+++ b/lib/math.in.h
@@ -63,6 +63,7 @@ _gl_cxx_ ## func ## l (long double l)                               \
   return func (l);                                                  \
 }
 # define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func) \
+_GL_BEGIN_NAMESPACE                                                 \
 inline int                                                          \
 func (float f)                                                      \
 {                                                                   \
@@ -77,7 +78,8 @@ inline int                                                          \
 func (long double l)                                                \
 {                                                                   \
   return _gl_cxx_ ## func ## l (l);                                 \
-}
+}                                                                   \
+_GL_END_NAMESPACE
 #endif
 
 /* Helper macros to define a portability warning for the
@@ -2044,7 +2046,7 @@ _GL_EXTERN_C int gl_isfinitel (long double x);
     gl_isfinitef (x))
 # endif
 # ifdef __cplusplus
-#  ifdef isfinite
+#  if defined isfinite || defined GNULIB_NAMESPACE
 _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite)
 #   undef isfinite
 _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite)
@@ -2071,7 +2073,7 @@ _GL_EXTERN_C int gl_isinfl (long double x);
     gl_isinff (x))
 # endif
 # ifdef __cplusplus
-#  ifdef isinf
+#  if defined isinf || defined GNULIB_NAMESPACE
 _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf)
 #   undef isinf
 _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf)
@@ -2189,7 +2191,7 @@ _GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST;
     __builtin_isnanf ((float)(x)))
 # endif
 # ifdef __cplusplus
-#  ifdef isnan
+#  if defined isnan || defined GNULIB_NAMESPACE
 _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan)
 #   undef isnan
 _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan)
@@ -2264,7 +2266,7 @@ _GL_EXTERN_C int gl_signbitl (long double arg);
     gl_signbitf (x))
 # endif
 # ifdef __cplusplus
-#  ifdef signbit
+#  if defined signbit || defined GNULIB_NAMESPACE
 _GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit)
 #   undef signbit
 _GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit)
diff --git a/tests/test-math-c++.cc b/tests/test-math-c++.cc
index f0f1448..cc7378c 100644
--- a/tests/test-math-c++.cc
+++ b/tests/test-math-c++.cc
@@ -24,7 +24,8 @@
 #include "signature.h"
 
 /* Signature check for a function that takes a real-floating argument.
-   Check that each overloaded function with the specified signature exists.  */
+   Check that each overloaded function with the specified signature
+   exists in the GNULIB_NAMESPACE namespace.  */
 #define REAL_FLOATING_CHECK(func,\
                             rettype1, parameters1,\
                             rettype2, parameters2,\
@@ -34,7 +35,7 @@
   OVERLOADED_CHECK (func, rettype3, parameters3, _3)
 #define OVERLOADED_CHECK(func, rettype, parameters, suffix) \
   static rettype (* _GL_UNUSED signature_check_ ## func ## suffix) parameters \
-    = static_cast<rettype(*)parameters>(func)
+    = static_cast<rettype(*)parameters>(GNULIB_NAMESPACE::func)
 
 
 /* Keep these checks in the same order as math.in.h!  */
-- 
2.5.5




  reply	other threads:[~2016-11-14 23:08 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-12 16:22 [PATCH] Avoid having GNULIB_NAMESPACE::func always inject references to rpl_func Pedro Alves
2016-11-12 17:30 ` Paul Eggert
2016-11-14 18:16   ` [PATCH] Fix real-floating argument functions in C++ mode Pedro Alves
2016-11-14 21:19     ` Pedro Alves
2016-11-14 23:08       ` Pedro Alves [this message]
2016-11-15 17:17         ` Paul Eggert
2016-11-20 12:26 ` [PATCH] Avoid having GNULIB_NAMESPACE::func always inject references to rpl_func Bruno Haible
2016-11-21 20:24   ` Pedro Alves
2016-11-21 23:27     ` Bruno Haible
2016-11-21 23:33       ` Pedro Alves
2016-11-21 23:34     ` ChangeLog entries Bruno Haible

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://lists.gnu.org/mailman/listinfo/bug-gnulib

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a3fde60f-175f-fa5d-a2aa-90bab49b8e48@redhat.com \
    --to=palves@redhat.com \
    --cc=bug-gnulib@gnu.org \
    --cc=eggert@cs.ucla.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).