diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index ac0d9813e711282d1884cea18cd217dc35030081..bbc63d9ee091ed52894213dd341ab861ce10bf56 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -1076,7 +1076,11 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList<LookupItem> &r
             QTextCursor tc(edit->document());
             tc.setPosition(endOfExpression);
             BackwardsScanner bs(tc);
-            QString possibleDecl = bs.mid(bs.startOfLine(bs.startToken())).trimmed().append("();");
+            const int startToken = bs.startToken();
+            const int lineStartToken = bs.startOfLine(startToken);
+            // make sure the required tokens are actually available
+            bs.LA(startToken - lineStartToken);
+            QString possibleDecl = bs.mid(lineStartToken).trimmed().append("();");
 
             Document::Ptr doc = Document::create(QLatin1String("<completion>"));
             doc->setSource(possibleDecl.toLatin1());