From 88714fc174b91950c9e1c53a9832fc6d4ffa6e2a Mon Sep 17 00:00:00 2001 From: Etienne Carriere Date: Sun, 17 Feb 2019 22:44:44 +0100 Subject: [PATCH] regression 4100: update string conversion loop Change the loop used to convert string into numerical value. The original loop was fine but its implementation hits toolchain unsafe-loop-optimizations feature. The new implementation proposed here simplifies a bit the loop and prevents toolchain from complaining when directive -Werror=unsafe-loop-optimizations is enabled. Issue reported by the Buildroot cross toolchain [1] with the following error traces: build/armv7/build/optee-test-3.4.0/host/xtest/regression_4100.c:447:8: error: missed loop optimization, the loop counter may overflow [-Werror=unsafe-loop-optimizations] while (spos) { ^ build/optee-test-3.4.0/host/xtest/regression_4100.c:454:6: error: missed loop optimization, the loop counter may overflow [-Werror=unsafe-loop-optimizations] if (!spos) ^ [1] arm-buildroot-linux-uclibcgnueabihf-gcc.br_real (Buildroot 2019.02-git-00933-gb75e93c) 7.4.0 Signed-off-by: Etienne Carriere --- host/xtest/regression_4100.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/host/xtest/regression_4100.c b/host/xtest/regression_4100.c index b477f38..88346d4 100644 --- a/host/xtest/regression_4100.c +++ b/host/xtest/regression_4100.c @@ -445,21 +445,24 @@ static TEEC_Result convert_from_string(ADBG_Case_t *c, TEEC_Session *s, return TEEC_ERROR_OUT_OF_MEMORY; while (spos) { - spos--; - nibble = digit_value(str[spos]); - if (nibble == -1) + nibble = digit_value(str[spos - 1]); + if (nibble == -1) { + spos--; break; + } os[ospos] = nibble; - if (!spos) - break; + if (spos > 1) { + nibble = digit_value(str[spos - 2]); + if (nibble == -1) { + spos -= 2; + break; + } + os[ospos] |= nibble << 4; + ospos--; + spos--; + } spos--; - nibble = digit_value(str[spos]); - if (nibble == -1) - break; - - os[ospos] |= nibble << 4; - ospos--; } if (spos) -- 2.20.1