Skip to content

Commit 7916160

Browse files
committed
Make errors and notes printed in order
1 parent 2556692 commit 7916160

File tree

2 files changed

+45
-34
lines changed

2 files changed

+45
-34
lines changed

plugins/lift_check/llil_lift_check.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1190,10 +1190,11 @@ void LowLevelILVerifier::CheckExprOperands(const BinaryNinja::LowLevelILInstruct
11901190
// rss says: technically you can assert on a temp, but only if the definition
11911191
// of the temp register dominates the assert
11921192
// he also says that you have to do this on the SSA form (because dominators)
1193-
// so TODO: that, maybe
1194-
CHECK(!LLIL_REG_IS_TEMP(reg), "cannot assert on temp register {}", reg);
1195-
auto name = m_arch->GetRegisterName(reg);
1196-
CHECK(!name.empty(), "unknown register index {}", reg);
1193+
if (!LLIL_REG_IS_TEMP(reg))
1194+
{
1195+
auto name = m_arch->GetRegisterName(reg);
1196+
CHECK(!name.empty(), "unknown register index {}", reg);
1197+
}
11971198
// todo: probably no way to check that a PossibleValueSet is valid
11981199
// auto constraint = expr.GetConstraint<LLIL_ASSERT>();
11991200
break;

plugins/lift_check/plugin.cpp

Lines changed: 40 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,72 +9,82 @@ static Ref<Logger> g_logger;
99

1010
void ReportVerifier(Ref<AnalysisContext> context, ILVerifier& verifier)
1111
{
12-
std::vector<ILVerifier::Diagnostic> notes;
13-
std::vector<ILVerifier::Diagnostic> remarks;
14-
std::vector<ILVerifier::Diagnostic> warnings;
15-
std::vector<ILVerifier::Diagnostic> errors;
12+
auto diags = verifier.GetDiagnostics();
13+
size_t notes = 0;
14+
size_t remarks = 0;
15+
size_t warnings = 0;
16+
size_t errors = 0;
1617

17-
for (auto& diag: verifier.GetDiagnostics())
18+
for (auto& diag: diags)
1819
{
1920
switch (diag.severity)
2021
{
2122
case IgnoredSeverity:
2223
break;
2324
case NoteSeverity:
24-
notes.push_back(diag);
25+
notes += 1;
2526
break;
2627
case RemarkSeverity:
27-
remarks.push_back(diag);
28+
remarks += 1;
2829
break;
2930
case WarningSeverity:
30-
warnings.push_back(diag);
31+
warnings += 1;
3132
break;
3233
case ErrorSeverity:
3334
case FatalSeverity:
34-
errors.push_back(diag);
35+
errors += 1;
3536
break;
3637
}
3738
}
3839

3940
bool debug = Settings::Instance()->Get<bool>("analysis.liftCheck.debug", context->GetBinaryView());
4041

41-
if (errors.size() > 0)
42+
if (errors > 0)
4243
{
4344
g_logger->LogErrorF(
4445
"{:#x} failed: {} errors, {} warnings",
4546
context->GetFunction()->GetStart(),
46-
errors.size(),
47-
warnings.size()
47+
errors,
48+
warnings
4849
);
4950
}
50-
else if (warnings.size() > 0 || (debug && notes.size() > 0 && remarks.size() > 0))
51+
else if (warnings > 0 || (debug && notes > 0 && remarks > 0))
5152
{
5253
g_logger->LogErrorF(
5354
"{:#x} passed: {} errors, {} warnings",
5455
context->GetFunction()->GetStart(),
55-
errors.size(),
56-
warnings.size()
56+
errors,
57+
warnings
5758
);
5859
}
59-
if (debug)
60+
for (auto& diag: diags)
6061
{
61-
for (auto& diag: notes)
62-
{
63-
g_logger->LogInfoF(" {}", diag.message);
64-
}
65-
for (auto& diag: remarks)
62+
switch (diag.severity)
6663
{
67-
g_logger->LogInfoF(" {}", diag.message);
64+
case IgnoredSeverity:
65+
break;
66+
case NoteSeverity:
67+
if (debug)
68+
{
69+
g_logger->LogInfoF(" {}", diag.message);
70+
}
71+
break;
72+
case RemarkSeverity:
73+
if (debug)
74+
{
75+
g_logger->LogInfoF(" {}", diag.message);
76+
}
77+
break;
78+
case WarningSeverity:
79+
g_logger->LogWarnF(" {}", diag.message);
80+
break;
81+
case ErrorSeverity:
82+
case FatalSeverity:
83+
g_logger->LogErrorF(" {}", diag.message);
84+
break;
85+
6886
}
6987
}
70-
for (auto& diag: warnings)
71-
{
72-
g_logger->LogWarnF(" {}", diag.message);
73-
}
74-
for (auto& diag: errors)
75-
{
76-
g_logger->LogErrorF(" {}", diag.message);
77-
}
7888
}
7989

8090

0 commit comments

Comments
 (0)