Skip to content

Instantly share code, notes, and snippets.

@hpux735
Last active February 24, 2016 23:52
Show Gist options
  • Save hpux735/7384f55e0c1b1a32a679 to your computer and use it in GitHub Desktop.
Save hpux735/7384f55e0c1b1a32a679 to your computer and use it in GitHub Desktop.
I suspect it's related to linking…
So, a while back Orlando had fixed some things in Foundation (which still haven't been merged yet).
The symptom is that you'll get an error from unwrapping a nil.
When I test OSULogger (b, in the example above) without the patched Foundation I get the error.
Once I patched it, the tests pass. Then, with the same libraries and everything,
if I pull in OSUOpenCL (a) which depends on OSULogger, the tests in logger fail in the
same way as the unpatched Foundation
wdillon@beast:~/OSULogger$ swift test
Compiling Swift Module 'OSULoggertest' (2 sources)
Linking test-Package.xctest
Test Case 'OSULogger_TestComplete.testSeverityComparable' started.
Test Case 'OSULogger_TestComplete.testSeverityComparable' passed (0.0 seconds).
Test Case 'OSULogger_TestComplete.testLoggerEquivalence' started.
Test Case 'OSULogger_TestComplete.testLoggerEquivalence' passed (0.0 seconds).
Test Case 'OSULogger_TestComplete.testSharedLogger' started.
Test Case 'OSULogger_TestComplete.testSharedLogger' passed (0.0 seconds).
Test Case 'OSULogger_TestComplete.testPerformanceXMLLoad' started.
Test Case 'OSULogger_TestComplete.testPerformanceXMLLoad' passed (0.005 seconds).
Test Case 'OSULogger_TestComplete.testPerformanceJSONLoad' started.
Test Case 'OSULogger_TestComplete.testPerformanceJSONLoad' passed (0.004 seconds).
Test Case 'OSULogger_TestComplete.testPerformanceXMLWrite' started.
Test Case 'OSULogger_TestComplete.testPerformanceXMLWrite' passed (0.003 seconds).
Test Case 'OSULogger_TestComplete.testPerformanceJSONWrite' started.
Test Case 'OSULogger_TestComplete.testPerformanceJSONWrite' passed (0.001 seconds).
Test Case 'OSULogger_TestComplete.testStringFromXML' started.
Test Case 'OSULogger_TestComplete.testStringFromXML' passed (0.001 seconds).
Test Case 'OSULogger_TestComplete.testXMLReadAndWrite' started.
Test Case 'OSULogger_TestComplete.testXMLReadAndWrite' passed (0.008 seconds).
Executed 9 tests, with 0 failures (0 unexpected) in 0.021 (0.149) seconds
Test Case 'OSULogger_TestSimple.testSimple' started.
Test Case 'OSULogger_TestSimple.testSimple' passed (0.0 seconds).
Executed 1 test, with 0 failures (0 unexpected) in 0.0 (0.0) seconds
Total executed 10 tests, with 0 failures (0 unexpected) in 0.021 (0.149) seconds
wdillon@beast:~/OSUOpenCL$ swift test
Linking test-Package.xctest
Test Case 'OSULogger_TestComplete.testSeverityComparable' started.
fatal error: unexpectedly found nil while unwrapping an Optional value
Current stack trace:
/usr/lib/swift/linux/libswiftCore.so(swift_reportError+0x8b) [0x7f03e4e877eb]
/usr/lib/swift/linux/libswiftCore.so(_swift_stdlib_reportFatalError+0x3d) [0x7f03e4e9856d]
/usr/lib/swift/linux/libswiftCore.so(+0x23b5df) [0x7f03e4de05df]
/usr/lib/swift/linux/libswiftCore.so(function signature specialization <Arg[0] = Exploded, Arg[1] = Exploded, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, Swift.StaticString, Swift.UInt, flags : Swift.UInt32) -> ()+0x34) [0x7f03e4de06e4]
/home/wdillon/OSUOpenCL/.build/debug/test-Package() [0x40d8da]
/home/wdillon/OSUOpenCL/.build/debug/test-Package() [0x40d125]
/home/wdillon/OSUOpenCL/.build/debug/test-Package() [0x413a32]
/usr/lib/swift/linux/libXCTest.so(+0x151e8) [0x7f03e413e1e8]
/usr/lib/swift/linux/libXCTest.so(+0x15bdf) [0x7f03e413ebdf]
/usr/lib/swift/linux/libXCTest.so(+0x14b9a) [0x7f03e413db9a]
/usr/lib/swift/linux/libXCTest.so((extension in XCTest):XCTest.XCTestCase.invokeTest () -> ()+0x176) [0x7f03e413d666]
/usr/lib/swift/linux/libXCTest.so(+0x17ab0) [0x7f03e4140ab0]
/usr/lib/swift/linux/libXCTest.so(+0x14b9a) [0x7f03e413db9a]
/usr/lib/swift/linux/libXCTest.so(XCTest.XCTMain (Swift.Array<XCTest.XCTestCase>) -> ()+0x5a) [0x7f03e41402aa]
/home/wdillon/OSUOpenCL/.build/debug/test-Package() [0x40a542]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5) [0x7f03e2f40ec5]
/home/wdillon/OSUOpenCL/.build/debug/test-Package() [0x40a3b9]
@hpux735
Copy link
Author

