ivanmurashko created this revision.
ivanmurashko added reviewers: rsmith, DmitryPolukhin.
ivanmurashko requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

There is a SIGSEGV at DeduceTemplateArgumentsByTypeMatch. See BUG description 
and reproducer at https://bugs.llvm.org/show_bug.cgi?id=51171

The stack trace is below:

   #0 0x00000000055afcb9 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) 
/home/ivanmurashko/local/llvm-project/llvm/lib/Support/Unix/Signals.inc:565:22
   #1 0x00000000055afd70 PrintStackTraceSignalHandler(void*) 
/home/ivanmurashko/local/llvm-project/llvm/lib/Support/Unix/Signals.inc:632:1
   #2 0x00000000055add2d llvm::sys::RunSignalHandlers() 
/home/ivanmurashko/local/llvm-project/llvm/lib/Support/Signals.cpp:97:20
   #3 0x00000000055af701 SignalHandler(int) 
/home/ivanmurashko/local/llvm-project/llvm/lib/Support/Unix/Signals.inc:407:1
   #4 0x00007ffff7bc2b20 __restore_rt sigaction.c:0:0
   #5 0x00007ffff66a337f raise (/lib64/libc.so.6+0x3737f)
   #6 0x00007ffff668ddb5 abort (/lib64/libc.so.6+0x21db5)
   #7 0x00007ffff668dc89 _nl_load_domain.cold.0 loadmsgcat.c:0:0
   #8 0x00007ffff669ba76 .annobin___GI___assert_fail.end assert.c:0:0
   #9 0x000000000594b210 clang::QualType::getCommonPtr() const 
/home/ivanmurashko/local/llvm-project/clang/include/clang/AST/Type.h:684:5
  #10 0x0000000005a12ca6 clang::QualType::getCanonicalType() const 
/home/ivanmurashko/local/llvm-project/clang/include/clang/AST/Type.h:6467:36
  #11 0x0000000005a137a6 clang::ASTContext::getCanonicalType(clang::QualType) 
const 
/home/ivanmurashko/local/llvm-project/clang/include/clang/AST/ASTContext.h:2433:58
  #12 0x0000000009204584 DeduceTemplateArgumentsByTypeMatch(clang::Sema&, 
clang::TemplateParameterList*, clang::QualType, clang::QualType, 
clang::sema::TemplateDeductionInfo&, 
llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, bool, 
bool) 
/home/ivanmurashko/local/llvm-project/clang/lib/Sema/SemaTemplateDeduction.cpp:1355:54
  #13 0x000000000920df0d 
clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, 
clang::TemplateArgumentListInfo*, clang::QualType, clang::FunctionDecl*&, 
clang::sema::TemplateDeductionInfo&, bool) 
/home/ivanmurashko/local/llvm-project/clang/lib/Sema/SemaTemplateDeduction.cpp:4354:47
  #14 0x0000000009012b09 (anonymous 
namespace)::AddressOfFunctionResolver::AddMatchingTemplateFunction(clang::FunctionTemplateDecl*,
 clang::DeclAccessPair const&) 
/home/ivanmurashko/local/llvm-project/clang/lib/Sema/SemaOverload.cpp:12026:38
  #15 0x0000000009013030 (anonymous 
namespace)::AddressOfFunctionResolver::FindAllFunctionsThatMatchTargetTypeExactly()
 /home/ivanmurashko/local/llvm-project/clang/lib/Sema/SemaOverload.cpp:12119:9
  #16 0x0000000009012679 (anonymous 
namespace)::AddressOfFunctionResolver::AddressOfFunctionResolver(clang::Sema&, 
clang::Expr*, clang::QualType const&, bool) 
/home/ivanmurashko/local/llvm-project/clang/lib/Sema/SemaOverload.cpp:11931:5
  #17 0x0000000009013c91 
clang::Sema::ResolveAddressOfOverloadedFunction(clang::Expr*, clang::QualType, 
bool, clang::DeclAccessPair&, bool*) 
/home/ivanmurashko/local/llvm-project/clang/lib/Sema/SemaOverload.cpp:12286:42
  #18 0x0000000008fed85d IsStandardConversion(clang::Sema&, clang::Expr*, 
