[PATCH] D64799: [Sema] Emit diagnostics for uncorrected delayed typos at the end of TU

Ilya Biryukov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Jul 29 14:12:14 PDT 2019


ilya-biryukov added a comment.

@rsmith, emitting the typos on pop expression evaluation context resulted in a bunch of failures when trying to transform the resulting errors,  see a typical stacktrace below.
It seems we can actually pop expression evaluation contexts between producing and correcting a typo expression.

I don't see how to workaround this without digging further into typo correction and changing its design.
Would you be ok with landing the workaround as is? Alternatively, any ideas on how we can avoid this problem without extending the scope of the patch too much?

  FAIL: Clang :: CXX/temp/temp.decls/temp.class/temp.mem.enum/p1.cpp (1595 of 15306)
  ******************** TEST 'Clang :: CXX/temp/temp.decls/temp.class/temp.mem.enum/p1.cpp' FAILED ********************
  Script:
  --
  : 'RUN: at line 1';   /usr/local/google/home/ibiryukov/projects/llvm/build-rel/bin/clang -cc1 -internal-isystem /usr/local/google/home/ibiryukov/projects/llvm/build-rel/lib/clang/10.0.0/include -nostdsysteminc -std=c++11 -verify /usr/local/google/home/ibiryukov/projects/llvm/clang/test/CXX/temp/temp.decls/temp.class/temp.mem.enum/p1.cpp
  --
  Exit Code: 134
  
  Command Output (stderr):
  --
  clang: /usr/local/google/home/ibiryukov/projects/llvm/clang/lib/Sema/SemaLookup.cpp:5378: const Sema::TypoExprState &clang::Sema::getTypoExprState(clang::TypoExpr *) const: Assertion `Entry != DelayedTypos.end() && "Failed to get the state for a TypoExpr!"' failed.
  Stack dump:
  0.      Program arguments: /usr/local/google/home/ibiryukov/projects/llvm/build-rel/bin/clang -cc1 -internal-isystem /usr/local/google/home/ibiryukov/projects/llvm/build-rel/lib/clang/10.0.0/include -nostdsysteminc -std=c++11 -verify /usr/local/google/home/ibiryukov/projects/llvm/clang/test/CXX/temp/temp.decls/temp.class/temp.mem.enum/p1.cpp
  1.      /usr/local/google/home/ibiryukov/projects/llvm/clang/test/CXX/temp/temp.decls/temp.class/temp.mem.enum/p1.cpp:23:26: current parser token ';'
   #0 0x00000000043e1ea4 PrintStackTrace /usr/local/google/home/ibiryukov/projects/llvm/llvm/lib/Support/Unix/Signals.inc:533:13
   #1 0x00000000043e1ea4 PrintStackTraceSignalHandler(void*) /usr/local/google/home/ibiryukov/projects/llvm/llvm/lib/Support/Unix/Signals.inc:593:0
   #2 0x00000000043dfa9e llvm::sys::RunSignalHandlers() /usr/local/google/home/ibiryukov/projects/llvm/llvm/lib/Support/Signals.cpp:69:18
   #3 0x00000000043e22b8 SignalHandler(int) /usr/local/google/home/ibiryukov/projects/llvm/llvm/lib/Support/Unix/Signals.inc:385:1
   #4 0x00007fedabb7d3a0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x123a0)
   #5 0x00007fedaac0bcfb raise (/lib/x86_64-linux-gnu/libc.so.6+0x36cfb)
   #6 0x00007fedaabf68ad abort (/lib/x86_64-linux-gnu/libc.so.6+0x218ad)
   #7 0x00007fedaabf677f (/lib/x86_64-linux-gnu/libc.so.6+0x2177f)
   #8 0x00007fedaac04542 (/lib/x86_64-linux-gnu/libc.so.6+0x2f542)
   #9 0x0000000005f4ba2e LookupBucketFor<const clang::TypoExpr *> /usr/local/google/home/ibiryukov/projects/llvm/llvm/include/llvm/ADT/DenseMap.h:618:5
  #10 0x0000000005f4ba2e find /usr/local/google/home/ibiryukov/projects/llvm/llvm/include/llvm/ADT/DenseMap.h:184:0
  #11 0x0000000005f4ba2e find /usr/local/google/home/ibiryukov/projects/llvm/llvm/include/llvm/ADT/MapVector.h:154:0
  #12 0x0000000005f4ba2e clang::Sema::getTypoExprState(clang::TypoExpr*) const /usr/local/google/home/ibiryukov/projects/llvm/clang/lib/Sema/SemaLookup.cpp:5376:0
  #13 0x0000000005e94695 TransformTypoExpr /usr/local/google/home/ibiryukov/projects/llvm/clang/lib/Sema/SemaExprCXX.cpp:7740:27
  #14 0x0000000005e94695 clang::TreeTransform<(anonymous namespace)::TransformTypos>::TransformExpr(clang::Expr*) /usr/local/google/home/ibiryukov/projects/llvm/build-rel/tools/clang/include/clang/AST/StmtNodes.inc:1277:0
  #15 0x0000000005e708ea hasErrorOccurred /usr/local/google/home/ibiryukov/projects/llvm/clang/include/clang/Sema/Sema.h:7864:38
  #16 0x0000000005e708ea TryTransform /usr/local/google/home/ibiryukov/projects/llvm/clang/lib/Sema/SemaExprCXX.cpp:7651:0
  #17 0x0000000005e708ea Transform /usr/local/google/home/ibiryukov/projects/llvm/clang/lib/Sema/SemaExprCXX.cpp:7686:0
  #18 0x0000000005e708ea clang::Sema::CorrectDelayedTyposInExpr(clang::Expr*, clang::VarDecl*, llvm::function_ref<clang::ActionResult<clang::Expr*, true> (clang::Expr*)>) /usr/local/google/home/ibiryukov/projects/llvm/clang/lib/Sema/SemaExprCXX.cpp:7784:0
  #19 0x0000000005c5deae isInvalid /usr/local/google/home/ibiryukov/projects/llvm/clang/include/clang/Sema/Ownership.h:208:37
  #20 0x0000000005c5deae clang::Sema::AddInitializerToDecl(clang::Decl*, clang::Expr*, bool) /usr/local/google/home/ibiryukov/projects/llvm/clang/lib/Sema/SemaDecl.cpp:11236:0
  #21 0x0000000005a22997 clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) /usr/local/google/home/ibiryukov/projects/llvm/clang/lib/Parse/ParseDecl.cpp:2456:3
  #22 0x0000000005a2093c clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::SourceLocation*, clang::Parser::ForRangeInit*) /usr/local/google/home/ibiryukov/projects/llvm/clang/lib/Parse/ParseDecl.cpp:2115:21
  #23 0x00000000059eff85 clang::Parser::ParseDeclOrFunctionDefInternal(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec&, clang::AccessSpecifier) /usr/local/google/home/ibiryukov/projects/llvm/clang/lib/Parse/Parser.cpp:1095:10
  #24 0x00000000059ef9a5 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec*, clang::AccessSpecifier) /usr/local/google/home/ibiryukov/projects/llvm/clang/lib/Parse/Parser.cpp:1111:12
  #25 0x00000000059eea9a clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) /usr/local/google/home/ibiryukov/projects/llvm/clang/lib/Parse/Parser.cpp:931:12
  #26 0x00000000059ecaa3 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool) /usr/local/google/home/ibiryukov/projects/llvm/clang/lib/Parse/Parser.cpp:682:10
  #27 0x00000000059e8218 clang::ParseAST(clang::Sema&, bool, bool) /usr/local/google/home/ibiryukov/projects/llvm/clang/lib/Parse/ParseAST.cpp:157:5


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D64799/new/

https://reviews.llvm.org/D64799





More information about the cfe-commits mailing list