hpux735 commented Feb 24, 2016

Test module:

From OSUOpenCL

<OSULogger.test.module>:
  tool: swift-compiler
  executable: /usr/bin/swiftc
  module-name: OSULoggertest
  module-output-path: /home/wdillon/OSUOpenCL/.build/debug/OSULoggertest.swiftmodule
  inputs: [<PMJSON.module>, <OSULogger.module>]
  outputs: [<OSULogger.test.module>, /home/wdillon/OSUOpenCL/.build/debug/OSULoggertest.build/TestSimple.swift.o, 
    /home/wdillon/OSUOpenCL/.build/debug/OSULoggertest.build/TestComplete.swift.o]
  import-paths: /home/wdillon/OSUOpenCL/.build/debug
  temps-path: /home/wdillon/OSUOpenCL/.build/debug/OSULoggertest.build
  objects: [/home/wdillon/OSUOpenCL/.build/debug/OSULoggertest.build/TestSimple.swift.o, 
    /home/wdillon/OSUOpenCL/.build/debug/OSULoggertest.build/TestComplete.swift.o]
  other-args: ["-j8", "-Onone", "-g", "-D", SWIFT_PACKAGE, "-enable-testing"]
  sources: ["/home/wdillon/OSUOpenCL/Packages/OSULogger-1.0.0/Tests/OSULogger/TestSimple.swift", 
    "/home/wdillon/OSUOpenCL/Packages/OSULogger-1.0.0/Tests/OSULogger/TestComplete.swift"]
  is-library: true

From OSULogger

<OSULogger.test.module>:
  tool: swift-compiler
  executable: /usr/bin/swiftc
  module-name: OSULoggertest
  module-output-path: /home/wdillon/OSULogger/.build/debug/OSULoggertest.swiftmodule
  inputs: [<PMJSON.module>, <OSULogger.module>]
  outputs: [<OSULogger.test.module>, /home/wdillon/OSULogger/.build/debug/OSULoggertest.build/TestSimple.swift.o, /home/wdillon/OSULogger/.build/debug/OSULoggertest.build/TestComplete.swift.o]
  import-paths: /home/wdillon/OSULogger/.build/debug
  temps-path: /home/wdillon/OSULogger/.build/debug/OSULoggertest.build
  objects: [/home/wdillon/OSULogger/.build/debug/OSULoggertest.build/TestSimple.swift.o, /home/wdillon/OSULogger/.build/debug/OSULoggertest.build/TestComplete.swift.o]
  other-args: ["-j8", "-Onone", "-g", "-D", SWIFT_PACKAGE, "-enable-testing"]
  sources: [/home/wdillon/OSULogger/Tests/OSULogger/TestSimple.swift, /home/wdillon/OSULogger/Tests/OSULogger/TestComplete.swift]
  is-library: true

As far as I can see, these are identical.

@hpux735
Copy link
Author

