Skip to content

Commit 4945489

Browse files
committed
Warning-free clang build
1. ✍️ Stop using `[[unlikely]]` until clang-12 is available. 2. ✍️ Eliminate clang warnings here & there.
1 parent b4445b2 commit 4945489

File tree

17 files changed

+74
-75
lines changed

17 files changed

+74
-75
lines changed

CMakeLists.txt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
cmake_minimum_required (VERSION 3.18)
22
cmake_policy(VERSION 3.18)
33

4-
#set(CMAKE_CXX_COMPILER "clang++")
5-
64
include(FetchContent)
75

86
FetchContent_Declare(
@@ -21,6 +19,21 @@ FetchContent_MakeAvailable(FetchedBux FetchedCBrackets)
2119

2220
project(ParserSuite)
2321

22+
IF(CMAKE_CXX_COMPILER_ID MATCHES Clang|GNU)
23+
string(APPEND CMAKE_CXX_FLAGS " -Wall -Wextra -Wshadow -Wconversion -Ofast -std=c++2a")
24+
IF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
25+
message("Clang")
26+
string(APPEND CMAKE_CXX_FLAGS " -Wno-potentially-evaluated-expression -Wno-deprecated-anon-enum-enum-conversion")
27+
ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
28+
message("GNU")
29+
#string(APPEND CMAKE_CXX_FLAGS " -Wno-maybe-uninitialized")
30+
ELSE()
31+
message("Else 1/2")
32+
ENDIF()
33+
ELSE()
34+
message("Else 2/2")
35+
ENDIF()
36+
2437
add_subdirectory (ParserGen)
2538
add_subdirectory (ScannerGen)
2639
add_subdirectory (example)

ParserGen/BNFContext.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ void C_BNFContext::wrapup(const bux::C_SourcePos &pos)
436436
{
437437
auto out = fmt::format(FMT_STRING("Duplicate priority assignments on id {}"), id);
438438
if (id < 127)
439-
out += fmt::format("(\'{}\')", asciiLiteral(char(id)));
439+
out += fmt::format("(\'{}\')", asciiLiteral(id));
440440
log(LL_ERROR, pos, out);
441441
}
442442
break;

ParserGen/CMakeLists.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
#set(CMAKE_CXX_COMPILER "clang++")
1+
#set(CMAKE_CXX_COMPILER_ID "Clang")
22

33
include_directories("../../bux/include" "../../CBrackets") # ${Boost_INCLUDE_DIRS})
4-
#link_directories("../../lib/bux" "../CBrackets")
5-
string(APPEND CMAKE_CXX_FLAGS " -Wall -Wextra -Wconversion -Wno-parentheses -Wno-unknown-pragmas -O3 -std=c++2a")
6-
#string(APPEND CMAKE_CXX_FLAGS " -Wall -Wextra -Wno-parentheses -Wno-unknown-pragmas -g3 -Og -std=c++2a")
4+
string(APPEND CMAKE_CXX_FLAGS " -Wno-shadow")
5+
#string(APPEND CMAKE_CXX_FLAGS " -g3 -Og")
6+
77
set(COMMON_SRC
88
BNFContext.cpp
99
Parser.cpp ParseFile.cpp ParserGenBase.cpp
@@ -18,12 +18,12 @@ add_executable(parsergen
1818
${COMMON_SRC}
1919
)
2020
#target_compile_options(parsergen PRIVATE -O0 -g3)
21-
target_link_libraries(parsergen bracketPairing bux fmt)
21+
target_link_libraries(parsergen bracketPairing bux fmt stdc++)
2222
#add_dependencies(parsergen bracketPairing bux)
2323

2424
add_executable(grammarstrip
2525
GrammarStrip.cpp
2626
${COMMON_SRC}
2727
)
28-
target_link_libraries(grammarstrip bracketPairing bux fmt)
28+
target_link_libraries(grammarstrip bracketPairing bux fmt stdc++)
2929
#add_dependencies(grammarstrip bracketPairing bux)

ParserGen/Cfa.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ void FC_CreateClosure::operator()(C_StateItems &dst) const
265265
changed = true;
266266

267267
const auto n =la.size();
268-
for (auto k = seq.begin()+item.second; ++k != seq.end();)
268+
for (auto k = seq.begin()+std::ptrdiff_t(item.second); ++k != seq.end();)
269269
if (auto const nt = dynamic_cast<C_Nonterminal*>(*k))
270270
{
271271
auto &attrs =getAttr(nt->m_id);
@@ -433,8 +433,8 @@ FC_LessGotoKey::FC_LessGotoKey(const C_ParserInfo &parsed): m_LessTerm(parsed)
433433

434434
bool FC_LessGotoKey::operator()(const C_GotoKey &a, const C_GotoKey &b) const
435435
{
436-
return a.first->m_id < b.first->m_id ||
437-
a.first->m_id == b.first->m_id && m_LessTerm(a.second,b.second);
436+
return a.first->m_id < b.first->m_id || (
437+
a.first->m_id == b.first->m_id && m_LessTerm(a.second,b.second));
438438
}
439439

440440
C_GotoMap::C_GotoMap(const C_ParserInfo &parsed):

ParserGen/Output.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ enum
1414
//
1515
VERSION_MAJOR = 1,
1616
VERSION_MINOR = 6,
17-
VERSION_RELEASE = 2
17+
VERSION_RELEASE = 3
1818
};
1919

2020
namespace bux { // reusability to be assessed
@@ -56,7 +56,7 @@ int findSubseq(const std::vector<T> &super, const std::vector<T> &sub)
5656
int ret = -1;
5757
if (!super.empty())
5858
{
59-
for (auto i = super.begin(), end = super.end() - sub.size(); i <= end; ++i)
59+
for (auto i = super.begin(), end = super.end() - ssize(sub); i <= end; ++i)
6060
{
6161
bool match = true;
6262
auto j = i;

ParserGen/Parser.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,7 @@ void _reduce_1(bux::LR1::C_Parser &_paRSeR_, const F_GetProduced &_geT_, C_RetLv
566566

567567
if (auto targs = bux::tryUnlex<C_TemplateArgs>(_geT_(2)))
568568
{
569-
if (auto err = c.setClassName(bux::unlex<C_StringList>(_geT_(1)), *targs)) [[unlikely]]
569+
if (auto err = c.setClassName(bux::unlex<C_StringList>(_geT_(1)), *targs))
570570
_paRSeR_.onError(_geT_(0), *err);
571571
}
572572
else
@@ -609,7 +609,7 @@ void _reduce_4(bux::LR1::C_Parser &_paRSeR_, const F_GetProduced &_geT_, C_RetLv
609609
return;
610610

611611
auto &prod = dynamic_cast<C_Production&>(*_geT_(0));
612-
if (!c.addProduction(prod, bux::tryUnlex<C_Semantic>(_geT_(1)))) [[unlikely]]
612+
if (!c.addProduction(prod, bux::tryUnlex<C_Semantic>(_geT_(1))))
613613
_paRSeR_.onError(_geT_(0), "Production re-defined:\n"
614614
"\t" + prod.str());
615615
}
@@ -1148,9 +1148,9 @@ bux::T_StateID C_ParserPolicy::nextState(bux::T_StateID state, bux::T_LexID inpu
11481148
bool C_ParserPolicy::changeToken(T_LexID &token, C_LexPtr &attr) const
11491149
{
11501150
// Grammar %UPCAST_TOKEN begins
1151-
if (isascii(token) && !iscntrl(token) && !isalnum(token) && !isspace(token))
1151+
if (const auto it = int(token); isascii(it) && !iscntrl(it) && !isalnum(it) && !isspace(it))
11521152
{
1153-
attr.assign(bux::createLex<std::string>(1,char(token)), true);
1153+
attr.assign(bux::createLex<std::string>(1u,char(token)), true);
11541154
token = TID_LEX_Operator;
11551155
return true;
11561156
}

ParserGen/ParserGenBase.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ bool getNonterminalID(const std::string &str, std::string &dst)
2929
bool isKeyword(const std::string &str)
3030
{
3131
for (auto c: str)
32-
if (!isascii(c) || c != '_' && !isalnum(c))
32+
if (!isascii(c) || (c != '_' && !isalnum(c)))
3333
return false;
3434

3535
return true;
@@ -38,16 +38,15 @@ bool isKeyword(const std::string &str)
3838
std::string literalSuffix(const std::string &s)
3939
{
4040
std::string ret;
41-
for (auto i =s.begin(); i != s.end(); ++i)
41+
for (auto c: s)
4242
{
43-
unsigned char c =*i;
4443
if (isascii(c) && isalnum(c))
4544
{
46-
ret +=c;
47-
ret +='_';
45+
ret += c;
46+
ret += '_';
4847
}
4948
else
50-
bux::addAsHex(ret, c);
49+
bux::addAsHex(ret, (uint8_t)c);
5150
}
5251
return ret;
5352
}
@@ -238,7 +237,7 @@ std::string C_ParserInfo::outputId(const I_ProductionTerm *term) const
238237
idstr.assign("TID_LEX_").append(lex->m_Var);
239238
}
240239
else if (auto const slex =dynamic_cast<const C_StrLiteral*>(term))
241-
return std::string(1,'\'').append(asciiLiteral(slex->m_Str[0])).append(1,'\'');
240+
return std::string(1u,'\'').append(asciiLiteral(uint8_t(slex->m_Str[0]))).append(1u,'\'');
242241
else
243242
RUNTIME_ERROR("{}Fail to produce output id for {}", idstr, HRTN(*term));
244243

ParserGen/ginc/grammar.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
if (auto targs = bux::tryUnlex<C_TemplateArgs>($3))
2222
{
23-
if (auto err = c.setClassName(bux::unlex<C_StringList>($2), *targs)) [[unlikely]]
23+
if (auto err = c.setClassName(bux::unlex<C_StringList>($2), *targs))
2424
$p.onError($1, *err);
2525
}
2626
else
@@ -55,7 +55,7 @@
5555
return;
5656

5757
auto &prod = dynamic_cast<C_Production&>(*$1);
58-
if (!c.addProduction(prod, bux::tryUnlex<C_Semantic>($2))) [[unlikely]]
58+
if (!c.addProduction(prod, bux::tryUnlex<C_Semantic>($2)))
5959
$p.onError($1, "Production re-defined:\n"
6060
"\t" + prod.str());
6161
]]

ParserGen/ginc/impl.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
]]
66

77
%UPCAST_TOKEN [[
8-
if (isascii($token) && !iscntrl($token) && !isalnum($token) && !isspace($token))
8+
if (const auto it = int($token); isascii(it) && !iscntrl(it) && !isalnum(it) && !isspace(it))
99
{
10-
$attr.assign(bux::createLex<std::string>(1,char($token)), true);
10+
$attr.assign(bux::createLex<std::string>(1u,char($token)), true);
1111
$token = TID_LEX_Operator;
1212
return true;
1313
}

ScannerGen/CMakeLists.txt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
#set(CMAKE_CXX_COMPILER "clang++")
1+
#set(CMAKE_CXX_COMPILER_ID "Clang")
22

33
include_directories("../../bux/include" "../../CBrackets")
4-
string(APPEND CMAKE_CXX_FLAGS " -Wall -Wextra -Wshadow -Wconversion -Wno-parentheses -Wno-unknown-pragmas -Wno-maybe-uninitialized -Ofast -std=c++2a")
54

65
add_executable(scannergen
76
Context.cpp
@@ -11,10 +10,10 @@ add_executable(scannergen
1110
spec2charset.cpp
1211
)
1312
#target_compile_options(scannergen PRIVATE -O0 -g3)
14-
target_link_libraries(scannergen bracketPairing bux fmt)
13+
target_link_libraries(scannergen bracketPairing bux fmt stdc++)
1514

1615
add_executable(handycharset
1716
HandyCharset.cpp
1817
spec2charset.cpp
1918
)
20-
target_link_libraries(handycharset bux fmt)
19+
target_link_libraries(handycharset bux fmt stdc++)

0 commit comments

Comments
 (0)