Hello,

I found a compiler warning in trunk on a potentially undefined operation
when using an increment operator on a variable referenced in the same
expression. This is on gcc 4.3.4, does not happen in gcc 4.7 and up.
Treated as an error in some build configurations.

subversion/libsvn_fs_fs/id.c: In function 'txn_id_parse':
subversion/libsvn_fs_fs/id.c:98: warning: operation on 'data' may be
undefined

subversion/libsvn_fs_fs/transaction.c: In function 'read_next_ids':
subversion/libsvn_fs_fs/transaction.c:1300: warning: operation on 'str'
may be undefined

subversion/libsvn_fs_x/transaction.c: In function 'read_next_ids':
subversion/libsvn_fs_x/transaction.c:1354: warning: operation on 'str'
may be undefined

The attached patch fixes this, please review.

[[[
Fix warnings for potentially undefined operation.

Some code uses increment operators on variables referenced in the same
operation. See fsfs-improvements branch (r1517479,1506545) and
fsfs-format-7 (r1453765)

* subversion/libsvn_fs_fs/id.c
  (txn_id_parse): increment data pointer in a separate statement
* subversion/libsvn_fs_fs/transaction.c
  (read_next_ids): increment str pointer in a separate statement
* subversion/libsvn_fs_x/transaction.c
  (read_next_ids): same
]]]

With kind regards,
Andreas Stieger
Index: subversion/libsvn_fs_fs/id.c
===================================================================
--- subversion/libsvn_fs_fs/id.c	(revision 1593690)
+++ subversion/libsvn_fs_fs/id.c	(working copy)
@@ -95,7 +95,8 @@ txn_id_parse(svn_fs_fs__id_part_t *txn_id,
   if (data == NULL)
     return FALSE;
   
-  txn_id->number = svn__base36toui64(&data, ++data);
+  data++;  
+  txn_id->number = svn__base36toui64(&data, data);
   return *data == '\0';
 }
 
Index: subversion/libsvn_fs_fs/transaction.c
===================================================================
--- subversion/libsvn_fs_fs/transaction.c	(revision 1593690)
+++ subversion/libsvn_fs_fs/transaction.c	(working copy)
@@ -1348,7 +1348,8 @@ read_next_ids(apr_uint64_t *node_id,
     return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
                             _("next-id file corrupt"));
 
-  *copy_id = svn__base36toui64(&str, ++str);
+  str++;
+  *copy_id = svn__base36toui64(&str, str);
   if (*str != '\n')
     return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
                             _("next-id file corrupt"));
Index: subversion/libsvn_fs_x/transaction.c
===================================================================
--- subversion/libsvn_fs_x/transaction.c	(revision 1593690)
+++ subversion/libsvn_fs_x/transaction.c	(working copy)
@@ -1352,7 +1352,8 @@ read_next_ids(apr_uint64_t *node_id,
     return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
                             _("next-id file corrupt"));
 
-  *copy_id = svn__base36toui64(&str, ++str);
+  str++;
+  *copy_id = svn__base36toui64(&str, str);
   if (*str != '\n')
     return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
                             _("next-id file corrupt"));

Reply via email to