forked from pool/cppcheck
Accepting request 1125244 from 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/1125244 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/cppcheck?expand=0&rev=35
This commit is contained in:
commit
8e1bf71104
@ -1,3 +1,10 @@
|
||||
-------------------------------------------------------------------
|
||||
Thu Nov 9 10:21:24 UTC 2023 - Guillaume GARDET <guillaume.gardet@opensuse.org>
|
||||
|
||||
- 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 <dmueller@suse.com>
|
||||
|
||||
|
@ -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
|
||||
|
@ -1,24 +0,0 @@
|
||||
Description: Disable some tests affected by char signedness.
|
||||
Author: Joachim Reichel <reichel@debian.org>
|
||||
Bug: https://trac.cppcheck.net/ticket/11537
|
||||
|
||||
Index: cppcheck/test/testcondition.cpp
|
||||
===================================================================
|
||||
--- cppcheck.orig/test/testcondition.cpp
|
||||
+++ cppcheck/test/testcondition.cpp
|
||||
@@ -4939,6 +4939,7 @@ private:
|
||||
"}\n");
|
||||
ASSERT_EQUALS("[test.cpp:4]: (style) Condition 'it!=vector.end()' is always true\n", errout.str());
|
||||
|
||||
+#if 0
|
||||
// #11303
|
||||
check("void f(int n) {\n"
|
||||
" std::vector<char> buffer(n);\n"
|
||||
@@ -4947,6 +4948,7 @@ private:
|
||||
" buffer.back() == '\\0') {}\n"
|
||||
"}\n");
|
||||
ASSERT_EQUALS("[test.cpp:5]: (style) Condition 'buffer.back()=='\\0'' is always false\n", errout.str());
|
||||
+#endif
|
||||
|
||||
// #9353
|
||||
check("typedef struct { std::string s; } X;\n"
|
73
eb076d87.patch
Normal file
73
eb076d87.patch
Normal file
@ -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<char>::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<char>::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"
|
Loading…
Reference in New Issue
Block a user