[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: svn commit: r1508170 - in /subversion/trunk:

From: Daniel Shahaf <danielsh_at_elego.de>
Date: Thu, 1 Aug 2013 07:36:06 +0300

Daniel Shahaf wrote on Thu, Aug 01, 2013 at 05:47:58 +0300:
> Stefan Fuhrmann wrote on Wed, Jul 31, 2013 at 23:21:45 +0200:
> > * revert svn_hash_gets to simply use APR_HASH_KEY_STRING
>
> ...
>
> > * where it is being used, make svn_private_config.h the first #include
>
> Why would the order of includes matter? Do you plan to still use
> SVN_HAS_DUNDER_BUILTINS in svn_hash_sets()?

Personally I'd simply revert back to the code right now on the 1.8
branch:

#define svn_hash_gets(ht, key) \
            apr_hash_get(ht, key, APR_HASH_KEY_STRING)
                                                                                
#define svn_hash_sets(ht, key, val) \
            apr_hash_set(ht, key, APR_HASH_KEY_STRING, val)

and strip all the dunder-builtins stuff.

[[[
Index: subversion/include/svn_hash.h
===================================================================
--- subversion/include/svn_hash.h (revision 1509078)
+++ subversion/include/svn_hash.h (working copy)
@@ -239,52 +239,19 @@ svn_hash_from_cstring_keys(apr_hash_t **hash,
                            const apr_array_header_t *keys,
                            apr_pool_t *pool);
 
-/* Used by the svn_hash_gets macro.
- * Make sure you either defined it before including this header or not
- * at all.
- */
-#if !defined(SVN_HAS_DUNDER_BUILTINS)
-/* If you define it elsewhere to generate better code, the definition
- * below will usually generate a compiler warning if your definition is
- * being encountered _after_ #including this header.
- */
-#define SVN_HAS_DUNDER_BUILTINS 0
-#endif
-
 /** Shortcut for apr_hash_get() with a const char * key.
  *
  * @since New in 1.8.
  */
-#if SVN_HAS_DUNDER_BUILTINS
-/* We have three use-cases:
- 1. (common) KEY is a string literal.
- 2. (less common) KEY is a const char*.
- 3. (rare) KEY is the result of an expensive function call.
- For the first, we want to evaluate the string length at compile time.
- (We use strlen(), which gets optimized to a constant.) For the other
- two, however, we want to avoid having the macro multiply-evaluate KEY.
- So, if our compiler is smart enough (that includes at least gcc and
- clang), we use __builtin_constant_p() to have our cake and eat it too: */
-# define svn_hash_gets(ht, key) \
- apr_hash_get(ht, key, \
- __builtin_constant_p(strlen(key)) \
- ? strlen(key) : APR_HASH_KEY_STRING)
-#else
-/* ... and when our compiler is anything else, we take the hit and compute the
- length of string literals at run-time. */
-# define svn_hash_gets(ht, key) \
+#define svn_hash_gets(ht, key) \
             apr_hash_get(ht, key, APR_HASH_KEY_STRING)
-#endif
 
 /** Shortcut for apr_hash_set() with a const char * key.
  *
  * @since New in 1.8.
  */
-#define svn_hash_sets(ht, key, val) \
- do { \
- const void *svn_key__temp = (key); \
- apr_hash_set(ht, svn_key__temp, strlen(svn_key__temp), val); \
- } while (0)
+#define svn_hash_sets(ht, key, val) \
+ apr_hash_set(ht, key, APR_HASH_KEY_STRING, val)
 
 /** @} */
 
]]]

[[[
Index: build/ac-macros/svn-macros.m4
===================================================================
--- build/ac-macros/svn-macros.m4 (revision 1509078)
+++ build/ac-macros/svn-macros.m4 (working copy)
@@ -163,25 +163,3 @@ AC_DEFUN([SVN_CHECK_FOR_ATOMIC_BUILTINS],
       return 0;
   }], [svn_cv_atomic_builtins=yes], [svn_cv_atomic_builtins=no], [svn_cv_atomic_builtins=no])])
 ])
-
-AC_DEFUN([SVN_CHECK_FOR_DUNDER_BUILTINS],
-[
- AC_CACHE_CHECK([whether the compiler provides dunder builtins], [svn_cv_dunder_builtins],
- [
- AC_RUN_IFELSE([AC_LANG_SOURCE([[
- int main(int argc)
- {
- return (!__builtin_constant_p(argc) && __builtin_constant_p("foobar"))
- ? 0 /* EXIT_SUCCESS */ : 1 /* EXIT_FAILURE */;
- }]])],
- svn_cv_dunder_builtins="yes",
- svn_cv_dunder_builtins="no",
- [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
- int main(void){
- return __builtin_constant_p("foobar") ? 0 : 1;
- }]])],
- svn_cv_dunder_builtins="yes",
- svn_cv_dunder_builtins="no")
- ])
- ])
-])
Index: configure.ac
===================================================================
--- configure.ac (revision 1509078)
+++ configure.ac (working copy)
@@ -171,11 +171,6 @@ if test "$svn_cv_atomic_builtins" = "yes"; then
     AC_DEFINE(SVN_HAS_ATOMIC_BUILTINS, 1, [Define if compiler provides atomic builtins])
 fi
 
-SVN_CHECK_FOR_DUNDER_BUILTINS
-if test "$svn_cv_dunder_builtins" = "yes"; then
- AC_DEFINE(SVN_HAS_DUNDER_BUILTINS, 1, [Define if compiler provides __builtin_constant_p])
-fi
-
 dnl Set up a number of directories ---------------------
 
 dnl Create SVN_BINDIR for proper substitution
Index: subversion/svn_private_config.hw
===================================================================
--- subversion/svn_private_config.hw (revision 1509078)
+++ subversion/svn_private_config.hw (working copy)
@@ -48,9 +48,6 @@
 #define SVN_FS_WANT_DB_MINOR 0
 #define SVN_FS_WANT_DB_PATCH 14
 
-/* No support for __builtin_constant_p */
-#define SVN_HAS_DUNDER_BUILTINS 0
-
 /* Path separator for local filesystem */
 #define SVN_PATH_LOCAL_SEPARATOR '\\'
 
]]]
Received on 2013-08-01 06:36:57 CEST

This is an archived mail posted to the Subversion Dev mailing list.