Compiler Error Linux Only: opaque witness shouldn't be generic yet

I have a fairly large Vapor 3.0/Swift 4.1 project that compiles and runs fine on Mac OS. On Linux (Ubuntu 16.04), however I get the following error:

swift: /home/buildnode/jenkins/workspace/oss-swift-4.1-package-linux-ubuntu-16_04/swift/lib/Serialization/Deserialization.cpp:5079: auto swift::ModuleFile::finishNormalConformance(swift::NormalProtocolConformance *, uint64_t)::(anonymous class)::operator()() const: Assertion `syntheticSig == nullptr && syntheticEnv == nullptr && "opaque witness shouldn't be generic yet. when this is " "possible, it should use forwarding substitutions"' failed.

...

  1. While reading from 'App'
  2. While finishing conformance for type 'ArpAssessment'
  3. While ... to 'QuestionResponseStore' in module 'DMTDBase'

I looked at the compiler and the comment says the following around the assert that is firing:

// We shouldn't yet need to worry about generic requirements, since
// an imported ObjC method should never be generic.

In the code that it mentions (ArpAssessment, QuestionResponseStore), there is no Objective-C code as my project is entirely Swift and the only C code that I know if in any of the libraries that I use comes from Swift-NIO.

There are quite a few generic methods in the protocol 'QuestionResponseStore' which it seems to be checking for conformance.

I would love to log a bug, but I feel that I need to narrow it down a bit first as this assert() only shows up in the final application and not in the library in which QuestionResponseStore is defined and tested.

Thank you!

@Arnold @compnerd Do you guys have any ideas?

I was able to work around the issue by adding #if !os(Linux)/#endif around the QuestionResponseStore methods (QuestionResponseStore is a protocol), which works for now...