mirror of
https://github.com/intel/llvm.git
synced 2026-01-23 16:06:39 +08:00
Add -fobjc-default-synthesized-properties flag
to allow us to explicitly control whether or not Objective-C properties are default synthesized. Currently this feature only works when using the -fobjc-non-fragile-abi2 flag (so there is no functionality change), but we can now turn off this feature without turning off all the features coupled with -fobjc-non-fragile-abi2. llvm-svn: 122519
This commit is contained in:
@@ -129,6 +129,9 @@ def warn_pch_nonfragile_abi2 : Error<
|
||||
"PCH file was compiled with the %select{32-bit|enhanced non-fragile}0 "
|
||||
"Objective-C ABI but the %select{32-bit|enhanced non-fragile}1 "
|
||||
"Objective-C ABI is selected">;
|
||||
def warn_pch_objc_auto_properties : Error<
|
||||
"PCH file was compiled %select{with|without}0 support for auto-synthesized "
|
||||
"@properties but it is currently %select{disabled|enabled}1">;
|
||||
def warn_pch_no_constant_cfstrings : Error<
|
||||
"Objctive-C NSstring generation support was %select{disabled|enabled}0 "
|
||||
"in PCH file but currently %select{disabled|enabled}1">;
|
||||
|
||||
@@ -44,6 +44,7 @@ public:
|
||||
unsigned ObjC2 : 1; // Objective-C 2 support enabled.
|
||||
unsigned ObjCNonFragileABI : 1; // Objective-C modern abi enabled
|
||||
unsigned ObjCNonFragileABI2 : 1; // Objective-C enhanced modern abi enabled
|
||||
unsigned ObjCDefaultSynthProperties : 1; // Objective-C auto-synthesized properties.
|
||||
|
||||
unsigned PascalStrings : 1; // Allow Pascal strings
|
||||
unsigned WritableStrings : 1; // Allow writable strings
|
||||
@@ -155,6 +156,7 @@ public:
|
||||
GNUMode = GNUKeywords = ImplicitInt = Digraphs = 0;
|
||||
HexFloats = 0;
|
||||
GC = ObjC1 = ObjC2 = ObjCNonFragileABI = ObjCNonFragileABI2 = 0;
|
||||
ObjCDefaultSynthProperties = 0;
|
||||
NoConstantCFStrings = 0; InlineVisibilityHidden = 0;
|
||||
C99 = Microsoft = Borland = CPlusPlus = CPlusPlus0x = 0;
|
||||
CXXOperatorNames = PascalStrings = WritableStrings = ConstStrings = 0;
|
||||
|
||||
@@ -463,6 +463,8 @@ def fobjc_gc_only : Flag<"-fobjc-gc-only">,
|
||||
HelpText<"Use GC exclusively for Objective-C related memory management">;
|
||||
def fobjc_dispatch_method_EQ : Joined<"-fobjc-dispatch-method=">,
|
||||
HelpText<"Objective-C dispatch method to use">;
|
||||
def fobjc_default_synthesize_properties : Flag<"-fobjc-default-synthesize-properties">,
|
||||
HelpText<"enable the default synthesis of Objective-C properties">;
|
||||
def print_ivar_layout : Flag<"-print-ivar-layout">,
|
||||
HelpText<"Enable Objective-C Ivar layout bitmap print trace">;
|
||||
def fobjc_nonfragile_abi : Flag<"-fobjc-nonfragile-abi">,
|
||||
|
||||
@@ -338,6 +338,8 @@ def fno_lax_vector_conversions : Flag<"-fno-lax-vector-conversions">, Group<f_Gr
|
||||
def fno_math_errno : Flag<"-fno-math-errno">, Group<f_Group>;
|
||||
def fno_merge_all_constants : Flag<"-fno-merge-all-constants">, Group<f_Group>;
|
||||
def fno_ms_extensions : Flag<"-fno-ms-extensions">, Group<f_Group>;
|
||||
def fno_objc_default_synthesize_properties
|
||||
: Flag<"-fno-objc-default-synthesize-properties">, Group<f_Group>;
|
||||
def fno_objc_legacy_dispatch : Flag<"-fno-objc-legacy-dispatch">, Group<f_Group>;
|
||||
def fno_omit_frame_pointer : Flag<"-fno-omit-frame-pointer">, Group<f_Group>;
|
||||
def fno_pascal_strings : Flag<"-fno-pascal-strings">, Group<f_Group>;
|
||||
@@ -357,6 +359,7 @@ def fno_working_directory : Flag<"-fno-working-directory">, Group<f_Group>;
|
||||
def fno_zero_initialized_in_bss : Flag<"-fno-zero-initialized-in-bss">, Group<f_Group>;
|
||||
def fobjc_atdefs : Flag<"-fobjc-atdefs">, Group<clang_ignored_f_Group>;
|
||||
def fobjc_call_cxx_cdtors : Flag<"-fobjc-call-cxx-cdtors">, Group<clang_ignored_f_Group>;
|
||||
def fobjc_default_synthesize_properties : Flag<"-fobjc-default-synthesize-properties">, Group<f_Group>;
|
||||
def fobjc_gc_only : Flag<"-fobjc-gc-only">, Group<f_Group>;
|
||||
def fobjc_gc : Flag<"-fobjc-gc">, Group<f_Group>;
|
||||
def fobjc_legacy_dispatch : Flag<"-fobjc-legacy-dispatch">, Group<f_Group>;
|
||||
|
||||
@@ -108,11 +108,15 @@ public:
|
||||
|
||||
/// IsBlocksDefault - Does this tool chain enable -fblocks by default.
|
||||
virtual bool IsBlocksDefault() const { return false; }
|
||||
|
||||
|
||||
/// IsIntegratedAssemblerDefault - Does this tool chain enable -integrated-as
|
||||
/// by default.
|
||||
virtual bool IsIntegratedAssemblerDefault() const { return false; }
|
||||
|
||||
/// IsObjCDefaultSynthPropertiesDefault - Does this tool chain enable
|
||||
/// -fobjc-default-synthesize-properties by default.
|
||||
virtual bool IsObjCDefaultSynthPropertiesDefault() const { return false; }
|
||||
|
||||
/// IsObjCNonFragileABIDefault - Does this tool chain set
|
||||
/// -fobjc-nonfragile-abi by default.
|
||||
virtual bool IsObjCNonFragileABIDefault() const { return false; }
|
||||
|
||||
@@ -176,6 +176,12 @@ public:
|
||||
getTriple().getArch() == llvm::Triple::x86_64);
|
||||
#endif
|
||||
}
|
||||
|
||||
virtual bool IsObjCDefaultSynthPropertiesDefault() const {
|
||||
// Always allow default synthesized properties on Darwin.
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool IsObjCNonFragileABIDefault() const {
|
||||
// Non-fragile ABI is default for everything but i386.
|
||||
return getTriple().getArch() != llvm::Triple::x86;
|
||||
|
||||
@@ -1484,6 +1484,13 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
||||
CmdArgs.push_back("-fobjc-dispatch-method=non-legacy");
|
||||
}
|
||||
}
|
||||
|
||||
// -fobjc-default-synthesize-properties=0 is default.
|
||||
if (Args.hasFlag(options::OPT_fobjc_default_synthesize_properties,
|
||||
options::OPT_fno_objc_default_synthesize_properties,
|
||||
getToolChain().IsObjCDefaultSynthPropertiesDefault())) {
|
||||
CmdArgs.push_back("-fobjc-default-synthesize-properties");
|
||||
}
|
||||
}
|
||||
|
||||
if (!Args.hasFlag(options::OPT_fassume_sane_operator_new,
|
||||
|
||||
@@ -550,6 +550,8 @@ static void LangOptsToArgs(const LangOptions &Opts,
|
||||
Res.push_back("-fobjc-nonfragile-abi");
|
||||
if (Opts.ObjCNonFragileABI2)
|
||||
Res.push_back("-fobjc-nonfragile-abi2");
|
||||
if (Opts.ObjCDefaultSynthProperties)
|
||||
Res.push_back("-fobjc-default-synthesize-properties");
|
||||
// NoInline is implicit.
|
||||
if (!Opts.CXXOperatorNames)
|
||||
Res.push_back("-fno-operator-names");
|
||||
@@ -1424,6 +1426,8 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
|
||||
Opts.ObjCNonFragileABI2 = Args.hasArg(OPT_fobjc_nonfragile_abi2);
|
||||
if (Opts.ObjCNonFragileABI2)
|
||||
Opts.ObjCNonFragileABI = true;
|
||||
Opts.ObjCDefaultSynthProperties =
|
||||
Args.hasArg(OPT_fobjc_default_synthesize_properties);
|
||||
Opts.CatchUndefined = Args.hasArg(OPT_fcatch_undefined_behavior);
|
||||
Opts.EmitAllDecls = Args.hasArg(OPT_femit_all_decls);
|
||||
Opts.PICLevel = Args.getLastArgIntValue(OPT_pic_level, 0, Diags);
|
||||
|
||||
@@ -1095,7 +1095,8 @@ void Sema::ImplMethodsVsClassMethods(Scope *S, ObjCImplDecl* IMPDecl,
|
||||
// Check and see if properties declared in the interface have either 1)
|
||||
// an implementation or 2) there is a @synthesize/@dynamic implementation
|
||||
// of the property in the @implementation.
|
||||
if (isa<ObjCInterfaceDecl>(CDecl) && !LangOpts.ObjCNonFragileABI2)
|
||||
if (isa<ObjCInterfaceDecl>(CDecl) &&
|
||||
!(LangOpts.ObjCDefaultSynthProperties && LangOpts.ObjCNonFragileABI2))
|
||||
DiagnoseUnimplementedProperties(S, IMPDecl, CDecl, InsMap);
|
||||
|
||||
llvm::DenseSet<Selector> ClsMap;
|
||||
@@ -1587,7 +1588,8 @@ void Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd,
|
||||
}
|
||||
}
|
||||
|
||||
if (LangOpts.ObjCNonFragileABI2)
|
||||
if (LangOpts.ObjCDefaultSynthProperties &&
|
||||
LangOpts.ObjCNonFragileABI2)
|
||||
DefaultSynthesizeProperties(S, IC, IDecl);
|
||||
ImplMethodsVsClassMethods(S, IC, IDecl);
|
||||
AtomicPropertySetterGetterRules(IC, IDecl);
|
||||
|
||||
@@ -84,6 +84,8 @@ PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts) {
|
||||
PARSE_LANGOPT_IMPORTANT(ObjC2, diag::warn_pch_objective_c2);
|
||||
PARSE_LANGOPT_IMPORTANT(ObjCNonFragileABI, diag::warn_pch_nonfragile_abi);
|
||||
PARSE_LANGOPT_IMPORTANT(ObjCNonFragileABI2, diag::warn_pch_nonfragile_abi2);
|
||||
PARSE_LANGOPT_IMPORTANT(ObjCDefaultSynthProperties,
|
||||
diag::warn_pch_objc_auto_properties);
|
||||
PARSE_LANGOPT_IMPORTANT(NoConstantCFStrings,
|
||||
diag::warn_pch_no_constant_cfstrings);
|
||||
PARSE_LANGOPT_BENIGN(PascalStrings);
|
||||
@@ -2598,6 +2600,7 @@ bool ASTReader::ParseLanguageOptions(
|
||||
PARSE_LANGOPT(ObjC2);
|
||||
PARSE_LANGOPT(ObjCNonFragileABI);
|
||||
PARSE_LANGOPT(ObjCNonFragileABI2);
|
||||
PARSE_LANGOPT(ObjCDefaultSynthProperties);
|
||||
PARSE_LANGOPT(NoConstantCFStrings);
|
||||
PARSE_LANGOPT(PascalStrings);
|
||||
PARSE_LANGOPT(WritableStrings);
|
||||
|
||||
@@ -860,6 +860,8 @@ void ASTWriter::WriteLanguageOptions(const LangOptions &LangOpts) {
|
||||
// modern abi enabled.
|
||||
Record.push_back(LangOpts.ObjCNonFragileABI2); // Objective-C enhanced
|
||||
// modern abi enabled.
|
||||
Record.push_back(LangOpts.ObjCDefaultSynthProperties); // Objective-C auto-synthesized
|
||||
// properties enabled.
|
||||
Record.push_back(LangOpts.NoConstantCFStrings); // non cfstring generation enabled..
|
||||
|
||||
Record.push_back(LangOpts.PascalStrings); // Allow Pascal strings
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-nonfragile-abi2 -emit-llvm -g %s -o %t
|
||||
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-nonfragile-abi2 -fobjc-default-synthesize-properties -emit-llvm -g %s -o %t
|
||||
// RUN: grep DW_TAG_member %t | count 5
|
||||
// rdar://8493239
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -fsyntax-only -fobjc-nonfragile-abi2 -verify %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -fobjc-nonfragile-abi2 -fobjc-default-synthesize-properties -verify %s
|
||||
|
||||
@interface NSObject
|
||||
- (void) release;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -fsyntax-only -fobjc-nonfragile-abi2 -verify %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -fobjc-nonfragile-abi2 -fobjc-default-synthesize-properties -verify %s
|
||||
|
||||
@interface NSString @end
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -Wnonfragile-abi2 -fsyntax-only -fobjc-nonfragile-abi2 -verify %s
|
||||
// RUN: %clang_cc1 -Wnonfragile-abi2 -fsyntax-only -fobjc-nonfragile-abi2 -fobjc-default-synthesize-properties -verify %s
|
||||
// rdar://8673791
|
||||
|
||||
@interface I {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -fsyntax-only -fobjc-nonfragile-abi2 -verify %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -fobjc-nonfragile-abi2 -fobjc-default-synthesize-properties -verify %s
|
||||
|
||||
int bar;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -fsyntax-only -fobjc-nonfragile-abi2 -verify %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -fobjc-nonfragile-abi2 -fobjc-default-synthesize-properties -verify %s
|
||||
@interface I
|
||||
{
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -fsyntax-only -Wimplicit-atomic-properties -fobjc-nonfragile-abi2 -verify %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -Wimplicit-atomic-properties -fobjc-nonfragile-abi2 -fobjc-default-synthesize-properties -verify %s
|
||||
// rdar://8774580
|
||||
|
||||
@interface Super
|
||||
|
||||
Reference in New Issue
Block a user