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