aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmlcompiler/qqmljsbasicblocks.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2023-07-24 10:23:04 +0200
committerUlf Hermann <ulf.hermann@qt.io>2023-07-24 11:17:28 +0200
commit1d36f0f2bd40b9ce5aeed2c525fe863bc36e0289 (patch)
tree7cd878681b371875bc60b38e8982165139993940 /src/qmlcompiler/qqmljsbasicblocks.cpp
parentdeaa1bf54d0f55715a9a9ac498f5f5f48d378e83 (diff)
QmlCompiler: Avoid dereferencing past-end iterator
Coverity-Id: 415935 Change-Id: I5871c6aaa0985b7b36913aa27434e55a50245677 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
Diffstat (limited to 'src/qmlcompiler/qqmljsbasicblocks.cpp')
-rw-r--r--src/qmlcompiler/qqmljsbasicblocks.cpp16
1 files changed, 7 insertions, 9 deletions
diff --git a/src/qmlcompiler/qqmljsbasicblocks.cpp b/src/qmlcompiler/qqmljsbasicblocks.cpp
index 95e7ca8d55..461b47e3b9 100644
--- a/src/qmlcompiler/qqmljsbasicblocks.cpp
+++ b/src/qmlcompiler/qqmljsbasicblocks.cpp
@@ -37,10 +37,6 @@ void QQmlJSBasicBlocks::dumpBasicBlocks()
void QQmlJSBasicBlocks::dumpDOTGraph()
{
- auto isBackEdge = [](const BasicBlock &originBlock, int originOffset, int destinationOffset) {
- return originOffset > destinationOffset && originBlock.jumpIsUnconditional;
- };
-
QString output;
QTextStream s{ &output };
s << "=== Basic Blocks Graph in DOT format for \"%1\" (spaces are encoded as"
@@ -52,15 +48,17 @@ void QQmlJSBasicBlocks::dumpDOTGraph()
for (int originOffset : block.jumpOrigins) {
int originBlockOffset;
auto originBlockIt = blocks.find(originOffset);
- if (originBlockIt != blocks.end())
+ bool isBackEdge = false;
+ if (originBlockIt != blocks.end()) {
originBlockOffset = originOffset;
- else
+ isBackEdge = originOffset > blockOffset
+ && originBlockIt->second.jumpIsUnconditional;
+ } else {
originBlockOffset = std::prev(blocks.lower_bound(originOffset))->first;
+ }
s << " %1 -> %2%3\n"_L1.arg(QString::number(originBlockOffset))
.arg(QString::number(blockOffset))
- .arg(isBackEdge(originBlockIt->second, originOffset, blockOffset)
- ? " [color=blue]"_L1
- : ""_L1);
+ .arg(isBackEdge ? " [color=blue]"_L1 : ""_L1);
}
}