[llvm-bugs] [Bug 25600] New: Clang crashes on c++14 bind_last implementation when autocasting from const char* to std::string &&

via llvm-bugs llvm-bugs at lists.llvm.org
Sun Nov 22 01:34:27 PST 2015


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

            Bug ID: 25600
           Summary: Clang crashes on c++14 bind_last implementation when
                    autocasting from const char* to std::string &&
           Product: clang
           Version: 3.6
          Hardware: All
                OS: MacOS X
            Status: NEW
          Severity: normal
          Priority: P
         Component: C++14
          Assignee: unassignedclangbugs at nondot.org
          Reporter: marek.kuzora at gmail.com
                CC: llvm-bugs at lists.llvm.org
    Classification: Unclassified

bind_last implementation:
  template <class TFunction, class... TArgs>
  auto bind_last(TFunction &&fn, TArgs &&... args)
  {
    return [=] (auto &&... xargs)
    {
      return fn(std::forward<decltype(xargs)>(xargs)..., args...);
    };
  }

Function to bind:
  float string_fn(const std::string &s1, int, const std::string &s2)
  {
    return 0.5f;
  }

Works fine:
bind_last(string_fn, std::string("dada"));

Crashes clang:
bind_last(string_fn, "dada");

Compile script:
 "/usr/local/Cellar/llvm/HEAD/bin/clang-3.6" "-cc1" "-triple"
"x86_64-apple-macosx10.10.0" "-emit-obj" "-mrelax-all" "-disable-free"
"-main-file-name" "main.cpp" "-mrelocation-model" "pic" "-pic-level" "2"
"-mthread-model" "posix" "-mdisable-fp-elim" "-masm-verbose" "-munwind-tables"
"-target-cpu" "core2" "-target-linker-version" "253.6" "-gdwarf-2"
"-dwarf-column-info" "-stdlib=libc++" "-O0" "-std=c++1y" "-fdeprecated-macro"
"-ferror-limit" "19" "-fmessage-length" "160" "-stack-protector" "1"
"-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-10.10.0"
"-fencode-extended-block-signature" "-fcxx-exceptions" "-fexceptions"
"-fmax-type-align=16" "-fdiagnostics-show-option" "-fcolor-diagnostics" "-x"
"c++" "main-607c02.cpp"

