forked from OSchip/llvm-project
Teach the AST reader and writer to preserve the __DEPRECATED bit in
language options, and warn when reading an AST with a different value for the bit. There doesn't appear to be a good way to test this (commenting out similar other language options doesn't break anything) but if folks have suggestions on tests I'm happy to add them. llvm-svn: 130071
This commit is contained in:
parent
1a180156b6
commit
7ffce73fc8
|
@ -235,6 +235,9 @@ def warn_pch_gnu_inline : Error<
|
|||
def warn_pch_no_inline : Error<
|
||||
"the macro '__NO_INLINE__' was %select{not defined|defined}0 in "
|
||||
"the PCH file but is currently %select{undefined|defined}1">;
|
||||
def warn_pch_deprecated : Error<
|
||||
"the macro '__DEPRECATED' was %select{not defined|defined}0 in "
|
||||
"the PCH file but is currently %select{undefined|defined}1">;
|
||||
def warn_pch_gc_mode : Error<
|
||||
"the PCH file was built with %select{no||hybrid}0 garbage collection but "
|
||||
"the current translation unit will compiled with %select{no||hybrid}1 "
|
||||
|
|
|
@ -129,6 +129,7 @@ PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts) {
|
|||
PARSE_LANGOPT_IMPORTANT(PICLevel, diag::warn_pch_pic_level);
|
||||
PARSE_LANGOPT_IMPORTANT(GNUInline, diag::warn_pch_gnu_inline);
|
||||
PARSE_LANGOPT_IMPORTANT(NoInline, diag::warn_pch_no_inline);
|
||||
PARSE_LANGOPT_IMPORTANT(Deprecated, diag::warn_pch_deprecated);
|
||||
PARSE_LANGOPT_IMPORTANT(AccessControl, diag::warn_pch_access_control);
|
||||
PARSE_LANGOPT_IMPORTANT(CharIsSigned, diag::warn_pch_char_signed);
|
||||
PARSE_LANGOPT_IMPORTANT(ShortWChar, diag::warn_pch_short_wchar);
|
||||
|
@ -2838,6 +2839,7 @@ bool ASTReader::ParseLanguageOptions(
|
|||
PARSE_LANGOPT(PICLevel);
|
||||
PARSE_LANGOPT(GNUInline);
|
||||
PARSE_LANGOPT(NoInline);
|
||||
PARSE_LANGOPT(Deprecated);
|
||||
PARSE_LANGOPT(AccessControl);
|
||||
PARSE_LANGOPT(CharIsSigned);
|
||||
PARSE_LANGOPT(ShortWChar);
|
||||
|
|
|
@ -1063,6 +1063,7 @@ void ASTWriter::WriteLanguageOptions(const LangOptions &LangOpts) {
|
|||
Record.push_back(LangOpts.GNUInline); // Should GNU inline semantics be
|
||||
// used (instead of C99 semantics).
|
||||
Record.push_back(LangOpts.NoInline); // Should __NO_INLINE__ be defined.
|
||||
Record.push_back(LangOpts.Deprecated); // Should __DEPRECATED be defined.
|
||||
Record.push_back(LangOpts.AccessControl); // Whether C++ access control should
|
||||
// be enabled.
|
||||
Record.push_back(LangOpts.CharIsSigned); // Whether char is a signed or
|
||||
|
|
Loading…
Reference in New Issue