[llvm-bugs] [Bug 42851] New: Segfault when evaluating generic lambda with lambda default parameter

via llvm-bugs llvm-bugs at lists.llvm.org
Wed Jul 31 13:08:18 PDT 2019


https://bugs.llvm.org/show_bug.cgi?id=42851

            Bug ID: 42851
           Summary: Segfault when evaluating generic lambda with lambda
                    default parameter
           Product: clang
           Version: trunk
          Hardware: PC
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++14
          Assignee: unassignedclangbugs at nondot.org
          Reporter: ldionne at apple.com
                CC: blitzrakete at gmail.com, erik.pilkington at gmail.com,
                    llvm-bugs at lists.llvm.org, richard-llvm at metafoo.co.uk

The following code causes Clang to assert (when built with assertions enabled,
obviously):

    $ cat <<EOF | clang++ -xc++ - -std=c++14 -fsyntax-only
    int main() {
      auto apply = [](auto, void(*)() = []{}) { };
      apply(1);
    }
    EOF

Produces this output:

    Assertion failed: (isDependentContext() && "cannot iterate dependent
diagnostics of non-dependent context"), function ddiags, file
<snip>/clang-tot/clang/include/clang/AST/DependentDiagnostic.h, line 177.
    Stack dump:
    0.  Program arguments: <snip>/clang-tot/install/bin/clang-10 -cc1 -triple
x86_64-apple-macosx10.15.0 -Wdeprecated-objc-isa-usage
-Werror=deprecated-objc-isa-usage -fsyntax-only -disable-free -main-file-name -
-mrelocation-model pic -pic-level 2 -mthread-model posix -mframe-pointer=all
-masm-verbose -munwind-tables -target-cpu penryn -dwarf-column-info
-debugger-tuning=lldb -ggnu-pubnames -target-linker-version 512.4 -resource-dir
<snip>/clang-tot/install/lib/clang/10.0.0 -stdlib=libc++ -internal-isystem
<snip>/clang-tot/install/bin/../include/c++/v1 -internal-isystem
/usr/include/c++/v1 -internal-isystem /usr/local/include -internal-isystem
<snip>/clang-tot/install/lib/clang/10.0.0/include -internal-externc-isystem
/usr/include -std=c++14 -fdeprecated-macro -fdebug-compilation-dir <snip>
-ferror-limit 19 -fmessage-length 211 -stack-protector 1 -fblocks
-fencode-extended-block-signature -fregister-global-dtors-with-atexit
-fobjc-runtime=macosx-10.15.0 -fcxx-exceptions -fexceptions -fmax-type-align=16
-fdiagnostics-show-option -fcolor-diagnostics -x c++ -
    1.  <stdin>:3:10: current parser token ')'
    2.  <stdin>:1:12: parsing function body 'main'
    3.  <stdin>:1:12: in compound statement ('{}')
    0  clang-10                 0x0000000105d8c775
llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 37
    1  clang-10                 0x0000000105d8b905
llvm::sys::RunSignalHandlers() + 85
    2  clang-10                 0x0000000105d8cd68 SignalHandler(int) + 264
    3  libsystem_platform.dylib 0x00007fff6d809b1d _sigtramp + 29
    4  libsystem_platform.dylib 0x0000000000000e60 _sigtramp +
18446603338679022432
    5  libsystem_c.dylib        0x00007fff6d6df91c abort + 120
    6  libsystem_c.dylib        0x00007fff6d6debd6 err + 0
    7  clang-10                 0x0000000108eef413
clang::Sema::PerformDependentDiagnostics(clang::DeclContext const*,
clang::MultiLevelTemplateArgumentList const&) (.cold.1) + 35
    8  clang-10                 0x000000010779dcb6
clang::Sema::PerformDependentDiagnostics(clang::DeclContext const*,
clang::MultiLevelTemplateArgumentList const&) + 102
    9  clang-10                 0x0000000107778c18
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformLambdaExpr(clang::LambdaExpr*) +
4280
    10 clang-10                 0x0000000107763255
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) + 2309
    11 clang-10                 0x000000010775c934
clang::Sema::SubstParmVarDecl(clang::ParmVarDecl*,
clang::MultiLevelTemplateArgumentList const&, int, llvm::Optional<unsigned
int>, bool) + 1236
    12 clang-10                 0x000000010775d74d
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformFunctionTypeParams(clang::SourceLocation,
llvm::ArrayRef<clang::ParmVarDecl*>, clang::QualType const*,
clang::FunctionType::ExtParameterInfo const*,
llvm::SmallVectorImpl<clang::QualType>&,
llvm::SmallVectorImpl<clang::ParmVarDecl*>*,
clang::Sema::ExtParameterInfoBuilder&) + 1533
    13 clang-10                 0x000000010775b739
clang::Sema::SubstFunctionDeclType(clang::TypeSourceInfo*,
clang::MultiLevelTemplateArgumentList const&, clang::SourceLocation,
clang::DeclarationName, clang::CXXRecordDecl*, clang::Qualifiers) + 1977
    14 clang-10                 0x0000000107795e9e
clang::TemplateDeclInstantiator::SubstFunctionType(clang::FunctionDecl*,
llvm::SmallVectorImpl<clang::ParmVarDecl*>&) + 254
    15 clang-10                 0x0000000107793642
