forked from OSchip/llvm-project
Diagnose assiging to an interface object in
non-fragile abi mode as sizes are not statically known. Fixes radar 8315734. llvm-svn: 111191
This commit is contained in:
parent
c129cc18f0
commit
99311ba1a8
|
@ -2133,8 +2133,8 @@ def warn_indirection_through_null : Warning<
|
|||
def note_indirection_through_null : Note<
|
||||
"consider using __builtin_trap() or qualifying pointer with 'volatile'">;
|
||||
|
||||
def err_indirection_requires_nonfragile_object : Error<
|
||||
"indirection cannot be to an interface in non-fragile ABI (%0 invalid)">;
|
||||
def err_assignment_requires_nonfragile_object : Error<
|
||||
"cannot assign to class object in non-fragile ABI (%0 invalid)">;
|
||||
def err_direct_interface_unsupported : Error<
|
||||
"indirection to an interface is not supported (%0 invalid)">;
|
||||
def err_typecheck_invalid_operands : Error<
|
||||
|
|
|
@ -6538,6 +6538,11 @@ Action::OwningExprResult Sema::CreateBuiltinBinOp(SourceLocation OpLoc,
|
|||
}
|
||||
if (ResultTy.isNull())
|
||||
return ExprError();
|
||||
if (ResultTy->isObjCObjectType() && LangOpts.ObjCNonFragileABI) {
|
||||
if (Opc >= BinaryOperator::Assign && Opc <= BinaryOperator::OrAssign)
|
||||
Diag(OpLoc, diag::err_assignment_requires_nonfragile_object)
|
||||
<< ResultTy;
|
||||
}
|
||||
if (CompResultTy.isNull())
|
||||
return Owned(new (Context) BinaryOperator(lhs, rhs, Opc, ResultTy, OpLoc));
|
||||
else
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// RUN: %clang_cc1 -fobjc-nonfragile-abi -verify -fsyntax-only %s
|
||||
// XFAIL: *
|
||||
|
||||
@interface NSView
|
||||
- (id)initWithView:(id)realView;
|
||||
|
@ -7,7 +6,7 @@
|
|||
|
||||
@implementation NSView
|
||||
- (id)initWithView:(id)realView {
|
||||
*(NSView *)self = *(NSView *)realView; // expected-error {{indirection cannot be to an interface in non-fragile ABI}}
|
||||
*(NSView *)self = *(NSView *)realView; // expected-error {{cannot assign to class object in non-fragile ABI}}
|
||||
}
|
||||
@end
|
||||
|
||||
|
|
Loading…
Reference in New Issue