MaskRay added a comment.

In D55484#1760432 <https://reviews.llvm.org/D55484#1760432>, @shi-yan wrote:

> I'm hitting a crash by this code,
>
> getting:
>
>   exception thrown: RuntimeError: unreachable,RuntimeError: unreachable
>       at ComputeLineNumbers(clang::DiagnosticsEngine&, 
> clang::SrcMgr::ContentCache*, 
> llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator, 4096ul, 4096ul>&, 
> clang::SourceManager const&, bool&) (wasm-function[21781]:719)
>       at clang::SourceManager::getLineNumber(clang::FileID, unsigned int, 
> bool*) const (wasm-function[21780]:187)
>       at clang::SourceManager::getPresumedLoc(clang::SourceLocation, bool) 
> const (wasm-function[21779]:733)
>       at clang::Preprocessor::HandlePragmaSystemHeader(clang::Token&) 
> (wasm-function[21284]:297)
>       at (anonymous 
> namespace)::PragmaSystemHeaderHandler::HandlePragma(clang::Preprocessor&, 
> clang::PragmaIntroducer, clang::Token&) (wasm-function[21317]:5)
>       at clang::PragmaNamespace::HandlePragma(clang::Preprocessor&, 
> clang::PragmaIntroducer, clang::Token&) (wasm-function[21278]:565)
>       at clang::PragmaNamespace::HandlePragma(clang::Preprocessor&, 
> clang::PragmaIntroducer, clang::Token&) (wasm-function[21278]:565)
>       at clang::Preprocessor::HandlePragmaDirective(clang::PragmaIntroducer) 
> (wasm-function[21279]:142)
>       at clang::Preprocessor::HandleDirective(clang::Token&) 
> (wasm-function[21157]:1721)
>       at clang::Lexer::LexTokenInternal(clang::Token&, bool) 
> (wasm-function[20897]:14349)
>  
>
>
> The reason seems to be that the code appears to expect the Buf is zero ended, 
> but it doesn't seem to be the case. The last character of the Buf was 
> actually \n


ComputeLineNumbers assumes that the buffer has a NUL terminator 
(`RequiresNullTerminator` in lib/Support/MemoryBuffer.cpp). The function has 
the assumption both before and after the change (I don't think this patch 
should be blamed...). That said, a detailed reproducible instruction will be 
useful, though I think the mostly likely problem is that your code does not set 
`RequiresNullTerminator` when calling one of the MemoryBuffer creation routines.


Repository:
  rL LLVM

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

https://reviews.llvm.org/D55484



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to