зеркало из https://github.com/microsoft/clang-1.git
objc: issue error if assigning objects in fragile-abi too.
// rdar://10731065 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148823 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
5602f7e77e
Коммит
7b383e4a38
|
@ -3608,6 +3608,8 @@ def warn_pointer_indirection_from_incompatible_type : Warning<
|
|||
|
||||
def err_assignment_requires_nonfragile_object : Error<
|
||||
"cannot assign to class object in non-fragile ABI (%0 invalid)">;
|
||||
def err_objc_object_assignment : Error<
|
||||
"cannot assign to class object - use memcpy instead">;
|
||||
def err_direct_interface_unsupported : Error<
|
||||
"indirection to an interface is not supported (%0 invalid)">;
|
||||
def err_typecheck_invalid_operands : Error<
|
||||
|
|
|
@ -7252,10 +7252,14 @@ QualType Sema::CheckAssignmentOperands(Expr *LHSExpr, ExprResult &RHS,
|
|||
ConvTy = Compatible;
|
||||
|
||||
if (ConvTy == Compatible &&
|
||||
getLangOptions().ObjCNonFragileABI &&
|
||||
LHSType->isObjCObjectType())
|
||||
Diag(Loc, diag::err_assignment_requires_nonfragile_object)
|
||||
<< LHSType;
|
||||
LHSType->isObjCObjectType()) {
|
||||
if (getLangOptions().ObjCNonFragileABI)
|
||||
Diag(Loc, diag::err_assignment_requires_nonfragile_object)
|
||||
<< LHSType;
|
||||
else
|
||||
Diag(Loc, diag::err_objc_object_assignment)
|
||||
<< LHSType;
|
||||
}
|
||||
|
||||
// If the RHS is a unary plus or minus, check to see if they = and + are
|
||||
// right next to each other. If so, the user may have typo'd "x =+ 4"
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-fragile-abi -verify %s
|
||||
// rdar://10731065
|
||||
|
||||
@interface MyView {}
|
||||
@end
|
||||
|
||||
@implementation MyViewTemplate // expected-warning {{cannot find interface declaration for 'MyViewTemplate'}}
|
||||
- (id) createRealObject {
|
||||
id realObj;
|
||||
*(MyView *) realObj = *(MyView *) self; // expected-error {{cannot assign to class object - use memcpy instead}}
|
||||
}
|
||||
@end
|
||||
|
Загрузка…
Ссылка в новой задаче