Greg, This occurs when compiled with swiftc -g as well. In fact, I think 'swift build', when run by default, will compile with swiftc -g. It's only when you run 'swift build --configuration release' that it will compile without it.
$ swiftc --version Apple Swift version 3.1 (swift-3.1.1-RELEASE) Target: x86_64-apple-macosx10.9 $ swiftc -g main.swift $ ./main Hello, world! fatal error: unexpectedly found nil while unwrapping an Optional value Current stack trace: 0 libswiftCore.dylib 0x000000010edc7160 swift_reportError + 125 1 libswiftCore.dylib 0x000000010ede3ac0 _swift_stdlib_reportFatalError + 60 2 libswiftCore.dylib 0x000000010ebd4260 specialized specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> A) -> A + 342 3 libswiftCore.dylib 0x000000010ed4f120 partial apply for (_fatalErrorMessage(StaticString, StaticString, file : StaticString, line : UInt, flags : UInt32) -> Never).(closure #2) + 109 4 libswiftCore.dylib 0x000000010ebd4260 specialized specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> A) -> A + 342 5 libswiftCore.dylib 0x000000010ed01d00 specialized _fatalErrorMessage(StaticString, StaticString, file : StaticString, line : UInt, flags : UInt32) -> Never + 96 6 main 0x000000010eb91340 say(message : String?) -> () + 248 7 main 0x000000010eb911e0 main + 328 8 libdyld.dylib 0x00007fffb444d234 start + 1 Illegal instruction: 4 Note that lldb can symbolicate the result and identify the return value, by looking at the backtrace: $ lldb main (lldb) target create "main" Current executable set to 'main' (x86_64). (lldb) run Process 33032 launched: '/tmp/main' (x86_64) Hello, world! fatal error: unexpectedly found nil while unwrapping an Optional value 2017-05-03 10:41:17.340963+0100 main[33032:55100807] fatal error: unexpectedly found nil while unwrapping an Optional value Current stack trace: 0 libswiftCore.dylib 0x00000001002c1160 swift_reportError + 125 1 libswiftCore.dylib 0x00000001002ddac0 _swift_stdlib_reportFatalError + 60 2 libswiftCore.dylib 0x00000001000ce260 specialized specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> A) -> A + 342 3 libswiftCore.dylib 0x0000000100249120 partial apply for (_fatalErrorMessage(StaticString, StaticString, file : StaticString, line : UInt, flags : UInt32) -> Never).(closure #2) + 109 4 libswiftCore.dylib 0x00000001000ce260 specialized specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> A) -> A + 342 5 libswiftCore.dylib 0x00000001001fbd00 specialized _fatalErrorMessage(StaticString, StaticString, file : StaticString, line : UInt, flags : UInt32) -> Never + 96 6 main 0x0000000100001340 say(message : String?) -> () + 248 7 main 0x00000001000011e0 main + 328 8 libdyld.dylib 0x00007fffb444d234 start + 1 Process 33032 stopped * thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) frame #0: 0x00000001001fbd60 libswiftCore.dylib`function signature specialization <preserving fragile attribute, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, file : Swift.StaticString, line : Swift.UInt, flags : Swift.UInt32) -> Swift.Never + 96 libswiftCore.dylib`function signature specialization <preserving fragile attribute, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, file : Swift.StaticString, line : Swift.UInt, flags : Swift.UInt32) -> Swift.Never: -> 0x1001fbd60 <+96>: ud2 0x1001fbd62 <+98>: nopw %cs:(%rax,%rax) libswiftCore.dylib`protocol witness table accessor for <A> Swift.AnySequence<A> : Swift.Sequence in Swift: 0x1001fbd70 <+0>: pushq %rbp 0x1001fbd71 <+1>: movq %rsp, %rbp (lldb) bt * thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) * frame #0: 0x00000001001fbd60 libswiftCore.dylib`function signature specialization <preserving fragile attribute, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, file : Swift.StaticString, line : Swift.UInt, flags : Swift.UInt32) -> Swift.Never + 96 frame #1: 0x0000000100001438 main`say(message=nil) -> () at main.swift:5 frame #2: 0x0000000100001328 main`main at main.swift:8 frame #3: 0x00007fffb444d235 libdyld.dylib`start + 1 frame #4: 0x00007fffb444d235 libdyld.dylib`start + 1 I suspect this is because Swift is generating a .dSYM which is read by LLDB but either not read or not loaded by the swift runtime when producing the backtrace: $ find . . ./main ./main.dSYM ./main.dSYM/Contents ./main.dSYM/Contents/Info.plist ./main.dSYM/Contents/Resources ./main.dSYM/Contents/Resources/DWARF ./main.dSYM/Contents/Resources/DWARF/main ./main.swift Here's the main file, for repeatability: $ cat main.swift print("Hello, world!") let x: String? = nil func say(message: String?) { print(x!) // intentional crash } say(message: x) Alex > On 2 May 2017, at 22:43, Greg Parker <gpar...@apple.com> wrote: > > That doesn't look symbolicated. If it were symbolicated, and the build used > -g, you would have a file and line number for the main+345 frame. > > >> On May 2, 2017, at 2:31 PM, Nick Snyder via swift-users >> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote: >> >> In practice, I would need the stack trace first to figure out how to >> reproduce the issue, so lldb doesn't really help. >> >> How would I go about symbolicating this further on macOS (Xcode or >> otherwise)? >> >> From reading the docs it seems like the crash report I get is already >> completely symbolicated: >> https://developer.apple.com/library/content/technotes/tn2151/_index.html#//apple_ref/doc/uid/DTS40008184-CH1-SYMBOLICATION-_DETERMINING_WHETHER_A_CRASH_REPORT_IS_SYMBOLICATED >> >> <https://developer.apple.com/library/content/technotes/tn2151/_index.html#//apple_ref/doc/uid/DTS40008184-CH1-SYMBOLICATION-_DETERMINING_WHETHER_A_CRASH_REPORT_IS_SYMBOLICATED> >> >> On Tue, May 2, 2017 at 1:21 AM, Alex Blewitt <alb...@apple.com >> <mailto:alb...@apple.com>> wrote: >> If you can reproduce it, and run it under lldb, it will print the source >> line for you: >> >> $ lldb .build/debug/main >> (lldb) target create ".build/debug/main" >> ruCurrent executable set to '.build/debug/main' (x86_64). >> (lldb) run >> Process 19013 launched: '/private/tmp/main/.build/debug/main' (x86_64) >> Hello, world! >> fatal error: unexpectedly found nil while unwrapping an Optional value >> 2017-05-02 09:17:11.351608+0100 asdf[19013:54205130] fatal error: >> unexpectedly found nil while unwrapping an Optional value >> Current stack trace: >> 0 libswiftCore.dylib 0x00000001002c1160 swift_reportError >> + 125 >> 1 libswiftCore.dylib 0x00000001002ddac0 >> _swift_stdlib_reportFatalError + 60 >> 2 libswiftCore.dylib 0x00000001000ce260 specialized >> specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> >> A) -> A + 342 >> 3 libswiftCore.dylib 0x0000000100249120 partial apply for >> (_fatalErrorMessage(StaticString, StaticString, file : StaticString, line : >> UInt, flags : UInt32) -> Never).(closure #2) + 109 >> 4 libswiftCore.dylib 0x00000001000ce260 specialized >> specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> >> A) -> A + 342 >> 5 libswiftCore.dylib 0x00000001001fbd00 specialized >> _fatalErrorMessage(StaticString, StaticString, file : StaticString, line : >> UInt, flags : UInt32) -> Never + 96 >> 6 main 0x0000000100001340 say(message : >> String?) -> () + 248 >> 7 main 0x00000001000011e0 main + 328 >> 8 libdyld.dylib 0x00007fffb444d234 start + 1 >> Process 19013 stopped >> * thread #1, queue = 'com.apple.main-thread', stop reason = >> EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) >> frame #0: 0x00000001001fbd60 libswiftCore.dylib`function signature >> specialization <preserving fragile attribute, Arg[2] = Dead, Arg[3] = Dead> >> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, file : >> Swift.StaticString, line : Swift.UInt, flags : Swift.UInt32) -> Swift.Never >> + 96 >> libswiftCore.dylib`function signature specialization <preserving fragile >> attribute, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage >> (Swift.StaticString, Swift.StaticString, file : Swift.StaticString, line : >> Swift.UInt, flags : Swift.UInt32) -> Swift.Never: >> -> 0x1001fbd60 <+96>: ud2 >> 0x1001fbd62 <+98>: nopw %cs:(%rax,%rax) >> >> libswiftCore.dylib`protocol witness table accessor for <A> >> Swift.AnySequence<A> : Swift.Sequence in Swift: >> 0x1001fbd70 <+0>: pushq %rbp >> 0x1001fbd71 <+1>: movq %rsp, %rbp >> >> (lldb) bt >> * thread #1, queue = 'com.apple.main-thread', stop reason = >> EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) >> * frame #0: 0x00000001001fbd60 libswiftCore.dylib`function signature >> specialization <preserving fragile attribute, Arg[2] = Dead, Arg[3] = Dead> >> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, file : >> Swift.StaticString, line : Swift.UInt, flags : Swift.UInt32) -> Swift.Never >> + 96 >> frame #1: 0x0000000100001438 main`say(message=nil) -> () at main.swift:5 >> frame #2: 0x0000000100001328 main`main at main.swift:8 >> frame #3: 0x00007fffb444d235 libdyld.dylib`start + 1 >> frame #4: 0x00007fffb444d235 libdyld.dylib`start + 1 >> >> There is a symbolication tool available for Linux in the >> ~/swift/utils/symbolicate-linux-fatal, and Xcode can do the same >> symbolication for you as well. >> >> Alex >> >>> On 28 Apr 2017, at 22:28, Nick Snyder via swift-users >>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote: >>> >>> I have a simple main.swift that looks like this: >>> >>> ``` >>> print("Hello, world!") >>> let x: String? = nil >>> >>> func say(message: String?) { >>> print(x!) // intentional crash >>> } >>> >>> say(message: x) >>> ``` >>> >>> Running this results in the crash >>> >>> ``` >>> $ swift build && ./.build/debug/hello >>> Hello, world! >>> fatal error: unexpectedly found nil while unwrapping an Optional value >>> Current stack trace: >>> 0 libswiftCore.dylib 0x0000000110120130 >>> swift_reportError + 129 >>> 1 libswiftCore.dylib 0x000000011013cb50 >>> _swift_stdlib_reportFatalError + 60 >>> 2 libswiftCore.dylib 0x000000010ff2d250 specialized >>> specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> >>> A) -> A + 342 >>> 3 libswiftCore.dylib 0x00000001100a7e90 partial apply >>> for (_fatalErrorMessage(StaticString, StaticString, file : StaticString, >>> line : UInt, flags : UInt32) -> Never).(closure #2) + 109 >>> 4 libswiftCore.dylib 0x000000010ff2d250 specialized >>> specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> >>> A) -> A + 342 >>> 5 libswiftCore.dylib 0x000000011005a9a0 specialized >>> _fatalErrorMessage(StaticString, StaticString, file : StaticString, line : >>> UInt, flags : UInt32) -> Never + 96 >>> 6 hello 0x000000010fee6200 main + 345 >>> 7 libdyld.dylib 0x00007fffe0375234 start + 1 >>> Illegal instruction: 4 >>> ``` >>> >>> From the crash, how do I map back line 6 to an actual line in main.swift? >>> _______________________________________________ >>> swift-users mailing list >>> swift-users@swift.org <mailto:swift-users@swift.org> >>> https://lists.swift.org/mailman/listinfo/swift-users >>> <https://lists.swift.org/mailman/listinfo/swift-users> >> >> >> _______________________________________________ >> swift-users mailing list >> swift-users@swift.org <mailto:swift-users@swift.org> >> https://lists.swift.org/mailman/listinfo/swift-users >
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users