clang::TemplateDeclInstantiator::VisitCXXMethodDecl(clang::CXXMethodDecl*,
clang::TemplateParameterList*,
llvm::Optional<clang::ASTTemplateArgumentListInfo const*>) + 674
    16 clang-10                 0x000000010779b576
clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*,
clang::MultiLevelTemplateArgumentList const&) + 150
    17 clang-10                 0x000000010771c38c
clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*,
llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int,
clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&,
llvm::SmallVectorImpl<clang::Sema::OriginalCallArg> const*, bool,
llvm::function_ref<bool ()>) + 2636
    18 clang-10                 0x000000010771db50
clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*,
clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>,
clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool,
llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>) + 2320
    19 clang-10                 0x000000010761a669
clang::Sema::AddMethodTemplateCandidate(clang::FunctionTemplateDecl*,
clang::DeclAccessPair, clang::CXXRecordDecl*, clang::TemplateArgumentListInfo*,
clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>,
clang::OverloadCandidateSet&, bool, bool) + 489
    20 clang-10                 0x000000010761adc7
clang::Sema::AddMethodCandidate(clang::DeclAccessPair, clang::QualType,
clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>,
clang::OverloadCandidateSet&, bool) + 215
    21 clang-10                 0x000000010763371b
clang::Sema::BuildCallToObjectOfClassType(clang::Scope*, clang::Expr*,
clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>,
clang::SourceLocation) + 1003
    22 clang-10                 0x0000000107401ca7
clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation,
llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool)
+ 1959
    23 clang-10                 0x0000000107419349
clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation,
llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) + 41
    24 clang-10                 0x000000010709b489
clang::Parser::ParsePostfixExpressionSuffix(clang::ActionResult<clang::Expr*,
true>) + 3897
    25 clang-10                 0x00000001070a0938
clang::Parser::ParseCastExpression(bool, bool, bool&,
clang::Parser::TypeCastState, bool) + 18472
    26 clang-10                 0x0000000107098c26
clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) + 166
    27 clang-10                 0x0000000107098b5e
clang::Parser::ParseExpression(clang::Parser::TypeCastState) + 14
    28 clang-10                 0x00000001070e745b
clang::Parser::ParseExprStatement(clang::Parser::ParsedStmtContext) + 75
    29 clang-10                 0x00000001070e59af
clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*,
32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*,
clang::Parser::ParsedAttributesWithRange&) + 943
    30 clang-10                 0x00000001070e547c
clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*,
32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*) + 188
    31 clang-10                 0x00000001070ed54d
clang::Parser::ParseCompoundStatementBody(bool) + 1725
    32 clang-10                 0x00000001070ee0d4
clang::Parser::ParseFunctionStatementBody(clang::Decl*,
clang::Parser::ParseScope&) + 180
    33 clang-10                 0x0000000107107373
clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&,
clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) +
1971
    34 clang-10                 0x000000010706fcb5
clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&,
clang::DeclaratorContext, clang::SourceLocation*, clang::Parser::ForRangeInit*)
+ 2053
    35 clang-10                 0x0000000107106885
clang::Parser::ParseDeclOrFunctionDefInternal(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec&, clang::AccessSpecifier) + 693
    36 clang-10                 0x00000001071062c3
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*, clang::AccessSpecifier) + 371
    37 clang-10                 0x0000000107104d30
clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*) + 2704
    38 clang-10                 0x0000000107102f96
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool)
+ 1126
    39 clang-10                 0x0000000107102a2a
clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&) +
42
    40 clang-10                 0x000000010705bf5c
clang::ParseAST(clang::Sema&, bool, bool) + 444
    41 clang-10                 0x00000001064291f4
clang::FrontendAction::Execute() + 84
    42 clang-10                 0x00000001063dc358
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 1528
    43 clang-10                 0x000000010649a313
clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 1811
    44 clang-10                 0x0000000104239ff7 cc1_main(llvm::ArrayRef<char
const*>, char const*, void*) + 2375
    45 clang-10                 0x0000000104237856 main + 10662
    46 libdyld.dylib            0x00007fff6d6097a9 start + 1
    47 libdyld.dylib            0x000000000000003d start + 18446603338681116821
    clang-10: error: unable to execute command: Abort trap: 6
    clang-10: error: clang frontend command failed due to signal (use -v to see
invocation)
    clang version 10.0.0 (<snip> c940adeddb86dfccfcbb2eb3fedd0deb0b3640e1)
    Target: x86_64-apple-darwin19.0.0
    Thread model: posix
    InstalledDir: <snip>/clang-tot/install/bin
    clang-10: note: diagnostic msg: PLEASE submit a bug report to
https://bugs.llvm.org/ and include the crash backtrace, preprocessed source,
and associated run script.
    clang-10: note: diagnostic msg: Error generating preprocessed source(s) -
ignoring input from stdin.
    clang-10: note: diagnostic msg: Error generating preprocessed source(s) -
no preprocessable inputs.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20190731/6931fa1e/attachment-0001.html>


More information about the llvm-bugs mailing list