forked from OSchip/llvm-project
Introduce a -cc1-level option to turn off related result type
inference, to be used (only) by the Objective-C rewriter. llvm-svn: 133025
This commit is contained in:
parent
192ed0b7ee
commit
a860e6aebc
|
@ -46,7 +46,8 @@ public:
|
|||
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 ObjCInferRelatedResultType : 1; // Infer Objective-C related return
|
||||
// types
|
||||
unsigned AppleKext : 1; // Allow apple kext features.
|
||||
|
||||
unsigned PascalStrings : 1; // Allow Pascal strings
|
||||
|
@ -174,6 +175,7 @@ public:
|
|||
GC = ObjC1 = ObjC2 = ObjCNonFragileABI = ObjCNonFragileABI2 = 0;
|
||||
AppleKext = 0;
|
||||
ObjCDefaultSynthProperties = 0;
|
||||
ObjCInferRelatedResultType = 1;
|
||||
NoConstantCFStrings = 0; InlineVisibilityHidden = 0;
|
||||
C99 = C1X = Microsoft = Borland = CPlusPlus = CPlusPlus0x = 0;
|
||||
CXXOperatorNames = PascalStrings = WritableStrings = ConstStrings = 0;
|
||||
|
|
|
@ -493,6 +493,10 @@ 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">,
|
||||
HelpText<"enable objective-c's nonfragile abi">;
|
||||
def fno_objc_infer_related_result_type : Flag<
|
||||
"-fno-objc-infer-related-result-type">,
|
||||
HelpText<
|
||||
"do not infer Objective-C related result type based on method family">;
|
||||
def ftrapv : Flag<"-ftrapv">,
|
||||
HelpText<"Trap on integer overflow">;
|
||||
def ftrapv_handler : Separate<"-ftrapv-handler">,
|
||||
|
|
|
@ -1542,6 +1542,11 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
options::OPT_fno_lax_vector_conversions))
|
||||
CmdArgs.push_back("-fno-lax-vector-conversions");
|
||||
|
||||
// -fobjc-infer-related-result-type is the default, except in the Objective-C
|
||||
// rewriter.
|
||||
if (IsRewriter)
|
||||
CmdArgs.push_back("-fno-objc-infer-related-result-type");
|
||||
|
||||
// Handle -fobjc-gc and -fobjc-gc-only. They are exclusive, and -fobjc-gc-only
|
||||
// takes precedence.
|
||||
const Arg *GCArg = Args.getLastArg(options::OPT_fobjc_gc_only);
|
||||
|
|
|
@ -670,6 +670,9 @@ static void LangOptsToArgs(const LangOptions &Opts,
|
|||
Res.push_back("-fobjc-gc-only");
|
||||
}
|
||||
}
|
||||
if (!Opts.ObjCInferRelatedResultType)
|
||||
Res.push_back("-fno-objc-infer-related-result-type");
|
||||
|
||||
if (Opts.AppleKext)
|
||||
Res.push_back("-fapple-kext");
|
||||
|
||||
|
@ -1485,6 +1488,9 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
|
|||
else if (Args.hasArg(OPT_fobjc_gc))
|
||||
Opts.setGCMode(LangOptions::HybridGC);
|
||||
|
||||
if (Args.hasArg(OPT_fno_objc_infer_related_result_type))
|
||||
Opts.ObjCInferRelatedResultType = 0;
|
||||
|
||||
if (Args.hasArg(OPT_fapple_kext)) {
|
||||
if (!Opts.CPlusPlus)
|
||||
Diags.Report(diag::warn_c_kext);
|
||||
|
|
|
@ -2112,7 +2112,8 @@ Decl *Sema::ActOnMethodDeclaration(
|
|||
mergeObjCMethodDecls(ObjCMethod, InterfaceMD);
|
||||
}
|
||||
|
||||
if (!ObjCMethod->hasRelatedResultType()) {
|
||||
if (!ObjCMethod->hasRelatedResultType() &&
|
||||
getLangOptions().ObjCInferRelatedResultType) {
|
||||
bool InferRelatedResultType = false;
|
||||
switch (ObjCMethod->getMethodFamily()) {
|
||||
case OMF_None:
|
||||
|
|
|
@ -92,6 +92,7 @@ PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts) {
|
|||
PARSE_LANGOPT_IMPORTANT(AppleKext, diag::warn_pch_apple_kext);
|
||||
PARSE_LANGOPT_IMPORTANT(ObjCDefaultSynthProperties,
|
||||
diag::warn_pch_objc_auto_properties);
|
||||
PARSE_LANGOPT_BENIGN(ObjCInferRelatedResultType)
|
||||
PARSE_LANGOPT_IMPORTANT(NoConstantCFStrings,
|
||||
diag::warn_pch_no_constant_cfstrings);
|
||||
PARSE_LANGOPT_BENIGN(PascalStrings);
|
||||
|
@ -2934,6 +2935,7 @@ bool ASTReader::ParseLanguageOptions(
|
|||
PARSE_LANGOPT(ObjCNonFragileABI2);
|
||||
PARSE_LANGOPT(AppleKext);
|
||||
PARSE_LANGOPT(ObjCDefaultSynthProperties);
|
||||
PARSE_LANGOPT(ObjCInferRelatedResultType);
|
||||
PARSE_LANGOPT(NoConstantCFStrings);
|
||||
PARSE_LANGOPT(PascalStrings);
|
||||
PARSE_LANGOPT(WritableStrings);
|
||||
|
|
|
@ -1050,6 +1050,7 @@ void ASTWriter::WriteLanguageOptions(const LangOptions &LangOpts) {
|
|||
Record.push_back(LangOpts.AppleKext); // Apple's kernel extensions ABI
|
||||
Record.push_back(LangOpts.ObjCDefaultSynthProperties); // Objective-C auto-synthesized
|
||||
// properties enabled.
|
||||
Record.push_back(LangOpts.ObjCInferRelatedResultType);
|
||||
Record.push_back(LangOpts.NoConstantCFStrings); // non cfstring generation enabled..
|
||||
|
||||
Record.push_back(LangOpts.PascalStrings); // Allow Pascal strings
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
// TEST0: clang{{.*}}" "-cc1"
|
||||
// TEST0: "-rewrite-objc"
|
||||
// FIXME: CHECK-NOT is broken somehow, it doesn't work here. Check adjacency instead.
|
||||
// TEST0: "-fmessage-length" "0" "-fobjc-exceptions" "-fdiagnostics-show-option"
|
||||
// TEST0: "-fmessage-length" "0" "-fno-objc-infer-related-result-type" "-fobjc-exceptions" "-fdiagnostics-show-option"
|
||||
// TEST0: rewrite-objc.m"
|
||||
|
||||
// RUN: not %clang -ccc-no-clang -ccc-host-triple unknown -rewrite-objc %s -o - -### 2>&1 | \
|
||||
|
|
Loading…
Reference in New Issue