================
@@ -1779,6 +1779,42 @@ void Parser::checkPotentialAngleBracket(ExprResult 
&PotentialTemplateName) {
                     Priority);
 }
 
+bool Parser::isMissingTemplateKeywordBeforeScope(bool AnnotateInvalid) {
+  assert(Tok.is(tok::coloncolon));
+  Sema::DisableTypoCorrectionRAII DTC(Actions);
+  ColonProtectionRAIIObject ColonProtection(*this);
+
+  SourceLocation StartLoc = Tok.getLocation();
+  if (TryAnnotateTypeOrScopeToken())
+    return true;
+  if (Tok.isSimpleTypeSpecifier(getLangOpts()))
+    return false;
+  CXXScopeSpec SS;
+  ParseOptionalCXXScopeSpecifier(SS, /*ObjectType=*/nullptr,
+                                 /*ObjectHasErrors=*/false,
+                                 /*EnteringContext=*/false);
+  ExprResult Result = tryParseCXXIdExpression(SS, 
/*isAddressOfOperand=*/false);
----------------
zygoloid wrote:

I'm worried that this can perform semantic actions (for example, template 
instantiations) that we're not permitted to perform, resulting in errors 
outside the immediate context, instantiation of variables with initializers 
that would incorrectly run on program startup, or other misbehavior. 
Generally-speaking, it's not conforming to try to parse and semantically check 
code and then backtrack if it didn't work. We can do such things on error 
recovery paths, and we can do purely syntactic tentative parsing things (where 
it's OK to ask Sema about name lookup, but not OK to ask it to do more 
complicated things), but we can't do full semantic analysis tentatively.

https://github.com/llvm/llvm-project/pull/100425
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to