diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp @@ -747,9 +747,7 @@ clang::DeclContext *decl_ctx = GetClangDeclContextContainingDIE(die, nullptr); TypeSystemClang::TemplateParameterInfos template_param_infos; - if (ParseTemplateParameterInfos(die, template_param_infos) && - (!template_param_infos.args.empty() || - template_param_infos.packed_args)) { + if (ParseTemplateParameterInfos(die, template_param_infos)) { // Most of the parameters here don't matter, but we make sure the base name // is empty so when we print the name we only get the template parameters. clang::ClassTemplateDecl *class_template_decl = @@ -1247,20 +1245,23 @@ attrs.is_inline); std::free(name_buf); - if (has_template_params) { + { TypeSystemClang::TemplateParameterInfos template_param_infos; - ParseTemplateParameterInfos(die, template_param_infos); - template_function_decl = m_ast.CreateFunctionDeclaration( - ignore_containing_context ? m_ast.GetTranslationUnitDecl() - : containing_decl_ctx, - GetOwningClangModule(die), attrs.name.GetStringRef(), clang_type, - attrs.storage, attrs.is_inline); - clang::FunctionTemplateDecl *func_template_decl = - m_ast.CreateFunctionTemplateDecl( - containing_decl_ctx, GetOwningClangModule(die), - template_function_decl, template_param_infos); - m_ast.CreateFunctionTemplateSpecializationInfo( - template_function_decl, func_template_decl, template_param_infos); + if (has_template_params && + ParseTemplateParameterInfos(die, template_param_infos)) { + template_function_decl = m_ast.CreateFunctionDeclaration( + ignore_containing_context ? m_ast.GetTranslationUnitDecl() + : containing_decl_ctx, + GetOwningClangModule(die), attrs.name.GetStringRef(), + clang_type, attrs.storage, attrs.is_inline); + clang::FunctionTemplateDecl *func_template_decl = + m_ast.CreateFunctionTemplateDecl( + containing_decl_ctx, GetOwningClangModule(die), + template_function_decl, template_param_infos); + m_ast.CreateFunctionTemplateSpecializationInfo( + template_function_decl, func_template_decl, + template_param_infos); + } } lldbassert(function_decl); @@ -1787,9 +1788,7 @@ metadata.SetIsDynamicCXXType(dwarf->ClassOrStructIsVirtual(die)); TypeSystemClang::TemplateParameterInfos template_param_infos; - if (ParseTemplateParameterInfos(die, template_param_infos) && - (!template_param_infos.args.empty() || - template_param_infos.packed_args)) { + if (ParseTemplateParameterInfos(die, template_param_infos)) { clang::ClassTemplateDecl *class_template_decl = m_ast.ParseClassTemplateDecl( decl_ctx, GetOwningClangModule(die), attrs.accessibility, @@ -2123,7 +2122,10 @@ break; } } - return template_param_infos.args.size() == template_param_infos.names.size(); + return template_param_infos.args.size() == + template_param_infos.names.size() && + (!template_param_infos.args.empty() || + template_param_infos.packed_args); } bool DWARFASTParserClang::CompleteRecordType(const DWARFDIE &die,