The Swift 3 crash is definitely a compiler bug — the compiler should never crash, even with invalid code. However it looks like we fixed it already, and the latest snapshot produces a compile error instead. Let us know if you need any more help!
Slava > On Dec 26, 2016, at 2:56 PM, Игорь Никитин <devni...@icloud.com> wrote: > > Now I’m not sure that it’s a compiler bug. > Maybe I not provide enough info of the type system or whatever else > > Thanks for the help! > >> 26 дек. 2016 г., в 22:49, Slava Pestov via swift-users >> <swift-users@swift.org <mailto:swift-users@swift.org>> написал(а): >> >>> >>> On Dec 26, 2016, at 2:30 PM, Игорь Никитин <devni...@icloud.com >>> <mailto:devni...@icloud.com>> wrote: >>> >>> Hello! >>> >>> Here is a class that uses all of this protocols: >>> https://gist.github.com/rabbitinspace/a88410d778e5ac955ee88bdfede6e00b >>> <https://gist.github.com/rabbitinspace/a88410d778e5ac955ee88bdfede6e00b> >>> Line 19 >>> >>> Latest Xcode gives me this log: >>> https://gist.github.com/rabbitinspace/6cb5ebd536a81b0b1cc6b0fadbabbe77 >>> <https://gist.github.com/rabbitinspace/6cb5ebd536a81b0b1cc6b0fadbabbe77> >>> It’s a compiler crash, I think >>> >>> While the latest dev swift snapshot produces a build error: >>> https://gist.github.com/rabbitinspace/944a62efc18432baf781e368a1023b87 >>> <https://gist.github.com/rabbitinspace/944a62efc18432baf781e368a1023b87> >>> Shortly: >>> cannot invoke 'authenticationService' with an argument list of type >>> '(for: Remote.Type)’ >>> expected an argument list of type '(for: Remote.Type)’ >>> >>> I can build it with the latest dev snapshot (Xcode still can't) if I will >>> constraint generic types in AuthController class: >>> Can’t compile: >>> final class AuthController<Remote: App.Remote, Builder: >>> RemoteAuthenticationServiceBuilder> >>> >>> This is compiles successfully: >>> final class AuthController<Remote: App.Remote, Builder: >>> RemoteAuthenticationServiceBuilder> >>> where Builder.Service.Remote == Remote >>> >> >> It seems this is the correct fix — the compile error is obtuse, but it >> sounds like it’s talking about the two different types (both named ‘Remote’). >> >> If you feel this behavior is in error, do you mind filing a JIRA bug? >> >> Slava >> >>> >>> >>>> 25 дек. 2016 г., в 23:50, Slava Pestov via swift-users >>>> <swift-users@swift.org <mailto:swift-users@swift.org>> написал(а): >>>> >>>> Hi Igor, >>>> >>>> Your example is not self-contained, so I added the following definitions: >>>> >>>> struct URI {} >>>> >>>> struct App { >>>> class Remote { >>>> struct Credentials {} >>>> } >>>> } >>>> >>>> struct RemoteUser {} >>>> >>>> protocol ResponseRepresentable {} >>>> >>>> protocol RemoteCredentials {} >>>> >>>> Unfortunately, this makes the code compile in both Swift 3.0 and the >>>> latest code built from GitHub, even with the ‘where’ part uncommented, so >>>> I suspect we’ll need a larger testcase to reproduce the original issue. >>>> >>>> However from looking at the code, what you’re doing is adding a >>>> requirement to an associated type of the ‘Self’ generic parameter, which >>>> Swift 3.0 did not model properly, but it is one of the things we addressed >>>> in some recent refactoring work. >>>> >>>> Could you try the latest development snapshot from swift.org >>>> <http://swift.org/> and let us know if it solves your problem? >>>> >>>> Slava >>>> >>>>> On Dec 25, 2016, at 1:05 PM, Игорь Никитин via swift-users >>>>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote: >>>>> >>>>> Hello! >>>>> >>>>> I have few protocols with associated types: >>>>> protocol Remote { >>>>> associatedtype Credentials: RemoteCredentials >>>>> >>>>> static var url: URI { get } >>>>> static var name: String { get } >>>>> static var credentials: Credentials.Type { get } >>>>> } >>>>> protocol RemoteAuthenticating { >>>>> associatedtype Remote: App.Remote >>>>> >>>>> func authenticate(with credentials: Remote.Credentials) throws -> >>>>> (RemoteUser, ResponseRepresentable?) >>>>> } >>>>> protocol RemoteAuthenticationServiceBuilder { >>>>> associatedtype Service: RemoteAuthenticating >>>>> >>>>> // TODO: `Service.Remote` should be constrained to `Remote` but >>>>> compiler crashes >>>>> func authenticationService<Remote: App.Remote>(for: Remote.Type) -> >>>>> Service? // where Service.Remote == Remote >>>>> } >>>>> It works fine until I uncomment the last where statement >>>>> If I trying to constraint Service.Remote type compiler will crash with >>>>> segfault 11 >>>>> I can guess that it's a compiler bug, but maybe I’m using generics in >>>>> wrong way? >>>>> >>>>> _______________________________________________ >>>>> 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 >>>> <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 >> <https://lists.swift.org/mailman/listinfo/swift-users>
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users