Issue in Types/Null init(from decoder: Decoder) #88
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Null init(from decoder: Decoder): explicitly call self.init() if container.decodeNil() is true
Otherwise, the code fails to compile using swift 6.2.1 compiler from swift.org in release mode.
Strangely, the code compiles fine on debug mode or using swift compiler provided by apple within Xcode.
To demonstrate the issue, here is a demo code that fails to compile for all compiler:
'self.init' isn't called on all paths before returning from initializer
But, if self.init() is replaced by self = .init(), which is similar to the code in init(from decoder: Decoder) for Null structure, the code compiles fine on apple swift version. However, this trigger an issue (see attached file) with swift compiler from swift.org, at least in release mode.
I think, it would make more sense that the code fails so that both self.init() and self = .init() codes produce the same error.
So the demo code should be written:
I propose to do the same in Null init(from decoder: Decoder) function.
Even if the code seems valid without that for some compilers, it make sense to init self on both path, so if
let container = container as? AnySingleValueBSONDecodingContainersucceed or and the else clause.Regards
Vincent