hpux735 commented Feb 24, 2016

Test Package

From OSUOpenCL

<Package.test>:
  tool: shell
  description: Linking test-Package.xctest
  inputs: [<OSULogger.test.module>, <PMJSON.module>, <OSULogger.module>]
  outputs: [<Package.test>, "/home/wdillon/OSUOpenCL/.build/debug/test-Package"]
  args: [/usr/bin/swiftc, "/home/wdillon/OSUOpenCL/Packages/OSULogger-1.0.0/Tests/LinuxMain.swift", "-emit-executable", "-I", /home/wdillon/OSUOpenCL/.build/debug, "-o", "/home/wdillon/OSUOpenCL/.build/debug/test-Package", /home/wdillon/OSUOpenCL/.build/debug/OSULoggertest.build/TestSimple.swift.o, /home/wdillon/OSUOpenCL/.build/debug/OSULoggertest.build/TestComplete.swift.o, /home/wdillon/OSUOpenCL/.build/debug/PMJSON.build/Decoder.swift.o, /home/wdillon/OSUOpenCL/.build/debug/PMJSON.build/ObjectiveC.swift.o, /home/wdillon/OSUOpenCL/.build/debug/PMJSON.build/JSON.swift.o, /home/wdillon/OSUOpenCL/.build/debug/PMJSON.build/JSONObject.swift.o, /home/wdillon/OSUOpenCL/.build/debug/PMJSON.build/DecimalNumber.swift.o, /home/wdillon/OSUOpenCL/.build/debug/PMJSON.build/Accessors.swift.o, /home/wdillon/OSUOpenCL/.build/debug/PMJSON.build/Parser.swift.o, /home/wdillon/OSUOpenCL/.build/debug/PMJSON.build/JSONError.swift.o, /home/wdillon/OSUOpenCL/.build/debug/PMJSON.build/Encoder.swift.o, /home/wdillon/OSUOpenCL/.build/debug/OSULogger.build/StringExtension.swift.o, /home/wdillon/OSUOpenCL/.build/debug/OSULogger.build/CBridge.swift.o, /home/wdillon/OSUOpenCL/.build/debug/OSULogger.build/OSULogger+XML.swift.o, /home/wdillon/OSUOpenCL/.build/debug/OSULogger.build/OSULogger+JSON.swift.o, /home/wdillon/OSUOpenCL/.build/debug/OSULogger.build/OSULoggerObserver.swift.o, /home/wdillon/OSUOpenCL/.build/debug/OSULogger.build/OSUConsoleLoggerObserver.swift.o, /home/wdillon/OSUOpenCL/.build/debug/OSULogger.build/OSULog.swift.o, /home/wdillon/OSUOpenCL/.build/debug/OSULogger.build/OSULogger.swift.o]

From OSULogger

<Package.test>:
  tool: shell
  description: Linking test-Package.xctest
  inputs: [<OSULogger.test.module>, <PMJSON.module>, <OSULogger.module>]
  outputs: [<Package.test>, "/home/wdillon/OSULogger/.build/debug/test-Package"]
  args: [/usr/bin/swiftc, /home/wdillon/OSULogger/Tests/LinuxMain.swift, "-emit-executable", "-I", /home/wdillon/OSULogger/.build/debug, "-o", "/home/wdillon/OSULogger/.build/debug/test-Package", /home/wdillon/OSULogger/.build/debug/OSULoggertest.build/TestSimple.swift.o, /home/wdillon/OSULogger/.build/debug/OSULoggertest.build/TestComplete.swift.o, /home/wdillon/OSULogger/.build/debug/PMJSON.build/Decoder.swift.o, /home/wdillon/OSULogger/.build/debug/PMJSON.build/ObjectiveC.swift.o, /home/wdillon/OSULogger/.build/debug/PMJSON.build/JSON.swift.o, /home/wdillon/OSULogger/.build/debug/PMJSON.build/JSONObject.swift.o, /home/wdillon/OSULogger/.build/debug/PMJSON.build/DecimalNumber.swift.o, /home/wdillon/OSULogger/.build/debug/PMJSON.build/Accessors.swift.o, /home/wdillon/OSULogger/.build/debug/PMJSON.build/Parser.swift.o, /home/wdillon/OSULogger/.build/debug/PMJSON.build/JSONError.swift.o, /home/wdillon/OSULogger/.build/debug/PMJSON.build/Encoder.swift.o, /home/wdillon/OSULogger/.build/debug/OSULogger.build/StringExtension.swift.o, /home/wdillon/OSULogger/.build/debug/OSULogger.build/CBridge.swift.o, /home/wdillon/OSULogger/.build/debug/OSULogger.build/OSULogger+XML.swift.o, /home/wdillon/OSULogger/.build/debug/OSULogger.build/OSULogger+JSON.swift.o, /home/wdillon/OSULogger/.build/debug/OSULogger.build/OSULoggerObserver.swift.o, /home/wdillon/OSULogger/.build/debug/OSULogger.build/OSUConsoleLoggerObserver.swift.o, /home/wdillon/OSULogger/.build/debug/OSULogger.build/OSULog.swift.o, /home/wdillon/OSULogger/.build/debug/OSULogger.build/OSULogger.swift.o]

