diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -2885,10 +2885,16 @@ !Args.hasArg(OPT_fno_concept_satisfaction_caching); if (Args.hasArg(OPT_fconcepts_ts)) Diags.Report(diag::warn_fe_concepts_ts_flag); + + // Recovery AST still heavily relies on dependent-type machinery, so C++ only + // for now. Opts.RecoveryAST = - Args.hasFlag(OPT_frecovery_ast, OPT_fno_recovery_ast, false); + Args.hasFlag(OPT_frecovery_ast, OPT_fno_recovery_ast, false) && + Opts.CPlusPlus; Opts.RecoveryASTType = -+ Args.hasFlag(OPT_frecovery_ast_type, OPT_fno_recovery_ast_type, false); + Args.hasFlag(OPT_frecovery_ast_type, OPT_fno_recovery_ast_type, false) && + Opts.CPlusPlus; + Opts.HeinousExtensions = Args.hasArg(OPT_fheinous_gnu_extensions); Opts.AccessControl = !Args.hasArg(OPT_fno_access_control); Opts.ElideConstructors = !Args.hasArg(OPT_fno_elide_constructors);