Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SR-4272] Assertion failed: ((HadError || !M.is<SourceFile*>() || M.get<SourceFile*>()->ASTStage < SourceFile::TypeChecked) && "UnresolvedDot" "in wrong phase" #46855

Closed
dabrahams opened this issue Mar 17, 2017 · 15 comments
Labels
bug A deviation from expected or documented behavior. Also: expected but undesirable behavior. compiler The Swift compiler in itself crash Bug: A crash, i.e., an abnormal termination of software type checker Area → compiler: Semantic analysis

Comments

@dabrahams
Copy link
Collaborator

Previous ID SR-4272
Radar rdar://problem/31115729
Original Reporter @dabrahams
Type Bug
Status Resolved
Resolution Cannot Reproduce
Additional Detail from JIRA
Votes 0
Component/s Compiler
Labels Bug, CompilerCrash, TypeChecker
Assignee None
Priority Medium

md5: 73a52146b47d89cc39d6ae48f10280cc

is duplicated by:

  • SR-4314 Assertion failed: ((HadError || !M.is<SourceFile*>() || M.get<SourceFile*>()->ASTStage < SourceFile::TypeChecked) && "UnresolvedDot" "in wrong phase")

relates to:

  • SR-1725 Assertion failed: ((HadError || !M.is<SourceFile*>() || M.get<SourceFile*>()->ASTStage < SourceFile::TypeChecked) && "UnresolvedDot" "in wrong phase")
  • SR-4314 Assertion failed: ((HadError || !M.is<SourceFile*>() || M.get<SourceFile*>()->ASTStage < SourceFile::TypeChecked) && "UnresolvedDot" "in wrong phase")
  • SR-1725 Assertion failed: ((HadError || !M.is<SourceFile*>() || M.get<SourceFile*>()->ASTStage < SourceFile::TypeChecked) && "UnresolvedDot" "in wrong phase")
  • SR-3053 UnresolvedDotExpr not resolved by type checking (leads to crash)

Issue Description:

$ git fetch https://github.com/dabrahams/swift refs/bugs/unresolved-dot-in-wrong-phase:BUG && git checkout BUG

Build the compiler for this crash:

/Users/dave/src/s/swift/utils/build-script --distcc --skip-build-ios-device --skip-build-tvos-device --skip-build-compiler-rt --debug-swift-stdlib --skip-build-benchmarks --release --swift-stdlib-assertions --swift-stdlib-build-type=Debug --

+ mkdir -p /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert
+ env HOST_VARIABLE_macosx_x86_64__SWIFT_BENCHMARK_TARGETS=swift-benchmark-macosx-x86_64 HOST_VARIABLE_macosx_x86_64__SWIFT_RUN_BENCHMARK_TARGETS=check-swift-benchmark-macosx-x86_64 'HOST_VARIABLE_macosx_x86_64__SWIFT_SDKS=IOS IOS_SIMULATOR OSX TVOS TVOS_SIMULATOR WATCHOS WATCHOS_SIMULATOR' HOST_VARIABLE_macosx_x86_64__SWIFT_STDLIB_TARGETS=swift-test-stdlib-macosx-x86_64 HOST_VARIABLE_macosx_x86_64__SWIFT_TEST_TARGETS= caffeinate /Users/Shared/dabrahams/s/swift/utils/build-script-impl --workspace /Users/Shared/dabrahams/s --build-dir /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert --install-prefix /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr --host-target macosx-x86_64 --stdlib-deployment-targets 'macosx-x86_64 iphonesimulator-i386 iphonesimulator-x86_64 appletvsimulator-x86_64 watchsimulator-i386 iphoneos-armv7 iphoneos-armv7s iphoneos-arm64 appletvos-arm64 watchos-armv7k' --host-cc /Applications/Xcode-8W109m.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang --host-cxx /Applications/Xcode-8W109m.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ --darwin-xcrun-toolchain default --darwin-deployment-version-osx=10.9 --darwin-deployment-version-ios=7.0 --darwin-deployment-version-tvos=9.0 --darwin-deployment-version-watchos=2.0 --cmake /Users/dave/brew/bin/cmake --cmark-build-type Release --llvm-build-type Release --swift-build-type Release --swift-stdlib-build-type Debug --lldb-build-type Release --foundation-build-type Release --libdispatch-build-type Release --libicu-build-type Release --xctest-build-type Release --swiftpm-build-type Release --swift-enable-assertions true --swift-stdlib-enable-assertions true --swift-analyze-code-coverage false --cmake-generator Ninja --build-jobs 8 '--common-cmake-options=-G Ninja -DCMAKE_C_COMPILER:PATH=/Users/dave/brew/bin/distcc -DCMAKE_C_COMPILER_ARG1=/Applications/Xcode-8W109m.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -DCMAKE_CXX_COMPILER:PATH=/Users/dave/brew/bin/distcc -DCMAKE_CXX_COMPILER_ARG1=/Applications/Xcode-8W109m.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -DCMAKE_MAKE_PROGRAM=/Users/dave/brew/bin/ninja' --build-args=-j112 --cmark-cmake-options= '--llvm-cmake-options=-DLLVM_ENABLE_ASSERTIONS=TRUE -DLLVM_TARGETS_TO_BUILD=X86;ARM;AArch64;PowerPC;SystemZ' '--swift-cmake-options=-DSWIFT_STDLIB_ENABLE_SIL_OWNERSHIP=FALSE -DCMAKE_EXPORT_COMPILE_COMMANDS=TRUE -DSWIFT_FORCE_OPTIMIZED_TYPECHECKER=FALSE' --build-stdlib-deployment-targets all --ninja-bin=/Users/dave/brew/bin/ninja --distcc --distcc-pump=/Users/dave/brew/bin/pump --skip-build-benchmarks --skip-build-foundation --skip-build-xctest --skip-build-lldb --skip-build-llbuild --skip-build-libdispatch --skip-build-libicu --skip-build-swiftpm --skip-build-playgroundlogger --skip-build-playgroundsupport --build-swift-dynamic-stdlib --build-swift-dynamic-sdk-overlay --skip-build-ios-device --skip-build-ios-simulator --skip-build-tvos-device --skip-build-tvos-simulator --skip-build-watchos-device --skip-build-watchos-simulator --skip-build-android --skip-test-swift --skip-test-cmark --skip-test-lldb --skip-test-llbuild --skip-test-swiftpm --skip-test-xctest --skip-test-foundation --skip-test-libdispatch --skip-test-libicu --skip-test-playgroundlogger --skip-test-playgroundsupport --skip-test-linux --skip-test-freebsd --skip-test-cygwin --skip-test-osx --skip-test-ios-host --skip-test-ios-simulator --skip-test-tvos-host --skip-test-tvos-simulator --skip-test-watchos-host --skip-test-watchos-simulator --skip-test-android-host --skip-test-benchmarks --skip-test-optimized --android-deploy-device-path /data/local/tmp --toolchain-prefix /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain --host-lipo /Applications/Xcode-8W109m.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo --host-libtool /Applications/Xcode-8W109m.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool --skip-build-compiler-rt --swift-stdlib-build-type=Debug --llvm-lit-args=-sv
Building the standard library for: swift-test-stdlib-macosx-x86_64
cmark: using standard linker
+ /Users/dave/brew/bin/pump /Users/dave/brew/bin/cmake --build /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/cmark-macosx-x86_64 -- -j112 all
__________Using distcc-pump from /Users/dave/brew/bin/../Cellar/distcc-swift/r796/bin
__________Using       12 distcc servers in pump mode
ninja: no work to do.
__________Shutting down distcc-pump include server
llvm: using standard linker
symlinking the system headers (/Applications/Xcode-8W109m.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../../usr/include/c++) into the local clang build directory (/Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/llvm-macosx-x86_64/include).
+ ln -s -f /Applications/Xcode-8W109m.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../../usr/include/c++ /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/llvm-macosx-x86_64/include
+ /Users/dave/brew/bin/pump /Users/dave/brew/bin/cmake --build /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/llvm-macosx-x86_64 -- -j112 all
__________Using distcc-pump from /Users/dave/brew/bin/../Cellar/distcc-swift/r796/bin
__________Using       12 distcc servers in pump mode
ninja: no work to do.
__________Shutting down distcc-pump include server
swift: using standard linker
+ /Users/dave/brew/bin/pump /Users/dave/brew/bin/cmake --build /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/swift-macosx-x86_64 -- -j112 all swift-test-stdlib-macosx-x86_64
__________Using distcc-pump from /Users/dave/brew/bin/../Cellar/distcc-swift/r796/bin
__________Using       12 distcc servers in pump mode
[1/78] Compiling /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/swift-macosx-x86_64/stdlib/public/core/macosx/x86_64/Swift.o
FAILED: stdlib/public/core/macosx/x86_64/Swift.o 
cd /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/swift-macosx-x86_64/stdlib/public/core && /usr/bin/python /Users/Shared/dabrahams/s/swift/utils/line-directive @/Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/swift-macosx-x86_64/stdlib/public/core/yXqvc.txt -- /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/swift-macosx-x86_64/./bin/swiftc -c -sdk /Applications/Xcode-8W109m.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -target x86_64-apple-macosx10.9 -resource-dir /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/swift-macosx-x86_64/./lib/swift -F /Applications/Xcode-8W109m.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/../../../Developer/Library/Frameworks -Onone -g -D INTERNAL_CHECKS_ENABLED -I /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/swift-macosx-x86_64/./lib/swift/macosx/x86_64 -module-cache-path /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/swift-macosx-x86_64/./module-cache -no-link-objc-runtime -nostdimport -parse-stdlib -module-name Swift -Xfrontend -group-info-path -Xfrontend /Users/Shared/dabrahams/s/swift/stdlib/public/core/GroupInfo.json -Xfrontend -sil-serialize-all -module-link-name swiftCore -force-single-frontend-invocation -Xcc -D__SWIFT_CURRENT_DYLIB=swiftCore -parse-as-library -o /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/swift-macosx-x86_64/stdlib/public/core/macosx/x86_64/Swift.o @/Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/swift-macosx-x86_64/stdlib/public/core/yXqvc.txt
Assertion failed: ((HadError || !M.is<SourceFile*>() || M.get<SourceFile*>()->ASTStage < SourceFile::TypeChecked) && "UnresolvedDot" "in wrong phase"), function walkToExprPre, file /Users/Shared/dabrahams/s/swift/include/swift/AST/ExprNodes.def, line 87.
0  swift                    0x000000010abd84e8 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 40
1  swift                    0x000000010abd8b96 SignalHandler(int) + 454
2  libsystem_platform.dylib 0x00007fff959d6b3a _sigtramp + 26
3  swift                    0x00000001087ef484 bool llvm::function_ref<bool (swift::Type)>::callback_fn<(anonymous namespace)::Verifier::verifyChecked(swift::Type, llvm::SmallPtrSet<swift::ArchetypeType*, 4u>&)::'lambda'(swift::Type)>(long, swift::Type) + 36
4  libsystem_c.dylib        0x00007fff9585b420 abort + 129
5  libsystem_c.dylib        0x00007fff95822893 basename_r + 0
6  swift                    0x00000001087e7a07 (anonymous namespace)::Verifier::walkToExprPre(swift::Expr*) + 263
7  swift                    0x00000001087fabbe swift::ASTVisitor<(anonymous namespace)::Traversal, swift::Expr*, swift::Stmt*, bool, swift::Pattern*, bool, void>::visit(swift::Stmt*) + 910
8  swift                    0x00000001087fa9ed swift::ASTVisitor<(anonymous namespace)::Traversal, swift::Expr*, swift::Stmt*, bool, swift::Pattern*, bool, void>::visit(swift::Stmt*) + 445
9  swift                    0x00000001087fd0e0 (anonymous namespace)::Traversal::visitAbstractFunctionDecl(swift::AbstractFunctionDecl*) + 1232
10 swift                    0x00000001087f69d8 (anonymous namespace)::Traversal::doIt(swift::Decl*) + 376
11 swift                    0x00000001087fcb94 (anonymous namespace)::Traversal::visitNominalTypeDecl(swift::NominalTypeDecl*) + 900
12 swift                    0x00000001087f69c7 (anonymous namespace)::Traversal::doIt(swift::Decl*) + 359
13 swift                    0x00000001087f684b swift::Decl::walk(swift::ASTWalker&) + 27
14 swift                    0x00000001088799ba swift::SourceFile::walk(swift::ASTWalker&) + 170
15 swift                    0x00000001087e739b swift::verify(swift::SourceFile&) + 59
16 swift                    0x000000010876f70f swift::performTypeChecking(swift::SourceFile&, swift::TopLevelContext&, swift::OptionSet<swift::TypeCheckingFlags, unsigned int>, unsigned int, unsigned int) + 2047
17 swift                    0x0000000108369f19 swift::CompilerInstance::performSema() + 3897
18 swift                    0x00000001078d75bc swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 4380
19 swift                    0x0000000107894cd0 main + 3312
20 libdyld.dylib            0x00007fff957c7235 start + 1
Stack dump:
0.  Program arguments: /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/swift-macosx-x86_64/bin/swift -frontend -c -filelist /var/folders/k9/nzq6k4f57xb5vw8wrgk_7cvh0000gn/T/sources-be969e -disable-objc-attr-requires-foundation-module -target x86_64-apple-macosx10.9 -enable-objc-interop -sdk /Applications/Xcode-8W109m.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -I /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/swift-macosx-x86_64/./lib/swift/macosx/x86_64 -F /Applications/Xcode-8W109m.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/../../../Developer/Library/Frameworks -g -module-cache-path /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/swift-macosx-x86_64/./module-cache -module-link-name swiftCore -nostdimport -parse-stdlib -resource-dir /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/swift-macosx-x86_64/./lib/swift -D INTERNAL_CHECKS_ENABLED -group-info-path /Users/Shared/dabrahams/s/swift/stdlib/public/core/GroupInfo.json -sil-serialize-all -Xcc -D__SWIFT_CURRENT_DYLIB=swiftCore -Onone -parse-as-library -module-name Swift -o /Users/Shared/dabrahams/s/build/Ninja-ReleaseAssert+stdlib-DebugAssert/swift-macosx-x86_64/stdlib/public/core/macosx/x86_64/Swift.o 
1.  While walking into decl '_TranscodedView' at /Users/Shared/dabrahams/s/swift/stdlib/public/core/UnicodeViews.swift:213:8
2.  While walking into body of 'index' at /Users/Shared/dabrahams/s/swift/stdlib/public/core/UnicodeViews.swift:239:3
<unknown>:0: error: unable to execute command: Abort trap: 6
<unknown>:0: error: compile command failed due to signal 6 (use -v to see invocation)

other hashes:

clang f95defb935 Merge remote-tracking branch 'origin/swift-4.0-branch' into stable
cmark d875488 Merge pull request #4 from llvm-beanz/generate-cmark-exports
compiler-rt d8d2f6422 Merge remote-tracking branch 'origin/swift-4.0-branch' into stable
llbuild 360bcdd [devel] Add a Vagrantfile.
lldb 9ca9758f9 Merge pull request #149 from bitjammer/swift-typealias-equal-sourceloc
llvm cf5ed9132f2 Merge remote-tracking branch 'origin/swift-4.0-branch' into stable
ninja 0b0374e Merge pull request #1255 from tchajed/bind-localhost
swift f282dc3 [stdlib] UnicodeStorage => _UnicodeViews
swift-corelibs-foundation 3c78f9c Merge pull request #916 from swizzlr/master
swift-corelibs-libdispatch 1cc64e1 Review comments.
swift-corelibs-xctest 50cc074 XCTestAssertNoThrow (#184)
swift-integration-tests 8ae3586 Merge pull request #18 from apple/disable-lldb-test
swift-xcode-playground-support 9e980f2 Temporary disable test to get the incremental bot blue again
swiftpm 154fdea Merge pull request #1017 from aciidb0mb3r/non-throwing-workspace

@belkadan
Copy link
Contributor

@belkadan
Copy link
Contributor

@swift-ci create

@slavapestov
Copy link
Member

return Base(
   _UnicodeViews(codeUnits[start...]).scalarsTranscoded(to: ToEncoding.self)

This is clearly invalid – why aren't we diagnosing it?

@dabrahams
Copy link
Collaborator Author

Why is it clearly invalid? Looks fine to me.

@slavapestov
Copy link
Member

What is `start...`? Do we have a postfix `...` operator now? I should probably learn the language before trying to implement it one day.

@dabrahams
Copy link
Collaborator Author

It's defined in the branch I said to reproduce this with.

@belkadan
Copy link
Contributor

The later SR-4314 has a reduced test case with the same backtrace.

@harlanhaskins
Copy link
Collaborator

I hit this crash today with this smaller reproducer.

struct ArrayWrapper<Element>: Collection
    where Element: Comparable {
    private var store = [Element]()

    typealias SubSequence = ArrayWrapper<Element>

    init(_ values: [Element]) {
      store = values
    }

    var startIndex: Int {
        return store.startIndex
    }

    var endIndex: Int {
        return store.endIndex
    }

    subscript(position: Int) -> Iterator.Element {
        return store[index]
    }

    func makeIterator() -> AnyIterator<Element> {
        var index = 0
        return AnyIterator {
            guard index < self.store.count else { return nil }
            defer { index += 1 }
            return self.store[index]
        }
    }
}

print(ArrayWrapper([22, 3, 1, 44, 6, 22]))
Stack dump:
0.  Program arguments: /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2017-03-23-a.xctoolchain/usr/bin/swift -frontend -interpret /tmp/collection.swift -enable-objc-interop -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -color-diagnostics -module-name collection 
1.  While walking into decl 'ArrayWrapper' at /tmp/collection.swift:3:1
2.  While walking into body of getter for subscript(_:) at /tmp/collection.swift:21:5

@rudkx
Copy link
Member

rudkx commented May 22, 2017

This appears to have been fixed somewhere along the way, because it no longer reproduces.

@slavapestov
Copy link
Member

@rudkx or @harlanhaskins, do you mind adding Harlan's reduced test case to validation-test/compiler_crashers_2_fixed? It would be good to ensure it doesn't break again, and it exercises a good cross-section of the type checker.

@slavapestov
Copy link
Member

Actually never mind, I'll stop being lazy and do it myself :-)

@slavapestov
Copy link
Member

@rudkx or @DougGregor – is this expected, though?

/Users/slava/new/swift/validation-test/compiler_crashers_2_fixed/0096-sr4272.swift:21:33: error: 'Iterator' is ambiguous for type lookup in this context
    subscript(position: Int) -> Iterator.Element {
                                ^~~~~~~~
Swift.Sequence:121:20: note: found this candidate
    associatedtype Iterator : IteratorProtocol
                   ^
Swift.Collection:213:20: note: found this candidate
    associatedtype Iterator = IndexingIterator<Self>
                   ^
/Users/slava/new/swift/validation-test/compiler_crashers_2_fixed/0096-sr4272.swift:22:22: error: cannot convert value of type '(Element) -> Int?' to expected argument type '(UnboundedRange_) -> ()'
        return store[index]
                     ^~~~~

@rudkx
Copy link
Member

rudkx commented May 23, 2017

I didn't hit that when I tried that test case earlier today.

@slavapestov
Copy link
Member

It's failing with latest master. Could be a recent regression?

@rudkx
Copy link
Member

rudkx commented May 23, 2017

Okay, now I'm not totally confident that I didn't see some errors when I tried to reproduce this, just that I didn't see the assert.

@swift-ci swift-ci transferred this issue from apple/swift-issues Apr 25, 2022
@AnthonyLatsis AnthonyLatsis added the crash Bug: A crash, i.e., an abnormal termination of software label Dec 12, 2022
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug A deviation from expected or documented behavior. Also: expected but undesirable behavior. compiler The Swift compiler in itself crash Bug: A crash, i.e., an abnormal termination of software type checker Area → compiler: Semantic analysis
Projects
None yet
Development

No branches or pull requests

6 participants