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"));