tree e2c6b1b1a4d55d9485c321466d0ecb4c4d903948
parent c47a4a66fe68b15f35346d8b0301b12ee58f0847
author practicalswift <practicalswift@users.noreply.github.com> 1481808661 +0100
committer practicalswift <practicalswift@users.noreply.github.com> 1481808661 +0100

[swiftc (104 vs. 5287)] Add crasher in swift::constraints::ConstraintSystem::getType(...)

Add test case for crash triggered in `swift::constraints::ConstraintSystem::getType(...)`.

Current number of unresolved compiler crashers: 104 (5287 resolved)

/cc @rudkx - just wanted to let you know that this crasher caused an assertion failure for the assertion `hasType(E) && "Expected type to have been set!"` added on 2016-12-11 by you in commit 1139f872 :-)

Assertion failure in [`lib/Sema/ConstraintSystem.h (line 1395)`](https://github.com/apple/swift/blob/master/lib/Sema/ConstraintSystem.h#L1395):

```
Assertion `hasType(E) && "Expected type to have been set!"' failed.

When executing: swift::Type swift::constraints::ConstraintSystem::getType(swift::Expr *)
```

Assertion context:

```
    return ExprTypes.find(E) != ExprTypes.end();
  }

  /// Get the type for an expression.
  Type getType(Expr *E) {
    assert(hasType(E) && "Expected type to have been set!");
    assert(ExprTypes[E]->isEqual(E->getType()) &&
           "Expected type in map to be the same type in expression!");
    return ExprTypes[E];
  }

```
Stack trace:

```
0 0x00000000034d8b48 llvm::sys::PrintStackTrace(llvm::raw_ostream&) (/path/to/swift/bin/swift+0x34d8b48)
1 0x00000000034d9286 SignalHandler(int) (/path/to/swift/bin/swift+0x34d9286)
2 0x00007f3cf7ee33e0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x113e0)
3 0x00007f3cf6611428 gsignal /build/glibc-Qz8a69/glibc-2.23/signal/../sysdeps/unix/sysv/linux/raise.c:54:0
4 0x00007f3cf661302a abort /build/glibc-Qz8a69/glibc-2.23/stdlib/abort.c:91:0
5 0x00007f3cf6609bd7 __assert_fail_base /build/glibc-Qz8a69/glibc-2.23/assert/assert.c:92:0
6 0x00007f3cf6609c82 (/lib/x86_64-linux-gnu/libc.so.6+0x2dc82)
7 0x0000000000bed9e4 swift::constraints::ConstraintSystem::getType(swift::Expr*) (/path/to/swift/bin/swift+0xbed9e4)
8 0x0000000000c8ba94 swift::ASTVisitor<(anonymous namespace)::ExprRewriter, swift::Expr*, void, void, void, void, void>::visit(swift::Expr*) (/path/to/swift/bin/swift+0xc8ba94)
9 0x0000000000c7ebd4 (anonymous namespace)::ExprRewriter::walkToExprPost(swift::Expr*) (/path/to/swift/bin/swift+0xc7ebd4)
10 0x0000000000c83751 (anonymous namespace)::ExprWalker::walkToExprPost(swift::Expr*) (/path/to/swift/bin/swift+0xc83751)
11 0x0000000000dd995c swift::Expr::walk(swift::ASTWalker&) (/path/to/swift/bin/swift+0xdd995c)
12 0x0000000000c7aac8 swift::constraints::ConstraintSystem::applySolution(swift::constraints::Solution&, swift::Expr*, swift::Type, bool, bool, bool) (/path/to/swift/bin/swift+0xc7aac8)
13 0x0000000000be9503 swift::TypeChecker::typeCheckExpression(swift::Expr*&, swift::DeclContext*, swift::TypeLoc, swift::ContextualTypePurpose, swift::OptionSet<swift::TypeCheckExprFlags, unsigned int>, swift::ExprTypeCheckListener*, swift::constraints::ConstraintSystem*) (/path/to/swift/bin/swift+0xbe9503)
14 0x0000000000bed180 swift::TypeChecker::typeCheckBinding(swift::Pattern*&, swift::Expr*&, swift::DeclContext*) (/path/to/swift/bin/swift+0xbed180)
15 0x0000000000bed33f swift::TypeChecker::typeCheckPatternBinding(swift::PatternBindingDecl*, unsigned int) (/path/to/swift/bin/swift+0xbed33f)
16 0x0000000000bff2b4 (anonymous namespace)::DeclChecker::visit(swift::Decl*) (/path/to/swift/bin/swift+0xbff2b4)
17 0x0000000000bff10d swift::TypeChecker::typeCheckDecl(swift::Decl*, bool) (/path/to/swift/bin/swift+0xbff10d)
18 0x0000000000c5c6d4 swift::ASTVisitor<(anonymous namespace)::StmtChecker, void, swift::Stmt*, void, void, void, void>::visit(swift::Stmt*) (/path/to/swift/bin/swift+0xc5c6d4)
19 0x0000000000c5aa93 swift::TypeChecker::typeCheckFunctionBodyUntil(swift::FuncDecl*, swift::SourceLoc) (/path/to/swift/bin/swift+0xc5aa93)
20 0x0000000000c5a8e3 swift::TypeChecker::typeCheckAbstractFunctionBodyUntil(swift::AbstractFunctionDecl*, swift::SourceLoc) (/path/to/swift/bin/swift+0xc5a8e3)
21 0x0000000000c5b601 swift::TypeChecker::typeCheckAbstractFunctionBody(swift::AbstractFunctionDecl*) (/path/to/swift/bin/swift+0xc5b601)
22 0x0000000000c6fc97 typeCheckFunctionsAndExternalDecls(swift::TypeChecker&) (/path/to/swift/bin/swift+0xc6fc97)
23 0x0000000000c708cb swift::performTypeChecking(swift::SourceFile&, swift::TopLevelContext&, swift::OptionSet<swift::TypeCheckingFlags, unsigned int>, unsigned int, unsigned int) (/path/to/swift/bin/swift+0xc708cb)
24 0x000000000098d176 swift::CompilerInstance::performSema() (/path/to/swift/bin/swift+0x98d176)
25 0x000000000047c4e6 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) (/path/to/swift/bin/swift+0x47c4e6)
26 0x000000000043ad87 main (/path/to/swift/bin/swift+0x43ad87)
27 0x00007f3cf65fc830 __libc_start_main /build/glibc-Qz8a69/glibc-2.23/csu/../csu/libc-start.c:325:0
28 0x00000000004381c9 _start (/path/to/swift/bin/swift+0x4381c9)
```