clang::QualType, bool, clang::StandardConversionSequence&, bool, bool) 
/home/ivanmurashko/local/llvm-project/clang/lib/Sema/SemaOverload.cpp:1712:49
  #19 0x0000000008fec8ea TryImplicitConversion(clang::Sema&, clang::Expr*, 
clang::QualType, bool, clang::Sema::AllowedExplicit, bool, bool, bool, bool) 
/home/ivanmurashko/local/llvm-project/clang/lib/Sema/SemaOverload.cpp:1433:27
  #20 0x0000000008ff90ba TryCopyInitialization(clang::Sema&, clang::Expr*, 
clang::QualType, bool, bool, bool, bool) 
/home/ivanmurashko/local/llvm-project/clang/lib/Sema/SemaOverload.cpp:5273:71
  #21 0x00000000090024fb clang::Sema::AddBuiltinCandidate(clang::QualType*, 
llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, unsigned int) 
/home/ivanmurashko/local/llvm-project/clang/lib/Sema/SemaOverload.cpp:7755:32
  #22 0x000000000900513f (anonymous 
namespace)::BuiltinOperatorOverloadBuilder::addGenericBinaryArithmeticOverloads()
 /home/ivanmurashko/local/llvm-project/clang/lib/Sema/SemaOverload.cpp:8633:30
  #23 0x0000000009007624 
clang::Sema::AddBuiltinOperatorCandidates(clang::OverloadedOperatorKind, 
clang::SourceLocation, llvm::ArrayRef<clang::Expr*>, 
clang::OverloadCandidateSet&) 
/home/ivanmurashko/local/llvm-project/clang/lib/Sema/SemaOverload.cpp:9205:51
  #24 0x0000000009018734 
clang::Sema::LookupOverloadedBinOp(clang::OverloadCandidateSet&, 
clang::OverloadedOperatorKind, clang::UnresolvedSetImpl const&, 
llvm::ArrayRef<clang::Expr*>, bool) 
/home/ivanmurashko/local/llvm-project/clang/lib/Sema/SemaOverload.cpp:13469:1
  #25 0x0000000009018d56 
clang::Sema::CreateOverloadedBinOp(clang::SourceLocation, 
clang::BinaryOperatorKind, clang::UnresolvedSetImpl const&, clang::Expr*, 
clang::Expr*, bool, bool, clang::FunctionDecl*) 
/home/ivanmurashko/local/llvm-project/clang/lib/Sema/SemaOverload.cpp:13568:24
  #26 0x0000000008b24797 BuildOverloadedBinOp(clang::Sema&, clang::Scope*, 
clang::SourceLocation, clang::BinaryOperatorKind, clang::Expr*, clang::Expr*) 
/home/ivanmurashko/local/llvm-project/clang/lib/Sema/SemaExpr.cpp:14606:65
  #27 0x0000000008b24ed5 clang::Sema::BuildBinOp(clang::Scope*, 
clang::SourceLocation, clang::BinaryOperatorKind, clang::Expr*, clang::Expr*) 
/home/ivanmurashko/local/llvm-project/clang/lib/Sema/SemaExpr.cpp:14691:73
  #28 0x0000000008b245d4 clang::Sema::ActOnBinOp(clang::Scope*, 
clang::SourceLocation, clang::tok::TokenKind, clang::Expr*, clang::Expr*) 
/home/ivanmurashko/local/llvm-project/clang/lib/Sema/SemaExpr.cpp:14566:1
  #29 0x00000000085bfafb 
clang::Parser::ParseRHSOfBinaryExpression(clang::ActionResult<clang::Expr*, 
true>, clang::prec::Level) 
/home/ivanmurashko/local/llvm-project/clang/lib/Parse/ParseExpr.cpp:630:71
  #30 0x00000000085bd922 
clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) 
/home/ivanmurashko/local/llvm-project/clang/lib/Parse/ParseExpr.cpp:177:1
  #31 0x00000000085cbbcd 
clang::Parser::ParseExpressionList(llvm::SmallVectorImpl<clang::Expr*>&, 
llvm::SmallVectorImpl<clang::SourceLocation>&, llvm::function_ref<void ()>) 
/home/ivanmurashko/local/llvm-project/clang/lib/Parse/ParseExpr.cpp:3368:40
  #32 0x000000000857f49c 
clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, 
clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) 
/home/ivanmurashko/local/llvm-project/clang/lib/Parse/ParseDecl.cpp:2416:5
  #33 0x000000000857df16 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, 
clang::DeclaratorContext, clang::SourceLocation*, clang::Parser::ForRangeInit*) 
/home/ivanmurashko/local/llvm-project/clang/lib/Parse/ParseDecl.cpp:2092:65
  #34 0x000000000855f07b 
clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributesWithRange&,
 clang::ParsingDeclSpec&, clang::AccessSpecifier) 
/home/ivanmurashko/local/llvm-project/clang/lib/Parse/Parser.cpp:1138:1
  #35 0x000000000855f136 
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributesWithRange&,
 clang::ParsingDeclSpec*, clang::AccessSpecifier) 
/home/ivanmurashko/local/llvm-project/clang/lib/Parse/Parser.cpp:1153:57
  #36 0x000000000855e644 
clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&, 
clang::ParsingDeclSpec*) 
/home/ivanmurashko/local/llvm-project/clang/lib/Parse/Parser.cpp:975:58
  #37 0x000000000855d717 
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool) 
/home/ivanmurashko/local/llvm-project/clang/lib/Parse/Parser.cpp:720:42
  #38 0x0000000008558e01 clang::ParseAST(clang::Sema&, bool, bool) 
/home/ivanmurashko/local/llvm-project/clang/lib/Parse/ParseAST.cpp:158:37
  #39 0x000000000627a221 clang::ASTFrontendAction::ExecuteAction() 
/home/ivanmurashko/local/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1058:11
  #40 0x0000000006bdcc31 clang::CodeGenAction::ExecuteAction() 
/home/ivanmurashko/local/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:1045:5
  #41 0x0000000006279b4d clang::FrontendAction::Execute() 
/home/ivanmurashko/local/llvm-project/clang/lib/Frontend/FrontendAction.cpp:955:38
  #42 0x00000000061c3fe9 
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) 
/home/ivanmurashko/local/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:974:42
  #43 0x00000000063f9c5e 
clang::ExecuteCompilerInvocation(clang::CompilerInstance*) 
/home/ivanmurashko/local/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:278:38
  #44 0x0000000002603a03 cc1_main(llvm::ArrayRef<char const*>, char const*, 
void*) 
/home/ivanmurashko/local/llvm-project/clang/tools/driver/cc1_main.cpp:246:40
  #45 0x00000000025f8a39 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) 
/home/ivanmurashko/local/llvm-project/clang/tools/driver/driver.cpp:338:20
  #46 0x00000000025f9107 main 
/home/ivanmurashko/local/llvm-project/clang/tools/driver/driver.cpp:415:26
  #47 0x00007ffff668f493 __libc_start_main (/lib64/libc.so.6+0x23493)
  #48 0x00000000025f729e _start 
(/data/users/ivanmurashko/llvm-project/build/bin/clang-13+0x25f729e)


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D106583

Files:
  clang/lib/Sema/SemaTemplateDeduction.cpp


Index: clang/lib/Sema/SemaTemplateDeduction.cpp
===================================================================
--- clang/lib/Sema/SemaTemplateDeduction.cpp
+++ clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -4346,7 +4346,7 @@
     HasDeducedReturnType = true;
   }
 
-  if (!ArgFunctionType.isNull()) {
+  if (!ArgFunctionType.isNull() && !FunctionType.isNull()) {
     unsigned TDF =
         TDF_TopLevelParameterTypeList | TDF_AllowCompatibleFunctionType;
     // Deduce template arguments from the function type.


Index: clang/lib/Sema/SemaTemplateDeduction.cpp
===================================================================
--- clang/lib/Sema/SemaTemplateDeduction.cpp
+++ clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -4346,7 +4346,7 @@
     HasDeducedReturnType = true;
   }
 
-  if (!ArgFunctionType.isNull()) {
+  if (!ArgFunctionType.isNull() && !FunctionType.isNull()) {
     unsigned TDF =
         TDF_TopLevelParameterTypeList | TDF_AllowCompatibleFunctionType;
     // Deduce template arguments from the function type.
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to