[tor-commits] [tor/master] Have autoconf check whether enums are signed.

nickm at torproject.org nickm at torproject.org
Fri Feb 8 21:54:44 UTC 2013


commit 41200b47709bcdaf6f3a66e8453b3d852bd8d2a6
Author: Nick Mathewson <nickm at torproject.org>
Date:   Thu Feb 7 16:29:32 2013 -0500

    Have autoconf check whether enums are signed.
    
    Fixes bug 7727; fix on 0.2.4.10-alpha.
---
 changes/signof_enum  |    3 +++
 configure.ac         |    6 ++++++
 src/common/compat.h  |    3 +--
 src/win32/orconfig.h |    1 +
 4 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/changes/signof_enum b/changes/signof_enum
index fc9b9ed..ba4fb59 100644
--- a/changes/signof_enum
+++ b/changes/signof_enum
@@ -2,3 +2,6 @@
     - Use Ville Laurikari's implementation of AX_CHECK_SIGN() to determine
       the signs of types during autoconf. This is better than our old
       approach, which didn't work when cross-compiling.
+    - Detect the sign of enum values, rather than assuming that MSC is the
+      only compiler where enum types are all signed. Fix for bug 7727;
+      bugfix on 0.2.4.10-alpha.
diff --git a/configure.ac b/configure.ac
index e80e6f6..864477b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -984,6 +984,12 @@ if test "$tor_cv_size_t_signed" = yes; then
   AC_MSG_ERROR([You have a signed size_t; that's grossly nonconformant.])
 fi
 
+AX_CHECK_SIGN([enum always],
+       [ AC_DEFINE(ENUM_VALS_ARE_SIGNED, 1, [Define if enum is always signed]) ],
+       [ : ], [
+ enum always { AAA, BBB, CCC };
+])
+
 AC_CHECK_SIZEOF(socklen_t, , [AC_INCLUDES_DEFAULT()
 #ifdef HAVE_SYS_SOCKET_H
 #include <sys/socket.h>
diff --git a/src/common/compat.h b/src/common/compat.h
index d2944e6..fa071e5 100644
--- a/src/common/compat.h
+++ b/src/common/compat.h
@@ -136,8 +136,7 @@ extern INLINE double U64_TO_DBL(uint64_t x) {
 #define DBL_TO_U64(x) ((uint64_t) (x))
 #endif
 
-#if defined(_MSC_VER)
-/* XXXX024 we should instead have a more general check for "Is enum signed?"*/
+#ifdef ENUM_VALS_ARE_SIGNED
 #define ENUM_BF(t) unsigned
 #else
 /** Wrapper for having a bitfield of an enumerated type. Where possible, we
diff --git a/src/win32/orconfig.h b/src/win32/orconfig.h
index 4312d9f..f5d5cf4 100644
--- a/src/win32/orconfig.h
+++ b/src/win32/orconfig.h
@@ -256,3 +256,4 @@
 #define CURVE25519_ENABLED
 #define USE_CURVE25519_DONNA
 
+#define ENUM_VALS_ARE_SIGNED 1





More information about the tor-commits mailing list