<div dir="ltr">Can you try and reduce the preprocessed file?</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Aug 1, 2014 at 1:48 PM, Xavier Wang <span dir="ltr"><<a href="mailto:weasley.wx@gmail.com" target="_blank">weasley.wx@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
I have found a crash on nullptr when parse Qt header files.<br>
<br>
it caused by a dyn_cast on nullptr, at here (Line 9240 in SemaDecl.cpp):<br>
<br>
-------------------------<br>
/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform<br>
/// any semantic actions necessary after any initializer has been attached.<br>
void<br>
Sema::FinalizeDeclaration(Decl *ThisDecl) {<br>
  // Note that we are no longer parsing the initializer for this declaration.<br>
  ParsingInitForAutoVars.erase(ThisDecl);<br>
<br>
  VarDecl *VD = dyn_cast_or_null<VarDecl>(ThisDecl);<br>
  if (!VD)<br>
    return;<br>
<br>
  checkAttributesAfterMerging(*this, *VD);<br>
<br>
  // Static locals inherit dll attributes from their function.<br>
  if (VD->isStaticLocal()) {<br>
    if (FunctionDecl *FD =<br>
            dyn_cast<FunctionDecl>(VD->getParentFunctionOrMethod())) {<br>
// !!!here!!!<br>
------------------------<br>
<br>
maybe dyn_cast_or_null is needed? or is there something wrong with it?<br>
<br>
the source code is the preprocessed header file for Qt 5.2, it's<br>
5.74MB+, So I can not upload it.<br>
<br>
the stack dump is:<br>
<br>
> libclang.dll!llvm::isa_impl_cl<clang::FunctionDecl,clang::DeclContext const *>::doit(const clang::DeclContext * Val) Line 94 C++<br>
  libclang.dll!llvm::isa_impl_wrap<clang::FunctionDecl,clang::DeclContext<br>
const *,clang::DeclContext const *>::doit(const clang::DeclContext *<br>
const & Val) Line 122 C++<br>
  libclang.dll!llvm::isa_impl_wrap<clang::FunctionDecl,clang::DeclContext<br>
* const,clang::DeclContext const *>::doit(clang::DeclContext * const &<br>
Val) Line 114 C++<br>
  libclang.dll!llvm::isa<clang::FunctionDecl,clang::DeclContext<br>
*>(clang::DeclContext * const & Val) Line 134 C++<br>
  libclang.dll!llvm::dyn_cast<clang::FunctionDecl,clang::DeclContext>(clang::DeclContext<br>
* Val) Line 278 C++<br>
  libclang.dll!clang::Sema::FinalizeDeclaration(clang::Decl *<br>
ThisDecl) Line 9241 C++<br>
  libclang.dll!clang::Parser::ParseCXXClassMemberDeclaration(clang::AccessSpecifier<br>
AS, clang::AttributeList * AccessAttrs, const<br>
clang::Parser::ParsedTemplateInfo & TemplateInfo,<br>
clang::ParsingDeclRAIIObject * TemplateDiags) Line 2380 C++<br>
  libclang.dll!clang::Parser::ParseSingleDeclarationAfterTemplate(unsigned<br>
int Context, const clang::Parser::ParsedTemplateInfo & TemplateInfo,<br>
clang::ParsingDeclRAIIObject & DiagsFromTParams, clang::SourceLocation<br>
& DeclEnd, clang::AccessSpecifier AS, clang::AttributeList *<br>
AccessAttrs) Line 173 C++<br>
  libclang.dll!clang::Parser::ParseTemplateDeclarationOrSpecialization(unsigned<br>
int Context, clang::SourceLocation & DeclEnd, clang::AccessSpecifier<br>
AS, clang::AttributeList * AccessAttrs) Line 145 C++<br>
  libclang.dll!clang::Parser::ParseDeclarationStartingWithTemplate(unsigned<br>
int Context, clang::SourceLocation & DeclEnd, clang::AccessSpecifier<br>
AS, clang::AttributeList * AccessAttrs) Line 39 C++<br>
  libclang.dll!clang::Parser::ParseCXXClassMemberDeclaration(clang::AccessSpecifier<br>
AS, clang::AttributeList * AccessAttrs, const<br>
clang::Parser::ParsedTemplateInfo & TemplateInfo,<br>
clang::ParsingDeclRAIIObject * TemplateDiags) Line 2083 C++<br>
  libclang.dll!clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation<br>
RecordLoc, clang::SourceLocation AttrFixitLoc,<br>
clang::Parser::ParsedAttributesWithRange & Attrs, unsigned int<br>
TagType, clang::Decl * TagDecl) Line 2709 C++<br>
  libclang.dll!clang::Parser::ParseClassSpecifier(clang::tok::TokenKind<br>
TagTokKind, clang::SourceLocation StartLoc, clang::DeclSpec & DS,<br>
const clang::Parser::ParsedTemplateInfo & TemplateInfo,<br>
clang::AccessSpecifier AS, bool EnteringContext,<br>
clang::Parser::DeclSpecContext DSC,<br>
clang::Parser::ParsedAttributesWithRange & Attributes) Line 1639 C++<br>
  libclang.dll!clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec<br>
& DS, const clang::Parser::ParsedTemplateInfo & TemplateInfo,<br>
clang::AccessSpecifier AS, clang::Parser::DeclSpecContext DSContext,<br>
clang::Parser::LateParsedAttrList * LateAttrs) Line 3111 C++<br>
  libclang.dll!clang::Parser::ParseDeclOrFunctionDefInternal(clang::Parser::ParsedAttributesWithRange<br>
& attrs, clang::ParsingDeclSpec & DS, clang::AccessSpecifier AS) Line<br>
836 C++<br>
  libclang.dll!clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsedAttributesWithRange<br>
& attrs, clang::ParsingDeclSpec * DS, clang::AccessSpecifier AS) Line<br>
904 C++<br>
  libclang.dll!clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange<br>
