Reapply "[clang][cli] Report result of ParseLangArgs"
This reverts commit6039f821
and reappliesbff6d9bb
. Clang's Index/implicit-attrs.m test invokes c-index-test with -fobjc-arc. This flag is not compatible with -fobjc-runtime=gcc, which gets implied on Linux. The original commit uncovered this by correctly reporting issues when parsing -cc1 command line. This commit fixes the test to explicitly provide ObjectiveC runtime compatible with ARC.
This commit is contained in:
parent
05d7d6949c
commit
e22677bbdb
|
@ -806,6 +806,7 @@ public:
|
||||||
return FatalErrorOccurred || UnrecoverableErrorOccurred;
|
return FatalErrorOccurred || UnrecoverableErrorOccurred;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned getNumErrors() const { return NumErrors; }
|
||||||
unsigned getNumWarnings() const { return NumWarnings; }
|
unsigned getNumWarnings() const { return NumWarnings; }
|
||||||
|
|
||||||
void setNumWarnings(unsigned NumWarnings) {
|
void setNumWarnings(unsigned NumWarnings) {
|
||||||
|
|
|
@ -249,7 +249,7 @@ private:
|
||||||
DiagnosticsEngine &Diags);
|
DiagnosticsEngine &Diags);
|
||||||
|
|
||||||
/// Parse command line options that map to LangOptions.
|
/// Parse command line options that map to LangOptions.
|
||||||
static void ParseLangArgs(LangOptions &Opts, llvm::opt::ArgList &Args,
|
static bool ParseLangArgs(LangOptions &Opts, llvm::opt::ArgList &Args,
|
||||||
InputKind IK, const llvm::Triple &T,
|
InputKind IK, const llvm::Triple &T,
|
||||||
std::vector<std::string> &Includes,
|
std::vector<std::string> &Includes,
|
||||||
DiagnosticsEngine &Diags);
|
DiagnosticsEngine &Diags);
|
||||||
|
|
|
@ -2642,10 +2642,12 @@ static void GenerateLangArgs(const LangOptions &Opts,
|
||||||
GenerateArg(Args, OPT_fdeclare_opencl_builtins, SA);
|
GenerateArg(Args, OPT_fdeclare_opencl_builtins, SA);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
|
bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
|
||||||
InputKind IK, const llvm::Triple &T,
|
InputKind IK, const llvm::Triple &T,
|
||||||
std::vector<std::string> &Includes,
|
std::vector<std::string> &Includes,
|
||||||
DiagnosticsEngine &Diags) {
|
DiagnosticsEngine &Diags) {
|
||||||
|
unsigned NumErrorsBefore = Diags.getNumErrors();
|
||||||
|
|
||||||
// FIXME: Cleanup per-file based stuff.
|
// FIXME: Cleanup per-file based stuff.
|
||||||
LangStandard::Kind LangStd = LangStandard::lang_unspecified;
|
LangStandard::Kind LangStd = LangStandard::lang_unspecified;
|
||||||
if (const Arg *A = Args.getLastArg(OPT_std_EQ)) {
|
if (const Arg *A = Args.getLastArg(OPT_std_EQ)) {
|
||||||
|
@ -3076,6 +3078,8 @@ void CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Success && Diags.getNumErrors() == NumErrorsBefore;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool isStrictlyPreprocessorAction(frontend::ActionKind Action) {
|
static bool isStrictlyPreprocessorAction(frontend::ActionKind Action) {
|
||||||
|
@ -3416,8 +3420,8 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,
|
||||||
} else {
|
} else {
|
||||||
// Other LangOpts are only initialized when the input is not AST or LLVM IR.
|
// Other LangOpts are only initialized when the input is not AST or LLVM IR.
|
||||||
// FIXME: Should we really be calling this for an Language::Asm input?
|
// FIXME: Should we really be calling this for an Language::Asm input?
|
||||||
ParseLangArgs(LangOpts, Args, DashX, T, Res.getPreprocessorOpts().Includes,
|
Success &= ParseLangArgs(LangOpts, Args, DashX, T,
|
||||||
Diags);
|
Res.getPreprocessorOpts().Includes, Diags);
|
||||||
if (Res.getFrontendOpts().ProgramAction == frontend::RewriteObjC)
|
if (Res.getFrontendOpts().ProgramAction == frontend::RewriteObjC)
|
||||||
LangOpts.ObjCExceptions = 1;
|
LangOpts.ObjCExceptions = 1;
|
||||||
if (T.isOSDarwin() && DashX.isPreprocessed()) {
|
if (T.isOSDarwin() && DashX.isPreprocessed()) {
|
||||||
|
|
|
@ -2,5 +2,5 @@
|
||||||
-(instancetype)init;
|
-(instancetype)init;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// RUN: env CINDEXTEST_VISIT_IMPLICIT_ATTRIBUTES=1 c-index-test -test-print-decl-attributes %s -fobjc-arc | FileCheck %s
|
// RUN: env CINDEXTEST_VISIT_IMPLICIT_ATTRIBUTES=1 c-index-test -test-print-decl-attributes %s -fobjc-runtime=macosx-10.7 -fobjc-arc | FileCheck %s
|
||||||
// CHECK: ObjCInstanceMethodDecl=init:2:16 attribute(ns_consumes_self)= attribute(ns_returns_retained)=
|
// CHECK: ObjCInstanceMethodDecl=init:2:16 attribute(ns_consumes_self)= attribute(ns_returns_retained)=
|
||||||
|
|
Loading…
Reference in New Issue