From 3c085fd88a40a8a24cd41988eee0831a01c4ef85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 6 Oct 2019 12:05:58 +0200 Subject: [PATCH] Fixed #9359 (SymbolDatabase: function lookup fails when -funsigned-char is used) --- .travis.yml | 4 ++++ lib/symboldatabase.cpp | 2 +- test/testsymboldatabase.cpp | 14 +++++++------- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index cd642bcc4..f19798e30 100644 --- a/.travis.yml +++ b/.travis.yml @@ -140,6 +140,10 @@ matrix: - cmake -G "Unix Makefiles" -DBUILD_TESTS=On .. - make -j2 check - cd .. +# -funsigned-char + - make clean + - make -j2 CXXFLAGS=-funsigned-char testrunner + - ./testrunner TestSymbolDatabase # check if dmake needs to be rerun (this job may fail) - name: "rerun dmake?" diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index a98211bab..82a9c97f2 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -5992,7 +5992,7 @@ ValueType::MatchResult ValueType::matchParameter(const ValueType *call, const Va return ValueType::MatchResult::UNKNOWN; if (call->isIntegral() && func->isIntegral() && call->sign != ValueType::Sign::UNKNOWN_SIGN && func->sign != ValueType::Sign::UNKNOWN_SIGN && call->sign != func->sign) - return ValueType::MatchResult::UNKNOWN; // TODO + return ValueType::MatchResult::FALLBACK1; return ValueType::MatchResult::SAME; } diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 001d20b4a..4304cc35b 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -5380,11 +5380,7 @@ private: f = Token::findsimplematch(tokenizer.tokens(), "get ( get ( v2 ) ) ;"); ASSERT(f); ASSERT(f->function()); - if (std::numeric_limits::is_signed) { - ASSERT_EQUALS(5, f->function()->tokenDef->linenr()); - } else { - ASSERT_EQUALS(10, f->function()->tokenDef->linenr()); - } + ASSERT_EQUALS(5, f->function()->tokenDef->linenr()); f = Token::findsimplematch(tokenizer.tokens(), "get ( get ( v3 ) ) ;"); ASSERT(f); @@ -5409,7 +5405,11 @@ private: f = Token::findsimplematch(tokenizer.tokens(), "get ( get ( v7 ) ) ;"); ASSERT(f); ASSERT(f->function()); - ASSERT_EQUALS(10, f->function()->tokenDef->linenr()); + if (std::numeric_limits::is_signed) { + ASSERT_EQUALS(10, f->function()->tokenDef->linenr()); + } else { + ASSERT_EQUALS(5, f->function()->tokenDef->linenr()); + } f = Token::findsimplematch(tokenizer.tokens(), "get ( get ( v8 ) ) ;"); ASSERT(f); @@ -5417,7 +5417,7 @@ private: if (std::numeric_limits::is_signed) { ASSERT_EQUALS(5, f->function()->tokenDef->linenr()); } else { - ASSERT_EQUALS(10, f->function()->tokenDef->linenr()); + ASSERT_EQUALS(11, f->function()->tokenDef->linenr()); } f = Token::findsimplematch(tokenizer.tokens(), "get ( get ( v9 ) ) ;");