From 3309c264c95ee6e9d6917ff013f1dc612fd96524 Mon Sep 17 00:00:00 2001 From: firewave Date: Mon, 21 Aug 2023 18:17:14 +0200 Subject: [PATCH 1/6] testrunner: avoid unnecessary settings --- test/fixture.h | 4 ++-- test/testbufferoverrun.cpp | 3 +-- test/testtokenize.cpp | 4 ++-- test/testvarid.cpp | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/test/fixture.h b/test/fixture.h index 1defa6ac3af..391b5ba1963 100644 --- a/test/fixture.h +++ b/test/fixture.h @@ -193,7 +193,7 @@ class TestFixture : public ErrorLogger { } SettingsBuilder& c(Standards::cstd_t std) { - // TODO: CLatest and C11 are the same - handle differently + // TODO: CLatest and C23 are the same - handle differently? //if (REDUNDANT_CHECK && settings.standards.c == std) // throw std::runtime_error("redundant setting: standards.c"); settings.standards.c = std; @@ -201,7 +201,7 @@ class TestFixture : public ErrorLogger { } SettingsBuilder& cpp(Standards::cppstd_t std) { - // TODO: CPPLatest and CPP20 are the same - handle differently + // TODO: CPPLatest and CPP26 are the same - handle differently? //if (REDUNDANT_CHECK && settings.standards.cpp == std) // throw std::runtime_error("redundant setting: standards.cpp"); settings.standards.cpp = std; diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index 7d557c8b85b..958913895c5 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -77,8 +77,7 @@ class TestBufferOverrun : public TestFixture { #define checkP(...) checkP_(__FILE__, __LINE__, __VA_ARGS__) void checkP_(const char* file, int line, const char code[], const char* filename = "test.cpp") { - const Settings settings = settingsBuilder(settings0).severity(Severity::performance) - .c(Standards::CLatest).cpp(Standards::CPPLatest).certainty(Certainty::inconclusive).build(); + const Settings settings = settingsBuilder(settings0).severity(Severity::performance).certainty(Certainty::inconclusive).build(); std::vector files(1, filename); Tokenizer tokenizer(settings, *this); diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index a5d1bfed061..c5b962dd9c0 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -887,12 +887,12 @@ class TestTokenizer : public TestFixture { const char code[] = "_Pragma(\"abc\") int x;"; const Settings s_c89 = settingsBuilder().c(Standards::C89).build(); ASSERT_EQUALS("_Pragma ( \"abc\" ) int x ;", tokenizeAndStringify(code, s_c89, false)); - const Settings s_clatest = settingsBuilder().c(Standards::CLatest).build(); + const Settings s_clatest; ASSERT_EQUALS("int x ;", tokenizeAndStringify(code, s_clatest, false)); const Settings s_cpp03 = settingsBuilder().cpp(Standards::CPP03).build(); ASSERT_EQUALS("_Pragma ( \"abc\" ) int x ;", tokenizeAndStringify(code, s_cpp03, true)); - const Settings s_cpplatest = settingsBuilder().cpp(Standards::CPPLatest).build(); + const Settings s_cpplatest; ASSERT_EQUALS("int x ;", tokenizeAndStringify(code, s_cpplatest, true)); } diff --git a/test/testvarid.cpp b/test/testvarid.cpp index a09da28828b..4c433962f00 100644 --- a/test/testvarid.cpp +++ b/test/testvarid.cpp @@ -35,7 +35,7 @@ class TestVarID : public TestFixture { TestVarID() : TestFixture("TestVarID") {} private: - const Settings settings = settingsBuilder().c(Standards::C89).cpp(Standards::CPPLatest).platform(Platform::Type::Unix64).build(); + const Settings settings = settingsBuilder().c(Standards::C89).platform(Platform::Type::Unix64).build(); void run() override { TEST_CASE(varid1); TEST_CASE(varid2); From d74dce870bc751523321aefc21f196da1ba8188c Mon Sep 17 00:00:00 2001 From: firewave Date: Fri, 1 Sep 2023 11:47:37 +0200 Subject: [PATCH 2/6] added preliminary C++26 support --- gui/mainwindow.cpp | 4 ++++ gui/mainwindow.ui | 12 ++++++++++++ lib/keywords.cpp | 8 ++++++++ lib/standards.h | 7 ++++++- 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 22386db4df9..a71de90c4f4 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -271,6 +271,7 @@ MainWindow::MainWindow(TranslationHandler* th, QSettings* settings) : mUI->mActionCpp17->setActionGroup(mCppStandardActions); mUI->mActionCpp20->setActionGroup(mCppStandardActions); //mUI->mActionCpp23->setActionGroup(mCppStandardActions); + //mUI->mActionCpp26->setActionGroup(mCppStandardActions); mUI->mActionEnforceC->setActionGroup(mSelectLanguageActions); mUI->mActionEnforceCpp->setActionGroup(mSelectLanguageActions); @@ -381,6 +382,7 @@ void MainWindow::loadSettings() mUI->mActionCpp17->setChecked(standards.cpp == Standards::CPP17); mUI->mActionCpp20->setChecked(standards.cpp == Standards::CPP20); //mUI->mActionCpp23->setChecked(standards.cpp == Standards::CPP23); + //mUI->mActionCpp26->setChecked(standards.cpp == Standards::CPP26); // Main window settings const bool showMainToolbar = mSettings->value(SETTINGS_TOOLBARS_MAIN_SHOW, true).toBool(); @@ -465,6 +467,8 @@ void MainWindow::saveSettings() const mSettings->setValue(SETTINGS_STD_CPP, "C++20"); //if (mUI.mActionCpp23->isChecked()) // mSettings->setValue(SETTINGS_STD_CPP, "C++23"); + //if (mUI.mActionCpp26->isChecked()) + // mSettings->setValue(SETTINGS_STD_CPP, "C++26"); // Main window settings mSettings->setValue(SETTINGS_TOOLBARS_MAIN_SHOW, mUI->mToolBarMain->isVisible()); diff --git a/gui/mainwindow.ui b/gui/mainwindow.ui index fc2e6cbe1af..296da3d6db5 100644 --- a/gui/mainwindow.ui +++ b/gui/mainwindow.ui @@ -203,6 +203,7 @@ + @@ -915,6 +916,17 @@ C++23 + Compliance report... diff --git a/lib/keywords.cpp b/lib/keywords.cpp index c990ec5afca..181d074695a 100644 --- a/lib/keywords.cpp +++ b/lib/keywords.cpp @@ -148,6 +148,10 @@ static const std::unordered_set cpp23_keywords; static const std::unordered_set cpp23_keywords_all = cpp20_keywords_all; +static const std::unordered_set cpp26_keywords; + +static const std::unordered_set cpp26_keywords_all = cpp23_keywords_all; + // cppcheck-suppress unusedFunction const std::unordered_set& Keywords::getAll(Standards::cstd_t cStd) { @@ -182,6 +186,8 @@ const std::unordered_set& Keywords::getAll(Standards::cppstd_t cppS return cpp20_keywords_all; case Standards::cppstd_t::CPP23: return cpp23_keywords_all; + case Standards::cppstd_t::CPP26: + return cpp26_keywords_all; } cppcheck::unreachable(); } @@ -221,6 +227,8 @@ const std::unordered_set& Keywords::getOnly(Standards::cppstd_t cpp return cpp20_keywords; case Standards::cppstd_t::CPP23: return cpp23_keywords; + case Standards::cppstd_t::CPP26: + return cpp26_keywords; } cppcheck::unreachable(); } diff --git a/lib/standards.h b/lib/standards.h index 34d1882a067..24f8637c2dd 100644 --- a/lib/standards.h +++ b/lib/standards.h @@ -40,7 +40,7 @@ struct Standards { enum cstd_t { C89, C99, C11, C17, C23, CLatest = C23 } c = CLatest; /** C++ code standard */ - enum cppstd_t { CPP03, CPP11, CPP14, CPP17, CPP20, CPP23, CPPLatest = CPP23 } cpp = CPPLatest; + enum cppstd_t { CPP03, CPP11, CPP14, CPP17, CPP20, CPP23, CPP26, CPPLatest = CPP26 } cpp = CPPLatest; /** --std value given on command line */ std::string stdValue; @@ -117,6 +117,8 @@ struct Standards { return "c++20"; case CPP23: return "c++23"; + case CPP26: + return "c++26"; } return ""; } @@ -139,6 +141,9 @@ struct Standards { if (std == "c++23") { return Standards::CPP23; } + if (std == "c++26") { + return Standards::CPP26; + } return Standards::CPPLatest; } }; From 56e306dc72ab1034a4d5a0f8a7911b2d2cad28bf Mon Sep 17 00:00:00 2001 From: firewave Date: Tue, 12 Sep 2023 11:19:34 +0200 Subject: [PATCH 3/6] added preliminary C23 support / fixed `Keywords::getOnly()` result --- gui/mainwindow.cpp | 4 ++++ gui/mainwindow.ui | 9 +++++++++ lib/keywords.cpp | 11 +---------- lib/standards.h | 4 ++++ 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index a71de90c4f4..78cdc233bb5 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -264,6 +264,7 @@ MainWindow::MainWindow(TranslationHandler* th, QSettings* settings) : mUI->mActionC89->setActionGroup(mCStandardActions); mUI->mActionC99->setActionGroup(mCStandardActions); mUI->mActionC11->setActionGroup(mCStandardActions); + //mUI->mActionC23->setActionGroup(mCStandardActions); mUI->mActionCpp03->setActionGroup(mCppStandardActions); mUI->mActionCpp11->setActionGroup(mCppStandardActions); @@ -375,6 +376,7 @@ void MainWindow::loadSettings() mUI->mActionC89->setChecked(standards.c == Standards::C89); mUI->mActionC99->setChecked(standards.c == Standards::C99); mUI->mActionC11->setChecked(standards.c == Standards::C11); + //mUI->mActionC23->setChecked(standards.c == Standards::C23); standards.setCPP(mSettings->value(SETTINGS_STD_CPP, QString()).toString().toStdString()); mUI->mActionCpp03->setChecked(standards.cpp == Standards::CPP03); mUI->mActionCpp11->setChecked(standards.cpp == Standards::CPP11); @@ -454,6 +456,8 @@ void MainWindow::saveSettings() const mSettings->setValue(SETTINGS_STD_C, "C99"); if (mUI->mActionC11->isChecked()) mSettings->setValue(SETTINGS_STD_C, "C11"); + //if (mUI->mActionC23->isChecked()) + // mSettings->setValue(SETTINGS_STD_C, "C23"); if (mUI->mActionCpp03->isChecked()) mSettings->setValue(SETTINGS_STD_CPP, "C++03"); diff --git a/gui/mainwindow.ui b/gui/mainwindow.ui index 296da3d6db5..72008d4deb5 100644 --- a/gui/mainwindow.ui +++ b/gui/mainwindow.ui @@ -212,6 +212,7 @@ + @@ -795,6 +796,14 @@ C&11 + true diff --git a/lib/keywords.cpp b/lib/keywords.cpp index 181d074695a..e612a136c0a 100644 --- a/lib/keywords.cpp +++ b/lib/keywords.cpp @@ -34,19 +34,10 @@ #define C11_KEYWORDS \ "_Alignas", "_Alignof", "_Atomic", "_Generic", "_Noreturn", "_Static_assert", "_Thread_local" -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-macros" -#endif - #define C23_KEYWORDS \ "alignas", "alignof", "bool", "constexpr", "false", "nullptr", "static_assert", "thread_local", "true", "typeof", "typeof_unqual", \ "_BitInt", "_Decimal128", "_Decimal32", "_Decimal64" -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - static const std::unordered_set c89_keywords_all = { C90_KEYWORDS }; @@ -205,7 +196,7 @@ const std::unordered_set& Keywords::getOnly(Standards::cstd_t cStd) case Standards::cstd_t::C17: return c11_keywords; case Standards::cstd_t::C23: - return c23_keywords_all; + return c23_keywords; } cppcheck::unreachable(); } diff --git a/lib/standards.h b/lib/standards.h index 24f8637c2dd..313faf6e3be 100644 --- a/lib/standards.h +++ b/lib/standards.h @@ -59,6 +59,10 @@ struct Standards { c = C11; return true; } + if (str == "c23" || str == "C23") { + c = C23; + return true; + } return false; } std::string getC() const { From d8c3cebf21bbee65285380c7b92c3cc604c2e2c1 Mon Sep 17 00:00:00 2001 From: firewave Date: Thu, 5 Oct 2023 22:51:32 +0200 Subject: [PATCH 4/6] Standards: simplified `setC()` --- lib/standards.h | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/lib/standards.h b/lib/standards.h index 313faf6e3be..be9752966e1 100644 --- a/lib/standards.h +++ b/lib/standards.h @@ -45,25 +45,11 @@ struct Standards { /** --std value given on command line */ std::string stdValue; - bool setC(const std::string& str) { + bool setC(std::string str) { stdValue = str; - if (str == "c89" || str == "C89") { - c = C89; - return true; - } - if (str == "c99" || str == "C99") { - c = C99; - return true; - } - if (str == "c11" || str == "C11") { - c = C11; - return true; - } - if (str == "c23" || str == "C23") { - c = C23; - return true; - } - return false; + strTolower(str); + c = getC(str); + return !stdValue.empty() && str == getC(); } std::string getC() const { switch (c) { From e70f0425da17d71a784fa5b46bacb902cdf16c46 Mon Sep 17 00:00:00 2001 From: firewave Date: Fri, 26 Apr 2024 22:57:58 +0200 Subject: [PATCH 5/6] added preliminary C17 support --- gui/mainwindow.cpp | 4 ++++ gui/mainwindow.ui | 9 +++++++++ lib/keywords.cpp | 13 +++++++++++-- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 78cdc233bb5..637e49263b1 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -264,6 +264,7 @@ MainWindow::MainWindow(TranslationHandler* th, QSettings* settings) : mUI->mActionC89->setActionGroup(mCStandardActions); mUI->mActionC99->setActionGroup(mCStandardActions); mUI->mActionC11->setActionGroup(mCStandardActions); + //mUI->mActionC17->setActionGroup(mCStandardActions); //mUI->mActionC23->setActionGroup(mCStandardActions); mUI->mActionCpp03->setActionGroup(mCppStandardActions); @@ -376,6 +377,7 @@ void MainWindow::loadSettings() mUI->mActionC89->setChecked(standards.c == Standards::C89); mUI->mActionC99->setChecked(standards.c == Standards::C99); mUI->mActionC11->setChecked(standards.c == Standards::C11); + //mUI->mActionC17->setChecked(standards.c == Standards::C17); //mUI->mActionC23->setChecked(standards.c == Standards::C23); standards.setCPP(mSettings->value(SETTINGS_STD_CPP, QString()).toString().toStdString()); mUI->mActionCpp03->setChecked(standards.cpp == Standards::CPP03); @@ -456,6 +458,8 @@ void MainWindow::saveSettings() const mSettings->setValue(SETTINGS_STD_C, "C99"); if (mUI->mActionC11->isChecked()) mSettings->setValue(SETTINGS_STD_C, "C11"); + //if (mUI->mActionC17->isChecked()) + // mSettings->setValue(SETTINGS_STD_C, "C17"); //if (mUI->mActionC23->isChecked()) // mSettings->setValue(SETTINGS_STD_C, "C23"); diff --git a/gui/mainwindow.ui b/gui/mainwindow.ui index 72008d4deb5..ac533599604 100644 --- a/gui/mainwindow.ui +++ b/gui/mainwindow.ui @@ -212,6 +212,7 @@ + @@ -796,6 +797,14 @@ C&11 +