& attrs, clang::ParsingDeclSpec * DS) Line 762 C++<br>
  libclang.dll!clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef><br>
& Result) Line 559 C++<br>
  libclang.dll!clang::ParseAST(clang::Sema & S, bool PrintStats, bool<br>
SkipFunctionBodies) Line 145 C++<br>
  libclang.dll!clang::ASTFrontendAction::ExecuteAction() Line 514 C++<br>
  libclang.dll!clang::FrontendAction::Execute() Line 415 C++<br>
  libclang.dll!clang::ASTUnit::Parse(llvm::MemoryBuffer *<br>
OverrideMainBuffer) Line 1152 C++<br>
  libclang.dll!clang::ASTUnit::LoadFromCompilerInvocation(bool<br>
PrecompilePreamble) Line 1915 C++<br>
  libclang.dll!clang::ASTUnit::LoadFromCommandLine(const char * *<br>
ArgBegin, const char * * ArgEnd,<br>
llvm::IntrusiveRefCntPtr<clang::DiagnosticsEngine> Diags,<br>
llvm::StringRef ResourceFilesPath, bool OnlyLocalDecls, bool<br>
CaptureDiagnostics,<br>
llvm::ArrayRef<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char><br>
>,llvm::MemoryBuffer *> > RemappedFiles, bool<br>
RemappedFilesKeepOriginalName, bool PrecompilePreamble,<br>
clang::TranslationUnitKind TUKind, bool CacheCodeCompletionResults,<br>
bool IncludeBriefCommentsInCodeCompletion, bool<br>
AllowPCHWithCompilerErrors, bool SkipFunctionBodies, bool<br>
UserFilesAreVolatile, bool ForSerialization,<br>
std::unique_ptr<clang::ASTUnit,std::default_delete<clang::ASTUnit> > *<br>
ErrAST) Line 2030 C++<br>
  libclang.dll!clang_parseTranslationUnit_Impl(void * UserData) Line 2925 C++<br>
  libclang.dll!llvm::CrashRecoveryContext::RunSafelyOnThread::__l3::<lambda>()<br>
Line 96 C++<br>
  libclang.dll!llvm::function_ref<void<br>
__cdecl(void)>::callback_fn<void <lambda>(void) >(int callable) Line<br>
77 C++<br>
  libclang.dll!llvm::function_ref<void __cdecl(void)>::operator()() Line 85 C++<br>
  libclang.dll!llvm::function_ref<void<br>
__cdecl(void)>::callback_fn<llvm::function_ref<void __cdecl(void)><br>
>(int callable) Line 77 C++<br>
  libclang.dll!llvm::function_ref<void __cdecl(void)>::operator()() Line 85 C++<br>
  libclang.dll!llvm::function_ref<void<br>
__cdecl(void)>::callback_fn<llvm::function_ref<void __cdecl(void)><br>
>(int callable) Line 77 C++<br>
  libclang.dll!llvm::function_ref<void __cdecl(void)>::operator()() Line 85 C++<br>
  libclang.dll!llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void<br>
__cdecl(void)> Fn) Line 319 C++<br>
  libclang.dll!RunSafelyOnThread_Dispatch(void * UserData) Line 366 C++<br>
  libclang.dll!ThreadCallback(void * param) Line 81 C++<br>
  [外部代码]<br>
  [下面的框架可能不正确和/或缺失,没有为 kernel32.dll 加载符号]<br>
<br>
<br>
Anyone can help me?<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
regards,<br>
Xavier Wang.<br>
<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
</font></span></blockquote></div><br></div>