These are identical, other than the paths.

@hpux735
Copy link
Author

hpux735 commented Feb 24, 2016

I tried making a shell script that compiles the test executable and I can change the objects that it pulls from easily:

#!/bin/bash

#LIBRARY_PREFIX=/home/wdillon/OSULogger
LIBRARY_PREFIX=/home/wdillon/OSUOpenCL
OBJECT_PREFIX=${LIBRARY_PREFIX}/.build/debug

rm test-package

/usr/bin/swiftc /home/wdillon/OSULogger/Tests/LinuxMain.swift -emit-executable -I ${LIBRARY_PREFIX}/.build/debug -o test-package \
${OBJECT_PREFIX}/OSULoggertest.build/TestSimple.swift.o \
${OBJECT_PREFIX}/OSULoggertest.build/TestComplete.swift.o \
${OBJECT_PREFIX}/PMJSON.build/Decoder.swift.o \
${OBJECT_PREFIX}/PMJSON.build/ObjectiveC.swift.o \
${OBJECT_PREFIX}/PMJSON.build/JSON.swift.o \
${OBJECT_PREFIX}/PMJSON.build/JSONObject.swift.o \
${OBJECT_PREFIX}/PMJSON.build/DecimalNumber.swift.o \
${OBJECT_PREFIX}/PMJSON.build/Accessors.swift.o \
${OBJECT_PREFIX}/PMJSON.build/Parser.swift.o \
${OBJECT_PREFIX}/PMJSON.build/JSONError.swift.o \
${OBJECT_PREFIX}/PMJSON.build/Encoder.swift.o \
${OBJECT_PREFIX}/OSULogger.build/StringExtension.swift.o \
${OBJECT_PREFIX}/OSULogger.build/CBridge.swift.o \
${OBJECT_PREFIX}/OSULogger.build/OSULogger+XML.swift.o \
${OBJECT_PREFIX}/OSULogger.build/OSULogger+JSON.swift.o \
${OBJECT_PREFIX}/OSULogger.build/OSULoggerObserver.swift.o \
${OBJECT_PREFIX}/OSULogger.build/OSUConsoleLoggerObserver.swift.o \
${OBJECT_PREFIX}/OSULogger.build/OSULog.swift.o \
${OBJECT_PREFIX}/OSULogger.build/OSULogger.swift.o

./test-package

It doesn't matter where it pulls the objects from, the same problem occurs in either case.

@hpux735
Copy link
Author

hpux735 commented Feb 24, 2016

It makes a difference how the test program is called:

