| From 88714fc174b91950c9e1c53a9832fc6d4ffa6e2a Mon Sep 17 00:00:00 2001 |
| From: Etienne Carriere <etienne.carriere@linaro.org> |
| 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 <etienne.carriere@linaro.org> |
| --- |
| 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 |
| |