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:
Fariborz Jahanian 2010-08-16 21:51:12 +00:00
parent c129cc18f0
commit 99311ba1a8
3 changed files with 8 additions and 4 deletions

View File

@ -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<

View File

@ -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

View File

@ -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