Skip to content

Commit

Permalink
add a redundant loop condition to silence GCC warnings
Browse files Browse the repository at this point in the history
  • Loading branch information
oconnor663 committed Aug 12, 2021
1 parent 4032a51 commit 5e32e1d
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion c/blake3.c
Original file line number Diff line number Diff line change
Expand Up @@ -340,12 +340,19 @@ INLINE void compress_subtree_to_parent_node(
uint8_t cv_array[MAX_SIMD_DEGREE_OR_2 * BLAKE3_OUT_LEN];
size_t num_cvs = blake3_compress_subtree_wide(input, input_len, key,
chunk_counter, flags, cv_array);
bool num_cvs_is_reasonable = (num_cvs <= MAX_SIMD_DEGREE_OR_2);
assert(num_cvs_is_reasonable);

// If MAX_SIMD_DEGREE is greater than 2 and there's enough input,
// compress_subtree_wide() returns more than 2 chaining values. Condense
// them into 2 by forming parent nodes repeatedly.
uint8_t out_array[MAX_SIMD_DEGREE_OR_2 * BLAKE3_OUT_LEN / 2];
while (num_cvs > 2) {
// num_cvs_is_reasonable is always true, and we just asserted it above. But
// GCC can't tell that it's always true, and if NDEBUG is set on platforms
// where MAX_SIMD_DEGREE_OR_2 == 2, GCC emits spurious warnings here.
// Including num_cvs_is_reasonable in this loop condition suppresses those
// warnings.
while (num_cvs > 2 && num_cvs_is_reasonable) {
num_cvs =
compress_parents_parallel(cv_array, num_cvs, key, flags, out_array);
memcpy(cv_array, out_array, num_cvs * BLAKE3_OUT_LEN);
Expand Down

0 comments on commit 5e32e1d

Please sign in to comment.