зеркало из https://github.com/microsoft/clang.git
Diagnose assiging to an interface object in
non-fragile abi mode as sizes are not statically known. Fixes radar 8315734. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111191 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
50e8ac2369
Коммит
57dae1a312
|
@ -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
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче