diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/clang/Basic/DiagnosticFrontendKinds.td | 85 | ||||
-rw-r--r-- | include/clang/Frontend/PCHBitCodes.h | 14 | ||||
-rw-r--r-- | include/clang/Frontend/PCHReader.h | 14 | ||||
-rw-r--r-- | include/clang/Frontend/PCHWriter.h | 1 |
4 files changed, 107 insertions, 7 deletions
diff --git a/include/clang/Basic/DiagnosticFrontendKinds.td b/include/clang/Basic/DiagnosticFrontendKinds.td index e4e12fd98e..47a873148d 100644 --- a/include/clang/Basic/DiagnosticFrontendKinds.td +++ b/include/clang/Basic/DiagnosticFrontendKinds.td @@ -22,4 +22,89 @@ def note_fixit_failed : Note< def note_fixit_unfixed_error : Note<"FIX-IT detected an error it cannot fix">; def warn_fixit_no_changes : Note< "FIX-IT detected errors it could not fix; no output will be generated">; + +// PCH reader +def note_ignoring_pch : Note< + "ignoring precompiled header '%0'">; +def warn_pch_c99 : Error< + "C99 support was %select{disabled|enabled}0 in PCH file but is " + "currently %select{disabled|enabled}1">; +def warn_pch_cplusplus : Error< + "C++ support was %select{disabled|enabled}0 in PCH file but is " + "currently %select{disabled|enabled}1">; +def warn_pch_cplusplus0x : Error< + "C++0x support was %select{disabled|enabled}0 in PCH file but is " + "currently %select{disabled|enabled}1">; +def warn_pch_objective_c : Error< + "Objective-C support was %select{disabled|enabled}0 in PCH file but is " + "currently %select{disabled|enabled}1">; +def warn_pch_objective_c2 : Error< + "Objective-C 2.0 support was %select{disabled|enabled}0 in PCH file but " + "is currently %select{disabled|enabled}1">; +def warn_pch_nonfragile_abi : Error< + "PCH file was compiled with the %select{32-bit|non-fragile}0 Objective-C " + "ABI but the %select{32-bit|non-fragile}1 Objective-C ABI is selected">; +def warn_pch_extensions : Warning< + "extensions were %select{enabled|disabled}0 in PCH file but are " + "currently %select{enabled|disabled}1">; +def warn_pch_gnu_extensions : Warning< + "GNU extensions were %select{disabled|enabled}0 in PCH file but are " + "currently %select{disabled|enabled}1">; +def warn_pch_microsoft_extensions : Warning< + "Microsoft extensions were %select{disabled|enabled}0 in PCH file but are " + "currently %select{disabled|enabled}1">; +def warn_pch_heinous_extensions : Warning< + "heinous extensions were %select{disabled|enabled}0 in PCH file but are " + "currently %select{disabled|enabled}1">; +def warn_pch_lax_vector_conversions : Warning< + "lax vector conversions were %select{disabled|enabled}0 in PCH file but " + "are currently %select{disabled|enabled}1">; +def warn_pch_exceptions : Warning< + "exceptions were %select{disabled|enabled}0 in PCH file but " + "are currently %select{disabled|enabled}1">; +def warn_pch_objc_runtime : Warning< + "PCH file was compiled with the %select{NeXT|GNU}0 runtime but the " + "%select{NeXT|GNU}1 runtime is selected">; +def warn_pch_freestanding : Warning< + "PCH file was compiled with a %select{hosted|freestanding}0 " + "implementation but a %select{hosted|freestanding}1 implementation " + "is selected">; +def warn_pch_builtins : Warning< + "PCH file was compiled with builtins %select{enabled|disabled}0 but " + "builtins are currently %select{enabled|disabled}1">; +def warn_pch_thread_safe_statics : Warning< + "PCH file was compiled %select{without|with}0 thread-safe statics but" + "thread-safe statics are currently %select{disabled|enabled}1">; +def warn_pch_blocks : Warning< + "blocks were %select{disabled|enabled}0 in PCH file but " + "are currently %select{disabled|enabled}1">; +def warn_pch_math_errno : Warning< + "math functions %select{do not respect|respect}0 'errno' in PCH " + "file but they are currently set to %select{not respect|respect}1 " + "'errno'">; +def warn_pch_overflow_checking : Warning< + "signed integer overflow checking was %select{disabled|enabled}0 in PCH " + "file but is currently %select{disabled|enabled}1">; +def warn_pch_optimize : Warning< + "the macro '__OPTIMIZE__' was %select{not defined|defined}0 in " + "the PCH file but is currently %select{undefined|defined}1">; +def warn_pch_optimize_size : Warning< + "the macro '__OPTIMIZE_SIZE__' was %select{not defined|defined}0 in " + "the PCH file but is currently %select{undefined|defined}1">; +def warn_pch_static : Warning< + "the PCH file was compiled %select{dynamic|static}0 but the " + "current translation unit is being compiled as %select{dynamic|static}1">; +def warn_pch_pic_level : Warning< + "PCH file was compiled with PIC level %0, but the current translation " + "unit will be compiled with PIC level %1">; +def warn_pch_gnu_inline : Warning< + "PCH file was compiled with %select{C99|GNU|}0 inline semantics but " + "%select{C99|GNU}1 inline semantics are currently selected">; +def warn_pch_no_inline : Warning< + "the macro '__NO_INLINE__' was %select{not defined|defined}0 in " + "the PCH file but is currently %select{undefined|defined}1">; +def warn_pch_gc_mode : Warning< + "the PCH file was built with %select{no||hybrid}0 garbage collection but " + "the current translation unit will compiled with %select{no||hybrid}1 " + "garbage collection">; } diff --git a/include/clang/Frontend/PCHBitCodes.h b/include/clang/Frontend/PCHBitCodes.h index 4e66d2938d..624c5e4875 100644 --- a/include/clang/Frontend/PCHBitCodes.h +++ b/include/clang/Frontend/PCHBitCodes.h @@ -48,10 +48,6 @@ namespace clang { /// full PCH block. PCH_BLOCK_ID = llvm::bitc::FIRST_APPLICATION_BLOCKID, - /// \brief The block containing information about the language - /// options used to build this precompiled header. - LANGUAGE_OPTIONS_BLOCK_ID, - /// \brief The block containing information about the source /// manager. SOURCE_MANAGER_BLOCK_ID, @@ -96,7 +92,15 @@ namespace clang { /// record, after subtracting one to account for the use of /// declaration ID 0 for a NULL declaration pointer. Index 0 is /// reserved for the translation unit declaration. - DECL_OFFSET = 2 + DECL_OFFSET = 2, + + /// \brief Record code for the language options table. + /// + /// The record with this code contains the contents of the + /// LangOptions structure. We serialize the entire contents of + /// the structure, and let the reader decide which options are + /// actually important to check. + LANGUAGE_OPTIONS = 3 }; /// \brief Record types used within a source manager block. diff --git a/include/clang/Frontend/PCHReader.h b/include/clang/Frontend/PCHReader.h index 52354e3eb3..498d5fffeb 100644 --- a/include/clang/Frontend/PCHReader.h +++ b/include/clang/Frontend/PCHReader.h @@ -13,10 +13,11 @@ #ifndef LLVM_CLANG_FRONTEND_PCH_READER_H #define LLVM_CLANG_FRONTEND_PCH_READER_H +#include "clang/Frontend/PCHBitCodes.h" #include "clang/AST/DeclarationName.h" #include "clang/AST/ExternalASTSource.h" #include "clang/AST/Type.h" -#include "clang/Frontend/PCHBitCodes.h" +#include "clang/Basic/Diagnostic.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/SmallVector.h" @@ -59,6 +60,9 @@ class PCHReader : public ExternalASTSource { /// \brief The bitstream reader from which we'll read the PCH file. llvm::BitstreamReader Stream; + /// \brief The file name of the PCH file. + std::string FileName; + /// \brief The memory buffer that stores the data associated with /// this PCH file. llvm::OwningPtr<llvm::MemoryBuffer> Buffer; @@ -99,9 +103,12 @@ class PCHReader : public ExternalASTSource { /// DeclContext. DeclContextOffsetsMap DeclContextOffsets; - bool ReadPCHBlock(); + enum PCHReadResult { Success, Failure, IgnorePCH }; + + PCHReadResult ReadPCHBlock(); bool ReadSourceManagerBlock(); + bool ParseLanguageOptions(const llvm::SmallVectorImpl<uint64_t> &Record); QualType ReadTypeRecord(uint64_t Offset); void LoadedDecl(unsigned Index, Decl *D); Decl *ReadDeclRecord(uint64_t Offset, unsigned Index); @@ -165,6 +172,9 @@ public: /// \brief Print some statistics about PCH usage. virtual void PrintStats(); + /// \brief Report a diagnostic. + DiagnosticBuilder Diag(unsigned DiagID); + const IdentifierInfo *GetIdentifierInfo(const RecordData &Record, unsigned &Idx); DeclarationName ReadDeclarationName(const RecordData &Record, unsigned &Idx); diff --git a/include/clang/Frontend/PCHWriter.h b/include/clang/Frontend/PCHWriter.h index 41aa91ddf1..df5175159d 100644 --- a/include/clang/Frontend/PCHWriter.h +++ b/include/clang/Frontend/PCHWriter.h @@ -76,6 +76,7 @@ class PCHWriter { /// \brief The type ID that will be assigned to the next new type. pch::TypeID NextTypeID; + void WriteLanguageOptions(const LangOptions &LangOpts); void WriteSourceManagerBlock(SourceManager &SourceMgr); void WritePreprocessor(const Preprocessor &PP); void WriteType(const Type *T); |