Skip to content

Commit 0743a5f

Browse files
committed
Use 'misra-c2012-' prefix when 'premiumArgs' is empty
1 parent 144ad27 commit 0743a5f

File tree

6 files changed

+73
-31
lines changed

6 files changed

+73
-31
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,7 @@ $(libcppdir)/standards.o: lib/standards.cpp externals/simplecpp/simplecpp.h lib/
652652
$(libcppdir)/summaries.o: lib/summaries.cpp lib/addoninfo.h lib/analyzerinfo.h lib/checkers.h lib/config.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/summaries.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h
653653
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/summaries.cpp
654654

655-
$(libcppdir)/suppressions.o: lib/suppressions.cpp externals/tinyxml2/tinyxml2.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/filesettings.h lib/mathlib.h lib/path.h lib/pathmatch.h lib/platform.h lib/smallvector.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h lib/xml.h
655+
$(libcppdir)/suppressions.o: lib/suppressions.cpp externals/tinyxml2/tinyxml2.h lib/addoninfo.h lib/checkers.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/filesettings.h lib/library.h lib/mathlib.h lib/path.h lib/pathmatch.h lib/platform.h lib/settings.h lib/smallvector.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h lib/xml.h
656656
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/suppressions.cpp
657657

658658
$(libcppdir)/templatesimplifier.o: lib/templatesimplifier.cpp lib/addoninfo.h lib/checkers.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/smallvector.h lib/standards.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h

