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; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits