mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Start emitting stubs for unimplemented designated initializers of the superclass.
When a subclass does not implement a designated initializer of its superclass, introduce a stub initializer that simply traps. Such stubs cannot be invoked directly using Swift syntax, but can be invoked through the Objective-C runtime and from Objective-C code. Catch such errors rather than allowing them to violate the memory safety of the language. Note that we're currently using cond_fail to trap; this will be improved in the future, Swift SVN r14839
This commit is contained in:
@@ -873,6 +873,12 @@ static bool shouldSerializeMember(Decl *D) {
|
||||
case DeclKind::EnumCase:
|
||||
return false;
|
||||
|
||||
case DeclKind::Constructor: {
|
||||
// Never serialize a constructor with a stub implementation.
|
||||
auto ctor = cast<ConstructorDecl>(D);
|
||||
return !ctor->hasStubImplementation();
|
||||
}
|
||||
|
||||
case DeclKind::EnumElement:
|
||||
case DeclKind::Protocol:
|
||||
case DeclKind::Destructor:
|
||||
@@ -886,7 +892,6 @@ static bool shouldSerializeMember(Decl *D) {
|
||||
case DeclKind::Class:
|
||||
case DeclKind::Var:
|
||||
case DeclKind::Func:
|
||||
case DeclKind::Constructor:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user