[clang] 9115f18 - [clang][JumpDiagnostics] bring VerifyIndirectOrAsmJumps to C++17
Nick Desaulniers via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 14 15:27:51 PDT 2023
Author: Nick Desaulniers
Date: 2023-07-14T15:20:08-07:00
New Revision: 9115f18de90611d42147838e53bd8e37f206b744
URL: https://github.com/llvm/llvm-project/commit/9115f18de90611d42147838e53bd8e37f206b744
DIFF: https://github.com/llvm/llvm-project/commit/9115f18de90611d42147838e53bd8e37f206b744.diff
LOG: [clang][JumpDiagnostics] bring VerifyIndirectOrAsmJumps to C++17
Update the code to more modern C++ style.
Reviewed By: void, MaskRay
Differential Revision: https://reviews.llvm.org/D155336
Added:
Modified:
clang/lib/Sema/JumpDiagnostics.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/JumpDiagnostics.cpp b/clang/lib/Sema/JumpDiagnostics.cpp
index bd2ce9a93e7e03..4752f8af07d05c 100644
--- a/clang/lib/Sema/JumpDiagnostics.cpp
+++ b/clang/lib/Sema/JumpDiagnostics.cpp
@@ -721,7 +721,7 @@ void JumpScopeChecker::VerifyIndirectOrAsmJumps(bool IsAsmGoto) {
// If there aren't any address-of-label expressions in this function,
// complain about the first indirect goto.
if (JumpTargets.empty()) {
- assert(!IsAsmGoto &&"only indirect goto can get here");
+ assert(!IsAsmGoto && "only indirect goto can get here");
S.Diag(GotoJumps[0]->getBeginLoc(),
diag::err_indirect_goto_without_addrlabel);
return;
@@ -729,40 +729,32 @@ void JumpScopeChecker::VerifyIndirectOrAsmJumps(bool IsAsmGoto) {
// Collect a single representative of every scope containing an
// indirect or asm goto. For most code bases, this substantially cuts
// down on the number of jump sites we'll have to consider later.
- typedef std::pair<unsigned, Stmt*> JumpScope;
+ using JumpScope = std::pair<unsigned, Stmt *>;
SmallVector<JumpScope, 32> JumpScopes;
{
llvm::DenseMap<unsigned, Stmt*> JumpScopesMap;
- for (SmallVectorImpl<Stmt *>::iterator I = GotoJumps.begin(),
- E = GotoJumps.end();
- I != E; ++I) {
- Stmt *IG = *I;
+ for (Stmt *IG : GotoJumps) {
if (CHECK_PERMISSIVE(!LabelAndGotoScopes.count(IG)))
continue;
unsigned IGScope = LabelAndGotoScopes[IG];
- Stmt *&Entry = JumpScopesMap[IGScope];
- if (!Entry) Entry = IG;
+ if (!JumpScopesMap.contains(IGScope))
+ JumpScopesMap[IGScope] = IG;
}
JumpScopes.reserve(JumpScopesMap.size());
- for (llvm::DenseMap<unsigned, Stmt *>::iterator I = JumpScopesMap.begin(),
- E = JumpScopesMap.end();
- I != E; ++I)
- JumpScopes.push_back(*I);
+ for (auto &Pair : JumpScopesMap)
+ JumpScopes.emplace_back(Pair);
}
// Collect a single representative of every scope containing a
// label whose address was taken somewhere in the function.
// For most code bases, there will be only one such scope.
llvm::DenseMap<unsigned, LabelDecl*> TargetScopes;
- for (SmallVectorImpl<LabelDecl *>::iterator I = JumpTargets.begin(),
- E = JumpTargets.end();
- I != E; ++I) {
- LabelDecl *TheLabel = *I;
+ for (LabelDecl *TheLabel : JumpTargets) {
if (CHECK_PERMISSIVE(!LabelAndGotoScopes.count(TheLabel->getStmt())))
continue;
unsigned LabelScope = LabelAndGotoScopes[TheLabel->getStmt()];
- LabelDecl *&Target = TargetScopes[LabelScope];
- if (!Target) Target = TheLabel;
+ if (!TargetScopes.contains(LabelScope))
+ TargetScopes[LabelScope] = TheLabel;
}
// For each target scope, make sure it's trivially reachable from
@@ -774,11 +766,7 @@ void JumpScopeChecker::VerifyIndirectOrAsmJumps(bool IsAsmGoto) {
// entered, then verify that every jump scope can be trivially
// exitted to reach a scope in S.
llvm::BitVector Reachable(Scopes.size(), false);
- for (llvm::DenseMap<unsigned,LabelDecl*>::iterator
- TI = TargetScopes.begin(), TE = TargetScopes.end(); TI != TE; ++TI) {
- unsigned TargetScope = TI->first;
- LabelDecl *TargetLabel = TI->second;
-
+ for (auto [TargetScope, TargetLabel] : TargetScopes) {
Reachable.reset();
// Mark all the enclosing scopes from which you can safely jump
@@ -799,10 +787,8 @@ void JumpScopeChecker::VerifyIndirectOrAsmJumps(bool IsAsmGoto) {
// Walk through all the jump sites, checking that they can trivially
// reach this label scope.
- for (SmallVectorImpl<JumpScope>::iterator
- I = JumpScopes.begin(), E = JumpScopes.end(); I != E; ++I) {
- unsigned Scope = I->first;
-
+ for (auto [JumpScope, JumpStmt] : JumpScopes) {
+ unsigned Scope = JumpScope;
// Walk out the "scope chain" for this scope, looking for a scope
// we've marked reachable. For well-formed code this amortizes
// to O(JumpScopes.size() / Scopes.size()): we only iterate
@@ -813,7 +799,7 @@ void JumpScopeChecker::VerifyIndirectOrAsmJumps(bool IsAsmGoto) {
if (Reachable.test(Scope)) {
// If we find something reachable, mark all the scopes we just
// walked through as reachable.
- for (unsigned S = I->first; S != Scope; S = Scopes[S].ParentScope)
+ for (unsigned S = JumpScope; S != Scope; S = Scopes[S].ParentScope)
Reachable.set(S);
IsReachable = true;
break;
@@ -832,7 +818,7 @@ void JumpScopeChecker::VerifyIndirectOrAsmJumps(bool IsAsmGoto) {
// Only diagnose if we didn't find something.
if (IsReachable) continue;
- DiagnoseIndirectOrAsmJump(I->second, I->first, TargetLabel, TargetScope);
+ DiagnoseIndirectOrAsmJump(JumpStmt, JumpScope, TargetLabel, TargetScope);
}
}
}
More information about the cfe-commits
mailing list