[clang] 28ccf32 - [pseudo] Fix an out-of-bound access for LRTable::Actions.
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 3 05:27:59 PST 2022
Author: Haojian Wu
Date: 2022-03-03T14:27:44+01:00
New Revision: 28ccf326725d0fea8648834c8acdbdfe3aa40d7a
URL: https://github.com/llvm/llvm-project/commit/28ccf326725d0fea8648834c8acdbdfe3aa40d7a
DIFF: https://github.com/llvm/llvm-project/commit/28ccf326725d0fea8648834c8acdbdfe3aa40d7a.diff
LOG: [pseudo] Fix an out-of-bound access for LRTable::Actions.
Without this patch, when End == Start, we access Actions[Actions.end()]
though we return an empty result.
This fixes an assertion failure in MSVC STL debug build.
Added:
Modified:
clang/lib/Tooling/Syntax/Pseudo/LRTable.cpp
Removed:
################################################################################
diff --git a/clang/lib/Tooling/Syntax/Pseudo/LRTable.cpp b/clang/lib/Tooling/Syntax/Pseudo/LRTable.cpp
index 4f1494fff277d..957d17a503cf0 100644
--- a/clang/lib/Tooling/Syntax/Pseudo/LRTable.cpp
+++ b/clang/lib/Tooling/Syntax/Pseudo/LRTable.cpp
@@ -112,6 +112,8 @@ llvm::ArrayRef<LRTable::Action> LRTable::find(StateID Src, SymbolID ID) const {
"subrange of the StateIdx should be sorted!");
const LRTable::StateID *Start = llvm::partition_point(
TargetedStates, [&Src](LRTable::StateID S) { return S < Src; });
+ if (Start == TargetedStates.end())
+ return {};
const LRTable::StateID *End = Start;
while (End != TargetedStates.end() && *End == Src)
++End;
More information about the cfe-commits
mailing list