lib/preprocessor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ static void addInlineSuppressions(const simplecpp::TokenList &tokens, const Sett
200200

201201
bool onlyComments = true;
202202

203-
polyspace::Parser polyspaceParser;
203+
polyspace::Parser polyspaceParser(settings);
204204

205205
for (const simplecpp::Token *tok = tokens.cfront(); tok; tok = tok->next) {
206206
if (!tok->comment) {

lib/suppressions.cpp

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "token.h"
2727
#include "tokenize.h"
2828
#include "tokenlist.h"
29+
#include "settings.h"
2930

3031
#include <algorithm>
3132
#include <cctype> // std::isdigit, std::isalnum, etc
@@ -807,7 +808,7 @@ void polyspace::Parser::collect(SuppressionList &suppressions) const
807808
{
808809
for (const auto &polyspaceSuppr : mDone) {
809810
SuppressionList::Suppression suppr;
810-
if (polyspaceSuppr.convert(suppr))
811+
if (polyspaceSuppr.convert(mSettings, suppr))
811812
suppressions.addSuppression(std::move(suppr));
812813
}
813814
}
@@ -863,11 +864,9 @@ bool polyspace::Suppression::matches(const polyspace::Suppression &other) const
863864
return family == other.family && resultName == other.resultName;
864865
}
865866

866-
bool polyspace::Suppression::convert(SuppressionList::Suppression &suppr) const
867+
bool polyspace::Suppression::convert(const Settings &settings, SuppressionList::Suppression &suppr) const
867868
{
868869
static const std::map<std::string, std::string> map = {
869-
{ "MISRA-C3", "premium-misra-c-2012-" },
870-
{ "MISRA2012", "premium-misra-c-2012-" },
871870
{ "MISRA-C-2023", "premium-misra-c-2023-" },
872871
{ "MISRA-CPP", "premium-misra-cpp-2008-" },
873872
{ "MISRA-CPP-2023", "premium-misra-cpp-2023-" },
@@ -877,10 +876,22 @@ bool polyspace::Suppression::convert(SuppressionList::Suppression &suppr) const
877876
};
878877

879878
const auto it = map.find(family);
880-
if (it == map.cend())
881-
return false;
879+
std::string prefix;
880+
if (it == map.cend()) {
881+
if (family == "MISRA-C3" || family == "MISRA2012") {
882+
if (settings.premiumArgs.empty()) {
883+
prefix = "misra-c2012-";
884+
} else {
885+
prefix = "premium-misra-c-2012-";
886+
}
887+
} else {
888+
return false;
889+
}
890+
} else {
891+
prefix = it->second;
892+
}
882893

883-
suppr.errorId = it->second + resultName;
894+
suppr.errorId = prefix + resultName;
884895
suppr.isInline = true;
885896
suppr.isPolyspace = true;
886897
suppr.fileName = filename;

lib/suppressions.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class Tokenizer;
3636
class ErrorMessage;
3737
enum class Certainty : std::uint8_t;
3838
class FileWithDetails;
39+
class Settings;
3940

4041
/// @addtogroup Core
4142
/// @{
@@ -305,11 +306,13 @@ struct Suppression {
305306
int lineEnd;
306307

307308
bool matches(const Suppression &other) const;
308-
bool convert(SuppressionList::Suppression &suppr) const;
309+
bool convert(const Settings &settings, SuppressionList::Suppression &suppr) const;
309310
};
310311

311312
class Parser {
312313
public:
314+
Parser() = delete;
315+
Parser(const Settings &settings) : mSettings(settings) {}
313316
void collect(SuppressionList &suppressions) const;
314317
void parse(const std::string &comment, int line, const std::string &filename);
315318

@@ -334,6 +337,7 @@ class Parser {
334337
std::string mResultName;
335338
std::string mPeeked;
336339
bool mHasPeeked{};
340+
const Settings &mSettings;
337341
};
338342

339343
bool isPolyspaceComment(const std::string &comment);

oss-fuzz/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ $(libcppdir)/standards.o: ../lib/standards.cpp ../externals/simplecpp/simplecpp.
332332
$(libcppdir)/summaries.o: ../lib/summaries.cpp ../lib/addoninfo.h ../lib/analyzerinfo.h ../lib/checkers.h ../lib/config.h ../lib/errortypes.h ../lib/library.h ../lib/mathlib.h ../lib/platform.h ../lib/settings.h ../lib/smallvector.h ../lib/sourcelocation.h ../lib/standards.h ../lib/summaries.h ../lib/symboldatabase.h ../lib/templatesimplifier.h ../lib/token.h ../lib/tokenize.h ../lib/tokenlist.h ../lib/utils.h ../lib/vfvalue.h
333333
$(CXX) ${LIB_FUZZING_ENGINE} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/summaries.cpp
334334

335-
$(libcppdir)/suppressions.o: ../lib/suppressions.cpp ../externals/tinyxml2/tinyxml2.h ../lib/config.h ../lib/errorlogger.h ../lib/errortypes.h ../lib/filesettings.h ../lib/mathlib.h ../lib/path.h ../lib/pathmatch.h ../lib/platform.h ../lib/smallvector.h ../lib/standards.h ../lib/suppressions.h ../lib/templatesimplifier.h ../lib/token.h ../lib/tokenize.h ../lib/tokenlist.h ../lib/utils.h ../lib/vfvalue.h ../lib/xml.h
335+
$(libcppdir)/suppressions.o: ../lib/suppressions.cpp ../externals/tinyxml2/tinyxml2.h ../lib/addoninfo.h ../lib/checkers.h ../lib/config.h ../lib/errorlogger.h ../lib/errortypes.h ../lib/filesettings.h ../lib/library.h ../lib/mathlib.h ../lib/path.h ../lib/pathmatch.h ../lib/platform.h ../lib/settings.h ../lib/smallvector.h ../lib/standards.h ../lib/suppressions.h ../lib/templatesimplifier.h ../lib/token.h ../lib/tokenize.h ../lib/tokenlist.h ../lib/utils.h ../lib/vfvalue.h ../lib/xml.h
336336
$(CXX) ${LIB_FUZZING_ENGINE} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/suppressions.cpp
337337

338338
$(libcppdir)/templatesimplifier.o: ../lib/templatesimplifier.cpp ../lib/addoninfo.h ../lib/checkers.h ../lib/config.h ../lib/errorlogger.h ../lib/errortypes.h ../lib/library.h ../lib/mathlib.h ../lib/platform.h ../lib/settings.h ../lib/smallvector.h ../lib/standards.h ../lib/templatesimplifier.h ../lib/token.h ../lib/tokenize.h ../lib/tokenlist.h ../lib/utils.h ../lib/vfvalue.h

test/testsuppressions.cpp

Lines changed: 47 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ class TestSuppressions : public TestFixture {
118118
TEST_CASE(suppressionWildcard);
119119

120120
TEST_CASE(polyspaceMisraC2012);
121+
TEST_CASE(polyspacePremiumMisraC2012);
121122
TEST_CASE(polyspaceMisraC2023);
122123
TEST_CASE(polyspaceMisraCpp2008);
123124
TEST_CASE(polyspaceMisraCpp2023);
@@ -1913,24 +1914,39 @@ class TestSuppressions : public TestFixture {
19131914

19141915
void polyspaceMisraC2012() const {
19151916
SuppressionList list;
1916-
polyspace::Parser parser;
1917+
const Settings settings;
1918+
polyspace::Parser parser(settings);
19171919
parser.parse("/* polyspace MISRA2012 : 2.7 */", 1, "file.c");
19181920
parser.collect(list);
19191921
const auto &supprs = list.getSuppressions();
19201922
ASSERT_EQUALS(1, supprs.size());
19211923
const auto s = supprs.cbegin();
19221924
ASSERT(s->isInline);
19231925
ASSERT(s->isPolyspace);
1924-
ASSERT_EQUALS("premium-misra-c-2012-2.7", s->errorId);
1926+
ASSERT_EQUALS("misra-c2012-2.7", s->errorId);
19251927
ASSERT_EQUALS(1, s->lineNumber);
19261928
ASSERT_EQUALS_ENUM(SuppressionList::Type::unique, s->type);
19271929
ASSERT_EQUALS(SuppressionList::Suppression::NO_LINE, s->lineBegin);
19281930
ASSERT_EQUALS(SuppressionList::Suppression::NO_LINE, s->lineEnd);
19291931
}
19301932

1933+
void polyspacePremiumMisraC2012() const {
1934+
SuppressionList list;
1935+
Settings settings;
1936+
settings.premiumArgs = "--misra-c-2012";
1937+
polyspace::Parser parser(settings);
1938+
parser.parse("/* polyspace MISRA2012 : 2.7 */", 1, "file.c");
1939+
parser.collect(list);
1940+
const auto &supprs = list.getSuppressions();
1941+
ASSERT_EQUALS(1, supprs.size());
1942+
const auto s = supprs.cbegin();
1943+
ASSERT_EQUALS("premium-misra-c-2012-2.7", s->errorId);
1944+
}
1945+
19311946
void polyspaceMisraC2023() const {
19321947
SuppressionList list;
1933-
polyspace::Parser parser;
1948+
const Settings settings;
1949+
polyspace::Parser parser(settings);
19341950
parser.parse("// polyspace MISRA-C-2023 : *", 2, "file.c");
19351951
parser.collect(list);
19361952
const auto &supprs = list.getSuppressions();
@@ -1944,7 +1960,8 @@ class TestSuppressions : public TestFixture {
19441960

19451961
void polyspaceMisraCpp2008() const {
19461962
SuppressionList list;
1947-
polyspace::Parser parser;
1963+
const Settings settings;
1964+
polyspace::Parser parser(settings);
19481965
parser.parse("// polyspace MISRA-CPP : 7-1-1", 1, "file.c");
19491966
parser.collect(list);
19501967
const auto &supprs = list.getSuppressions();
@@ -1955,7 +1972,8 @@ class TestSuppressions : public TestFixture {
19551972

19561973
void polyspaceMisraCpp2023() const {
19571974
SuppressionList list;
1958-
polyspace::Parser parser;
1975+
const Settings settings;
1976+
polyspace::Parser parser(settings);
19591977
parser.parse("// polyspace MISRA-CPP-2023 : 4.6.1", 1, "file.c");
19601978
parser.collect(list);
19611979
const auto &supprs = list.getSuppressions();
@@ -1966,7 +1984,8 @@ class TestSuppressions : public TestFixture {
19661984

19671985
void polyspaceCertC() const {
19681986
SuppressionList list;
1969-
polyspace::Parser parser;
1987+
const Settings settings;
1988+
polyspace::Parser parser(settings);
19701989
parser.parse("// polyspace CERT-C : PRE30", 1, "file.c");
19711990
parser.collect(list);
19721991
const auto &supprs = list.getSuppressions();
@@ -1977,7 +1996,8 @@ class TestSuppressions : public TestFixture {
19771996

19781997
void polyspaceCertCpp() const {
19791998
SuppressionList list;
1980-
polyspace::Parser parser;
1999+
const Settings settings;
2000+
polyspace::Parser parser(settings);
19812001
parser.parse("// polyspace CERT-CPP : CTR51", 1, "file.c");
19822002
parser.collect(list);
19832003
const auto &supprs = list.getSuppressions();
@@ -1988,7 +2008,8 @@ class TestSuppressions : public TestFixture {
19882008

19892009
void polyspaceAutosar() const {
19902010
SuppressionList list;
1991-
polyspace::Parser parser;
2011+
const Settings settings;
2012+
polyspace::Parser parser(settings);
19922013
parser.parse("// polyspace AUTOSAR-CPP14 : a2-10-1", 1, "file.c");
19932014
parser.collect(list);
19942015
const auto &supprs = list.getSuppressions();
@@ -1999,61 +2020,66 @@ class TestSuppressions : public TestFixture {
19992020

20002021
void polyspaceIgnored() const {
20012022
SuppressionList list;
2002-
polyspace::Parser parser;
2023+
const Settings settings;
2024+
polyspace::Parser parser(settings);
20032025
parser.parse("// polyspace DEFECT : INT_OVFL", 1, "file.c");
20042026
parser.collect(list);
20052027
ASSERT(list.getSuppressions().empty());
20062028
}
20072029

20082030
void polyspaceMultiple1() const {
20092031
SuppressionList list;
2010-
polyspace::Parser parser;
2032+
const Settings settings;
2033+
polyspace::Parser parser(settings);
20112034
parser.parse("/* polyspace MISRA2012 : 2.7, 9.1 */", 1, "file.c");
20122035
parser.collect(list);
20132036
const auto &supprs = list.getSuppressions();
20142037
ASSERT_EQUALS(2, supprs.size());
20152038
auto s = supprs.cbegin();
2016-
ASSERT_EQUALS("premium-misra-c-2012-2.7", s->errorId);
2039+
ASSERT_EQUALS("misra-c2012-2.7", s->errorId);
20172040
s++;
2018-
ASSERT_EQUALS("premium-misra-c-2012-9.1", s->errorId);
2041+
ASSERT_EQUALS("misra-c2012-9.1", s->errorId);
20192042
}
20202043

20212044
void polyspaceMultiple2() const {
20222045
SuppressionList list;
2023-
polyspace::Parser parser;
2046+
const Settings settings;
2047+
polyspace::Parser parser(settings);
20242048
parser.parse("/* polyspace MISRA2012 : 2.7 MISRA-CPP : 7-1-1 */", 1, "file.c");
20252049
parser.collect(list);
20262050
const auto &supprs = list.getSuppressions();
20272051
ASSERT_EQUALS(2, supprs.size());
20282052
auto s = supprs.cbegin();
2029-
ASSERT_EQUALS("premium-misra-c-2012-2.7", s->errorId);
2053+
ASSERT_EQUALS("misra-c2012-2.7", s->errorId);
20302054
s++;
20312055
ASSERT_EQUALS("premium-misra-cpp-2008-7-1-1", s->errorId);
20322056
}
20332057

20342058
void polyspaceMultiple3() const {
20352059
SuppressionList list;
2036-
polyspace::Parser parser;
2060+
const Settings settings;
2061+
polyspace::Parser parser(settings);
20372062
parser.parse("/* polyspace MISRA2012 : 2.7 [Justified:Low] \"comment 1\" polyspace MISRA-CPP : 7-1-1 \"comment 2\"*/", 1, "file.c");
20382063
parser.collect(list);
20392064
const auto &supprs = list.getSuppressions();
20402065
ASSERT_EQUALS(2, supprs.size());
20412066
auto s = supprs.cbegin();
2042-
ASSERT_EQUALS("premium-misra-c-2012-2.7", s->errorId);
2067+
ASSERT_EQUALS("misra-c2012-2.7", s->errorId);
20432068
s++;
20442069
ASSERT_EQUALS("premium-misra-cpp-2008-7-1-1", s->errorId);
20452070
}
20462071

20472072
void polyspaceRange() const {
20482073
SuppressionList list;
2049-
polyspace::Parser parser;
2074+
const Settings settings;
2075+
polyspace::Parser parser(settings);
20502076
parser.parse("/* polyspace +3 MISRA2012 : 2.7 */", 1, "file.c");
20512077
parser.collect(list);
20522078
const auto &supprs = list.getSuppressions();
20532079
ASSERT_EQUALS(1, supprs.size());
20542080
const auto s = supprs.cbegin();
20552081
ASSERT(s->isInline);
2056-
ASSERT_EQUALS("premium-misra-c-2012-2.7", s->errorId);
2082+
ASSERT_EQUALS("misra-c2012-2.7", s->errorId);
20572083
ASSERT_EQUALS(1, s->lineNumber);
20582084
ASSERT_EQUALS_ENUM(SuppressionList::Type::block, s->type);
20592085
ASSERT_EQUALS(1, s->lineBegin);
@@ -2062,15 +2088,16 @@ class TestSuppressions : public TestFixture {
20622088

20632089
void polyspaceBlock() const {
20642090
SuppressionList list;
2065-
polyspace::Parser parser;
2091+
const Settings settings;
2092+
polyspace::Parser parser(settings);
20662093
parser.parse("/* polyspace-begin MISRA2012 : 2.7 */", 1, "file.c");
20672094
parser.parse("/* polyspace-end MISRA2012 : 2.7 */", 5, "file.c");
20682095
parser.collect(list);
20692096
const auto &supprs = list.getSuppressions();
20702097
ASSERT_EQUALS(1, supprs.size());
20712098
const auto s = supprs.cbegin();
20722099
ASSERT(s->isInline);
2073-
ASSERT_EQUALS("premium-misra-c-2012-2.7", s->errorId);
2100+
ASSERT_EQUALS("misra-c2012-2.7", s->errorId);
20742101
ASSERT_EQUALS(1, s->lineNumber);
20752102
ASSERT_EQUALS_ENUM(SuppressionList::Type::block, s->type);
20762103
ASSERT_EQUALS(1, s->lineBegin);

0 commit comments

Comments
 (0)