forked from OSchip/llvm-project
Introduce -f{no-}spell-checking options to enable/disable
spell-checking. By default, spell-checking is enabled for Clang (obviously) but disabled in CIndex for performance reasons. llvm-svn: 107992
This commit is contained in:
parent
bd953d1805
commit
8ed0c0b99d
|
@ -102,6 +102,8 @@ public:
|
||||||
unsigned InlineVisibilityHidden : 1; // Whether inline C++ methods have
|
unsigned InlineVisibilityHidden : 1; // Whether inline C++ methods have
|
||||||
// hidden visibility by default.
|
// hidden visibility by default.
|
||||||
|
|
||||||
|
unsigned SpellChecking : 1; // Whether to perform spell-checking for error
|
||||||
|
// recovery.
|
||||||
// FIXME: This is just a temporary option, for testing purposes.
|
// FIXME: This is just a temporary option, for testing purposes.
|
||||||
unsigned NoBitFieldTypeAlign : 1;
|
unsigned NoBitFieldTypeAlign : 1;
|
||||||
|
|
||||||
|
@ -179,6 +181,7 @@ public:
|
||||||
CatchUndefined = 0;
|
CatchUndefined = 0;
|
||||||
DumpRecordLayouts = 0;
|
DumpRecordLayouts = 0;
|
||||||
DumpVTableLayouts = 0;
|
DumpVTableLayouts = 0;
|
||||||
|
SpellChecking = 1;
|
||||||
NoBitFieldTypeAlign = 0;
|
NoBitFieldTypeAlign = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -411,6 +411,8 @@ def fno_operator_names : Flag<"-fno-operator-names">,
|
||||||
HelpText<"Do not treat C++ operator name keywords as synonyms for operators">;
|
HelpText<"Do not treat C++ operator name keywords as synonyms for operators">;
|
||||||
def fno_signed_char : Flag<"-fno-signed-char">,
|
def fno_signed_char : Flag<"-fno-signed-char">,
|
||||||
HelpText<"Char is unsigned">;
|
HelpText<"Char is unsigned">;
|
||||||
|
def fno_spell_checking : Flag<"-fno-spell-checking">,
|
||||||
|
HelpText<"Disable spell-checking">;
|
||||||
def fno_use_cxa_atexit : Flag<"-fno-use-cxa-atexit">,
|
def fno_use_cxa_atexit : Flag<"-fno-use-cxa-atexit">,
|
||||||
HelpText<"Don't use __cxa_atexit for calling destructors">;
|
HelpText<"Don't use __cxa_atexit for calling destructors">;
|
||||||
def fconstant_string_class : Separate<"-fconstant-string-class">,
|
def fconstant_string_class : Separate<"-fconstant-string-class">,
|
||||||
|
|
|
@ -326,6 +326,7 @@ def fno_pascal_strings : Flag<"-fno-pascal-strings">, Group<f_Group>;
|
||||||
def fno_rtti : Flag<"-fno-rtti">, Group<f_Group>;
|
def fno_rtti : Flag<"-fno-rtti">, Group<f_Group>;
|
||||||
def fno_show_column : Flag<"-fno-show-column">, Group<f_Group>;
|
def fno_show_column : Flag<"-fno-show-column">, Group<f_Group>;
|
||||||
def fno_show_source_location : Flag<"-fno-show-source-location">, Group<f_Group>;
|
def fno_show_source_location : Flag<"-fno-show-source-location">, Group<f_Group>;
|
||||||
|
def fno_spell_checking : Flag<"-fno-spell-checking">, Group<f_Group>;
|
||||||
def fno_stack_protector : Flag<"-fno-stack-protector">, Group<f_Group>;
|
def fno_stack_protector : Flag<"-fno-stack-protector">, Group<f_Group>;
|
||||||
def fno_strict_aliasing : Flag<"-fno-strict-aliasing">, Group<clang_ignored_f_Group>;
|
def fno_strict_aliasing : Flag<"-fno-strict-aliasing">, Group<clang_ignored_f_Group>;
|
||||||
def fno_threadsafe_statics : Flag<"-fno-threadsafe-statics">, Group<f_Group>;
|
def fno_threadsafe_statics : Flag<"-fno-threadsafe-statics">, Group<f_Group>;
|
||||||
|
@ -365,6 +366,7 @@ def freorder_blocks : Flag<"-freorder-blocks">, Group<clang_ignored_f_Group>;
|
||||||
def fshort_wchar : Flag<"-fshort-wchar">, Group<f_Group>;
|
def fshort_wchar : Flag<"-fshort-wchar">, Group<f_Group>;
|
||||||
def fshow_overloads_EQ : Joined<"-fshow-overloads=">, Group<f_Group>;
|
def fshow_overloads_EQ : Joined<"-fshow-overloads=">, Group<f_Group>;
|
||||||
def fshow_source_location : Flag<"-fshow-source-location">, Group<f_Group>;
|
def fshow_source_location : Flag<"-fshow-source-location">, Group<f_Group>;
|
||||||
|
def fspell_checking : Flag<"-fspell-checking">, Group<f_Group>;
|
||||||
def fsigned_bitfields : Flag<"-fsigned-bitfields">, Group<f_Group>;
|
def fsigned_bitfields : Flag<"-fsigned-bitfields">, Group<f_Group>;
|
||||||
def fsigned_char : Flag<"-fsigned-char">, Group<f_Group>;
|
def fsigned_char : Flag<"-fsigned-char">, Group<f_Group>;
|
||||||
def fstack_protector_all : Flag<"-fstack-protector-all">, Group<f_Group>;
|
def fstack_protector_all : Flag<"-fstack-protector-all">, Group<f_Group>;
|
||||||
|
|
|
@ -1401,6 +1401,10 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
||||||
options::OPT_fno_show_source_location))
|
options::OPT_fno_show_source_location))
|
||||||
CmdArgs.push_back("-fno-show-source-location");
|
CmdArgs.push_back("-fno-show-source-location");
|
||||||
|
|
||||||
|
if (!Args.hasFlag(options::OPT_fspell_checking,
|
||||||
|
options::OPT_fno_spell_checking))
|
||||||
|
CmdArgs.push_back("-fno-spell-checking");
|
||||||
|
|
||||||
if (Arg *A = Args.getLastArg(options::OPT_fshow_overloads_EQ))
|
if (Arg *A = Args.getLastArg(options::OPT_fshow_overloads_EQ))
|
||||||
A->render(Args, CmdArgs);
|
A->render(Args, CmdArgs);
|
||||||
|
|
||||||
|
|
|
@ -1321,6 +1321,7 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
|
||||||
Opts.Static = Args.hasArg(OPT_static_define);
|
Opts.Static = Args.hasArg(OPT_static_define);
|
||||||
Opts.DumpRecordLayouts = Args.hasArg(OPT_fdump_record_layouts);
|
Opts.DumpRecordLayouts = Args.hasArg(OPT_fdump_record_layouts);
|
||||||
Opts.DumpVTableLayouts = Args.hasArg(OPT_fdump_vtable_layouts);
|
Opts.DumpVTableLayouts = Args.hasArg(OPT_fdump_vtable_layouts);
|
||||||
|
Opts.SpellChecking = !Args.hasArg(OPT_fno_spell_checking);
|
||||||
Opts.NoBitFieldTypeAlign = Args.hasArg(OPT_fno_bitfield_type_align);
|
Opts.NoBitFieldTypeAlign = Args.hasArg(OPT_fno_bitfield_type_align);
|
||||||
Opts.OptimizeSize = 0;
|
Opts.OptimizeSize = 0;
|
||||||
|
|
||||||
|
|
|
@ -124,6 +124,7 @@ PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts) {
|
||||||
PARSE_LANGOPT_IMPORTANT(OpenCL, diag::warn_pch_opencl);
|
PARSE_LANGOPT_IMPORTANT(OpenCL, diag::warn_pch_opencl);
|
||||||
PARSE_LANGOPT_BENIGN(CatchUndefined);
|
PARSE_LANGOPT_BENIGN(CatchUndefined);
|
||||||
PARSE_LANGOPT_IMPORTANT(ElideConstructors, diag::warn_pch_elide_constructors);
|
PARSE_LANGOPT_IMPORTANT(ElideConstructors, diag::warn_pch_elide_constructors);
|
||||||
|
PARSE_LANGOPT_BENIGN(SpellChecking);
|
||||||
#undef PARSE_LANGOPT_IMPORTANT
|
#undef PARSE_LANGOPT_IMPORTANT
|
||||||
#undef PARSE_LANGOPT_BENIGN
|
#undef PARSE_LANGOPT_BENIGN
|
||||||
|
|
||||||
|
|
|
@ -869,6 +869,7 @@ void PCHWriter::WriteLanguageOptions(const LangOptions &LangOpts) {
|
||||||
Record.push_back(LangOpts.OpenCL);
|
Record.push_back(LangOpts.OpenCL);
|
||||||
Record.push_back(LangOpts.CatchUndefined);
|
Record.push_back(LangOpts.CatchUndefined);
|
||||||
Record.push_back(LangOpts.ElideConstructors);
|
Record.push_back(LangOpts.ElideConstructors);
|
||||||
|
Record.push_back(LangOpts.SpellChecking);
|
||||||
Stream.EmitRecord(pch::LANGUAGE_OPTIONS, Record);
|
Stream.EmitRecord(pch::LANGUAGE_OPTIONS, Record);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2726,7 +2726,7 @@ DeclarationName Sema::CorrectTypo(LookupResult &Res, Scope *S, CXXScopeSpec *SS,
|
||||||
bool EnteringContext,
|
bool EnteringContext,
|
||||||
CorrectTypoContext CTC,
|
CorrectTypoContext CTC,
|
||||||
const ObjCObjectPointerType *OPT) {
|
const ObjCObjectPointerType *OPT) {
|
||||||
if (Diags.hasFatalErrorOccurred())
|
if (Diags.hasFatalErrorOccurred() || !getLangOptions().SpellChecking)
|
||||||
return DeclarationName();
|
return DeclarationName();
|
||||||
|
|
||||||
// Provide a stop gap for files that are just seriously broken. Trying
|
// Provide a stop gap for files that are just seriously broken. Trying
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
// RUN: %clang_cc1 -fsyntax-only -fno-spell-checking -verify %s
|
||||||
|
typedef struct {
|
||||||
|
float x, y;
|
||||||
|
} Point;
|
||||||
|
|
||||||
|
point p1; // expected-error{{unknown type name 'point'}}
|
|
@ -1184,6 +1184,7 @@ clang_createTranslationUnitFromSourceFile(CXIndex CIdx,
|
||||||
// in the actual argument list.
|
// in the actual argument list.
|
||||||
if (source_filename)
|
if (source_filename)
|
||||||
Args.push_back(source_filename);
|
Args.push_back(source_filename);
|
||||||
|
Args.push_back("-fno-spell-checking");
|
||||||
Args.insert(Args.end(), command_line_args,
|
Args.insert(Args.end(), command_line_args,
|
||||||
command_line_args + num_command_line_args);
|
command_line_args + num_command_line_args);
|
||||||
Args.push_back("-Xclang");
|
Args.push_back("-Xclang");
|
||||||
|
@ -1247,6 +1248,7 @@ clang_createTranslationUnitFromSourceFile(CXIndex CIdx,
|
||||||
argv.push_back("-o");
|
argv.push_back("-o");
|
||||||
char astTmpFile[L_tmpnam];
|
char astTmpFile[L_tmpnam];
|
||||||
argv.push_back(tmpnam(astTmpFile));
|
argv.push_back(tmpnam(astTmpFile));
|
||||||
|
argv.push_back("-fno-spell-checking");
|
||||||
|
|
||||||
// Remap any unsaved files to temporary files.
|
// Remap any unsaved files to temporary files.
|
||||||
std::vector<llvm::sys::Path> TemporaryFiles;
|
std::vector<llvm::sys::Path> TemporaryFiles;
|
||||||
|
|
Loading…
Reference in New Issue