Clang crash output:
Assertion failed: ((ND->isUsed(false) || !isa<VarDecl>(ND) ||
!E->getLocation().isValid()) && "Should not use decl without marking it
used!"), function EmitDeclRefLValue, file
/tmp/llvm20151118-20678-ks7avo/llvm-3.6.2.src/tools/clang/lib/CodeGen/CGExpr.cpp,
line 1945.
0  clang-3.6                0x00000001034c1e79
llvm::sys::PrintStackTrace(__sFILE*) + 57
1  clang-3.6                0x00000001034c23d6 SignalHandler(int) + 218
2  libsystem_platform.dylib 0x00007fff922eff1a _sigtramp + 26
3  clang-3.6                0x0000000104bd1bac guard variable for
isAllowedInitiallyIDChar(unsigned int, clang::LangOptions
const&)::C99DisallowedInitialIDChars + 85140
4  clang-3.6                0x00000001034c2264 abort + 22
5  clang-3.6                0x00000001034c224e abort + 0
6  clang-3.6                0x00000001038754f8
clang::CodeGen::CodeGenFunction::EmitDeclRefLValue(clang::DeclRefExpr const*) +
2392
7  clang-3.6                0x000000010386f11f
clang::CodeGen::CodeGenFunction::EmitLValue(clang::Expr const*) + 649
8  clang-3.6                0x0000000103873cb8
clang::CodeGen::CodeGenFunction::EmitCheckedLValue(clang::Expr const*,
clang::CodeGen::CodeGenFunction::TypeCheckKind) + 126
9  clang-3.6                0x0000000103898093 (anonymous
namespace)::ScalarExprEmitter::EmitLoadOfLValue(clang::Expr const*) + 39
10 clang-3.6                0x000000010389c80b
clang::StmtVisitorBase<clang::make_ptr, (anonymous
namespace)::ScalarExprEmitter, llvm::Value*>::Visit(clang::Stmt*) + 9901
11 clang-3.6                0x000000010389503a (anonymous
namespace)::ScalarExprEmitter::Visit(clang::Expr*) + 62
12 clang-3.6                0x000000010389503a (anonymous
namespace)::ScalarExprEmitter::Visit(clang::Expr*) + 62
13 clang-3.6                0x0000000103894fb9
clang::CodeGen::CodeGenFunction::EmitScalarExpr(clang::Expr const*, bool) + 133
14 clang-3.6                0x0000000103873d91
clang::CodeGen::CodeGenFunction::EmitArraySubscriptExpr(clang::ArraySubscriptExpr
const*, bool) + 71
15 clang-3.6                0x000000010386ef97
clang::CodeGen::CodeGenFunction::EmitLValue(clang::Expr const*) + 257
16 clang-3.6                0x0000000103873cb8
clang::CodeGen::CodeGenFunction::EmitCheckedLValue(clang::Expr const*,
clang::CodeGen::CodeGenFunction::TypeCheckKind) + 126
17 clang-3.6                0x0000000103898093 (anonymous
namespace)::ScalarExprEmitter::EmitLoadOfLValue(clang::Expr const*) + 39
18 clang-3.6                0x000000010389c80b
clang::StmtVisitorBase<clang::make_ptr, (anonymous
namespace)::ScalarExprEmitter, llvm::Value*>::Visit(clang::Stmt*) + 9901
19 clang-3.6                0x000000010389503a (anonymous
namespace)::ScalarExprEmitter::Visit(clang::Expr*) + 62
20 clang-3.6                0x000000010389503a (anonymous
namespace)::ScalarExprEmitter::Visit(clang::Expr*) + 62
21 clang-3.6                0x0000000103894fb9
clang::CodeGen::CodeGenFunction::EmitScalarExpr(clang::Expr const*, bool) + 133
22 clang-3.6                0x0000000103861b53
clang::CodeGen::CodeGenFunction::EmitScalarInit(clang::Expr const*,
clang::ValueDecl const*, clang::CodeGen::LValue, bool) + 411
23 clang-3.6                0x000000010384625d
EmitAggMemberInitializer(clang::CodeGen::CodeGenFunction&,
clang::CodeGen::LValue, clang::Expr*, llvm::Value*, clang::QualType,
llvm::ArrayRef<clang::VarDecl*>, unsigned int) + 1806
24 clang-3.6                0x0000000103845feb
EmitAggMemberInitializer(clang::CodeGen::CodeGenFunction&,
clang::CodeGen::LValue, clang::Expr*, llvm::Value*, clang::QualType,
llvm::ArrayRef<clang::VarDecl*>, unsigned int) + 1180
25 clang-3.6                0x0000000103845a86
clang::CodeGen::CodeGenFunction::EmitInitializerForField(clang::FieldDecl*,
clang::CodeGen::LValue, clang::Expr*, llvm::ArrayRef<clang::VarDecl*>) + 730
26 clang-3.6                0x0000000103889f23
clang::CodeGen::CodeGenFunction::EmitLambdaExpr(clang::LambdaExpr const*,
clang::CodeGen::AggValueSlot) + 735
27 clang-3.6                0x000000010387e68d
clang::CodeGen::CodeGenFunction::EmitAggExpr(clang::Expr const*,
clang::CodeGen::AggValueSlot) + 525
28 clang-3.6                0x0000000103885855
clang::CodeGen::CodeGenFunction::EmitCXXConstructExpr(clang::CXXConstructExpr
const*, clang::CodeGen::AggValueSlot) + 767
29 clang-3.6                0x000000010387e68d
clang::CodeGen::CodeGenFunction::EmitAggExpr(clang::Expr const*,
clang::CodeGen::AggValueSlot) + 525
30 clang-3.6                0x00000001038e5474
clang::CodeGen::CodeGenFunction::EmitReturnStmt(clang::ReturnStmt const&) + 736
31 clang-3.6                0x00000001038e8d16
clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt
const&, bool, clang::CodeGen::AggValueSlot) + 72
32 clang-3.6                0x00000001038fa2e7
clang::CodeGen::CodeGenFunction::EmitFunctionBody(clang::CodeGen::FunctionArgList&,
clang::Stmt const*) + 95
33 clang-3.6                0x00000001038fa869
clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl,
llvm::Function*, clang::CodeGen::CGFunctionInfo const&) + 1141
34 clang-3.6                0x000000010390490f
clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl,
llvm::GlobalValue*) + 1015
35 clang-3.6                0x00000001039024d4
clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl,
llvm::GlobalValue*) + 384
36 clang-3.6                0x00000001038ff3d4
clang::CodeGen::CodeGenModule::EmitDeferred() + 36
37 clang-3.6                0x00000001038ff0ba
clang::CodeGen::CodeGenModule::Release() + 14
38 clang-3.6                0x00000001038f6442
clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) + 114
39 clang-3.6                0x0000000103b64331 clang::ParseAST(clang::Sema&,
bool, bool) + 394
40 clang-3.6                0x0000000103654373 clang::FrontendAction::Execute()
+ 67
41 clang-3.6                0x0000000103631dfa
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 556
42 clang-3.6                0x000000010367fc1a
clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 2942
43 clang-3.6                0x00000001029d3d10 cc1_main(llvm::ArrayRef<char
const*>, char const*, void*) + 922
44 clang-3.6                0x00000001029d3295 main + 8166
45 libdyld.dylib            0x00007fff92c4a5c9 start + 1
Stack dump:
0.    Program arguments: /usr/local/Cellar/llvm/HEAD/bin/clang-3.6 -cc1 -triple
x86_64-apple-macosx10.10.0 -emit-obj -mrelax-all -disable-free -main-file-name
main.cpp -mrelocation-model pic -pic-level 2 -mthread-model posix
-mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2
-target-linker-version 253.6 -gdwarf-2 -dwarf-column-info -coverage-file
/Users/fierry/code/brain/cpp/app/bin/main.o -resource-dir
/usr/local/Cellar/llvm/HEAD/bin/../lib/clang/3.6.2 -include pch.h -I ../source/
-I
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1
-I
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include
-stdlib=libc++ -O0 -std=c++1y -fdeprecated-macro -fdebug-compilation-dir
/Users/fierry/code/brain/cpp/app -ferror-limit 19 -fmessage-length 160
-stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.10.0
-fencode-extended-block-signature -fcxx-exceptions -fexceptions
-fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -o bin/main.o
-x c++ main.cpp 
1.    <eof> parser at end of file
2.    Per-file LLVM IR generation
3.    ../source/mpl/bind.h:8:8: Generating code for declaration
'fierry::bind_last'
clang-3.6: error: unable to execute command: Illegal instruction: 4
clang-3.6: error: clang frontend command failed due to signal (use -v to see
invocation)
clang version 3.6.2 (tags/RELEASE_362/final)
Target: x86_64-apple-darwin14.5.0
Thread model: posix

-- 
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/20151122/6d994d33/attachment.html>


More information about the llvm-bugs mailing list