wdillon@beast:~$ ./OSULogger/.build/debug/test-Package
Test Case 'OSULogger_TestComplete.testSeverityComparable' started.
fatal error: unexpectedly found nil while unwrapping an Optional value
Current stack trace:
/usr/lib/swift/linux/libswiftCore.so(swift_reportError+0x8b) [0x7fdcc9c7e7eb]
/usr/lib/swift/linux/libswiftCore.so(_swift_stdlib_reportFatalError+0x3d) [0x7fdcc9c8f56d]
/usr/lib/swift/linux/libswiftCore.so(+0x23b5df) [0x7fdcc9bd75df]
/usr/lib/swift/linux/libswiftCore.so(function signature specialization <Arg[0] = Exploded, Arg[1] = Exploded, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, Swift.StaticString, Swift.UInt, flags : Swift.UInt32) -> ()+0x34) [0x7fdcc9bd76e4]
./OSULogger/.build/debug/test-Package() [0x40d8da]
./OSULogger/.build/debug/test-Package() [0x40d125]
./OSULogger/.build/debug/test-Package() [0x413a42]
/usr/lib/swift/linux/libXCTest.so(+0x151e8) [0x7fdcc8f351e8]
/usr/lib/swift/linux/libXCTest.so(+0x15bdf) [0x7fdcc8f35bdf]
/usr/lib/swift/linux/libXCTest.so(+0x14b9a) [0x7fdcc8f34b9a]
/usr/lib/swift/linux/libXCTest.so((extension in XCTest):XCTest.XCTestCase.invokeTest () -> ()+0x176) [0x7fdcc8f34666]
/usr/lib/swift/linux/libXCTest.so(+0x17ab0) [0x7fdcc8f37ab0]
/usr/lib/swift/linux/libXCTest.so(+0x14b9a) [0x7fdcc8f34b9a]
/usr/lib/swift/linux/libXCTest.so(XCTest.XCTMain (Swift.Array<XCTest.XCTestCase>) -> ()+0x5a) [0x7fdcc8f372aa]
./OSULogger/.build/debug/test-Package() [0x40a542]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5) [0x7fdcc7d37ec5]
./OSULogger/.build/debug/test-Package() [0x40a3b9]
Illegal instruction (core dumped)
wdillon@beast:~$ cd OSULogger/
wdillon@beast:~/OSULogger$ swift test
Test Case 'OSULogger_TestComplete.testSeverityComparable' started.
Test Case 'OSULogger_TestComplete.testSeverityComparable' passed (0.0 seconds).
Test Case 'OSULogger_TestComplete.testLoggerEquivalence' started.
Test Case 'OSULogger_TestComplete.testLoggerEquivalence' passed (0.0 seconds).
Test Case 'OSULogger_TestComplete.testSharedLogger' started.
Test Case 'OSULogger_TestComplete.testSharedLogger' passed (0.0 seconds).
Test Case 'OSULogger_TestComplete.testPerformanceXMLLoad' started.
Test Case 'OSULogger_TestComplete.testPerformanceXMLLoad' passed (0.005 seconds).
Test Case 'OSULogger_TestComplete.testPerformanceJSONLoad' started.
Test Case 'OSULogger_TestComplete.testPerformanceJSONLoad' passed (0.004 seconds).
Test Case 'OSULogger_TestComplete.testPerformanceXMLWrite' started.
Test Case 'OSULogger_TestComplete.testPerformanceXMLWrite' passed (0.004 seconds).
Test Case 'OSULogger_TestComplete.testPerformanceJSONWrite' started.
Test Case 'OSULogger_TestComplete.testPerformanceJSONWrite' passed (0.001 seconds).
Test Case 'OSULogger_TestComplete.testStringFromXML' started.
Test Case 'OSULogger_TestComplete.testStringFromXML' passed (0.001 seconds).
Test Case 'OSULogger_TestComplete.testXMLReadAndWrite' started.
Test Case 'OSULogger_TestComplete.testXMLReadAndWrite' passed (0.012 seconds).
Executed 9 tests, with 0 failures (0 unexpected) in 0.027 (0.179) seconds
Test Case 'OSULogger_TestSimple.testSimple' started.
Test Case 'OSULogger_TestSimple.testSimple' passed (0.0 seconds).
Executed 1 test, with 0 failures (0 unexpected) in 0.0 (0.0) seconds
Total executed 10 tests, with 0 failures (0 unexpected) in 0.027 (0.18) seconds

@hpux735
Copy link
Author

hpux735 commented Feb 24, 2016

It's failing to find the exemplar files

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment