From 465c4a0aa7703cce44c874b3f6034c40190c46954960cf66555ba2d1b8967c29 Mon Sep 17 00:00:00 2001 From: Martin Pluskal Date: Fri, 10 Nov 2023 08:57:12 +0000 Subject: [PATCH] Accepting request 1124428 from home:Guillaume_G:branches:devel:tools - Replace disable-some-tests-about-char-signedness.patch with upstream patch to fix tests on non-x86_64 (such as aarch64): * eb076d87.patch OBS-URL: https://build.opensuse.org/request/show/1124428 OBS-URL: https://build.opensuse.org/package/show/devel:tools/cppcheck?expand=0&rev=117 --- cppcheck.changes | 7 +++++ cppcheck.spec | 2 +- eb076d87.patch | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 eb076d87.patch diff --git a/cppcheck.changes b/cppcheck.changes index 344f8f9..f2408af 100644 --- a/cppcheck.changes +++ b/cppcheck.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Thu Nov 9 10:21:24 UTC 2023 - Guillaume GARDET + +- Replace disable-some-tests-about-char-signedness.patch with + upstream patch to fix tests on non-x86_64 (such as aarch64): + * eb076d87.patch + ------------------------------------------------------------------- Tue Sep 19 14:21:21 UTC 2023 - Dirk Müller diff --git a/cppcheck.spec b/cppcheck.spec index 17166ef..41baa75 100644 --- a/cppcheck.spec +++ b/cppcheck.spec @@ -23,7 +23,7 @@ Summary: A tool for static C/C++ code analysis License: GPL-3.0-or-later URL: https://github.com/danmar/cppcheck Source: https://github.com/danmar/cppcheck/archive/refs/tags/%{version}.tar.gz#/%{name}-%{version}.tar.gz -Patch0: disable-some-tests-about-char-signedness.patch +Patch0: eb076d87.patch Patch1: werror-return-type.patch BuildRequires: cmake BuildRequires: docbook-xsl-stylesheets diff --git a/eb076d87.patch b/eb076d87.patch new file mode 100644 index 0000000..3190da3 --- /dev/null +++ b/eb076d87.patch @@ -0,0 +1,73 @@ +From eb076d877b48c09d5c34cad27b001d18971fde3f Mon Sep 17 00:00:00 2001 +From: moui0 <69300707+moui0@users.noreply.github.com> +Date: Sun, 8 Oct 2023 05:04:57 +0800 +Subject: [PATCH] Improve testcases for unsigned char platforms (#5524) + +I got error messages while building `cppcheck 2.12.0` for RISC-V Arch +Linux: +``` +Testing Complete +Number of tests: 4420 +Number of todos: 331 +Tests failed: 2 + +/usr/src/debug/cppcheck/cppcheck/test/testcondition.cpp:4501(TestCondition::alwaysTrue): Assertion failed. +Expected: +[test.cpp:6]: (style) Condition 'o[1]=='\0'' is always false\n + +Actual: +[test.cpp:4] -> [test.cpp:6]: (style) Condition 'o[1]=='\0'' is always false\n + +_____ +/usr/src/debug/cppcheck/cppcheck/test/testcondition.cpp:5014(TestCondition::alwaysTrueContainer): Assertion failed. +Expected: +[test.cpp:5]: (style) Condition 'buffer.back()=='\0'' is always false\n + +Actual: +[test.cpp:3] -> [test.cpp:5]: (style) Condition 'buffer.back()=='\0'' is always false\n +``` + +I found out the reason is that the testcases were designed for +x86/x86_64 or other `signed char` platforms (i.e. default character type +is `signed char` ), whereareas RISC-V is an `unsigned char` platform, +which causes different behavior in +`lib/valueflow.cpp:valueFlowImpossibleValues`. I'm not sure whether this +error leads from a functional bug, so if you have a better approach to +fix it, please let me know. + +Maybe you could reproduce this error on x86_64 platform by setting +`defaultSign = 'u';` in `Platform::set(Type t)`. +--- + test/testcondition.cpp | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/test/testcondition.cpp b/test/testcondition.cpp +index bfe9713fce3..ae9dfdb7a61 100644 +--- a/test/testcondition.cpp ++++ b/test/testcondition.cpp +@@ -4498,7 +4498,11 @@ class TestCondition : public TestFixture { + " if (o[1] == '\\0') {}\n" + " }\n" + "}\n"); +- ASSERT_EQUALS("[test.cpp:6]: (style) Condition 'o[1]=='\\0'' is always false\n", errout.str()); ++ if (std::numeric_limits::is_signed) { ++ ASSERT_EQUALS("[test.cpp:6]: (style) Condition 'o[1]=='\\0'' is always false\n", errout.str()); ++ } else { ++ ASSERT_EQUALS("[test.cpp:4] -> [test.cpp:6]: (style) Condition 'o[1]=='\\0'' is always false\n", errout.str()); ++ } + + check("void f(int x) {\n" // #11449 + " int i = x;\n" +@@ -5016,7 +5020,11 @@ class TestCondition : public TestFixture { + " buffer.back() == '\\n' ||\n" + " buffer.back() == '\\0') {}\n" + "}\n"); +- ASSERT_EQUALS("[test.cpp:5]: (style) Condition 'buffer.back()=='\\0'' is always false\n", errout.str()); ++ if (std::numeric_limits::is_signed) { ++ ASSERT_EQUALS("[test.cpp:5]: (style) Condition 'buffer.back()=='\\0'' is always false\n", errout.str()); ++ } else { ++ ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:5]: (style) Condition 'buffer.back()=='\\0'' is always false\n", errout.str()); ++ } + + // #9353 + check("typedef struct { std::string s; } X;\n"