summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-10-10 02:12:47 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-10-10 02:12:47 +0000
commite445c7236e41d854736fec37c77c915661edb8cf (patch)
tree333455e82d022c9dc0d1934b7a6ce5556667b207 /clang/lib
parent130190ffffe5946276db9ee09133b58af1815c8b (diff)
downloadbcm5719-llvm-e445c7236e41d854736fec37c77c915661edb8cf.tar.gz
bcm5719-llvm-e445c7236e41d854736fec37c77c915661edb8cf.zip
When indexing a module file, for the ppIncludedFile callback give
an invalid location if the location points to the synthetic buffer for the module input. llvm-svn: 165592
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Frontend/ASTUnit.cpp16
-rw-r--r--clang/lib/Serialization/ASTReader.cpp18
2 files changed, 21 insertions, 13 deletions
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp
index 136e72a6c6c..6a4f0eb6d73 100644
--- a/clang/lib/Frontend/ASTUnit.cpp
+++ b/clang/lib/Frontend/ASTUnit.cpp
@@ -512,8 +512,9 @@ public:
Predefines(Predefines), Counter(Counter), NumHeaderInfos(0),
InitializedLanguage(false) {}
- virtual bool ReadLanguageOptions(const LangOptions &LangOpts) {
- if (InitializedLanguage)
+ virtual bool ReadLanguageOptions(const serialization::ModuleFile &M,
+ const LangOptions &LangOpts) {
+ if (InitializedLanguage || M.Kind != serialization::MK_MainFile)
return false;
LangOpt = LangOpts;
@@ -530,9 +531,10 @@ public:
return false;
}
- virtual bool ReadTargetTriple(StringRef Triple) {
+ virtual bool ReadTargetTriple(const serialization::ModuleFile &M,
+ StringRef Triple) {
// If we've already initialized the target, don't do it again.
- if (Target)
+ if (Target || M.Kind != serialization::MK_MainFile)
return false;
// FIXME: This is broken, we should store the TargetOptions in the AST file.
@@ -563,7 +565,7 @@ public:
HSI.setHeaderFileInfoForUID(HFI, NumHeaderInfos++);
}
- virtual void ReadCounter(unsigned Value) {
+ virtual void ReadCounter(const serialization::ModuleFile &M, unsigned Value) {
Counter = Value;
}
@@ -2852,6 +2854,10 @@ const FileEntry *ASTUnit::getPCHFile() {
return 0;
}
+bool ASTUnit::isModuleFile() {
+ return isMainFileAST() && !ASTFileLangOpts.CurrentModule.empty();
+}
+
void ASTUnit::PreambleData::countLines() const {
NumLines = 0;
if (empty())
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index d060e795ded..4e6673bedd1 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -63,7 +63,8 @@ using namespace clang::serialization::reader;
ASTReaderListener::~ASTReaderListener() {}
bool
-PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts) {
+PCHValidator::ReadLanguageOptions(const ModuleFile &M,
+ const LangOptions &LangOpts) {
const LangOptions &PPLangOpts = PP.getLangOpts();
#define LANGOPT(Name, Bits, Default, Description) \
@@ -100,7 +101,7 @@ PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts) {
return false;
}
-bool PCHValidator::ReadTargetTriple(StringRef Triple) {
+bool PCHValidator::ReadTargetTriple(const ModuleFile &M, StringRef Triple) {
if (Triple == PP.getTargetInfo().getTriple().str())
return false;
@@ -408,7 +409,7 @@ void PCHValidator::ReadHeaderFileInfo(const HeaderFileInfo &HFI,
++NumHeaderInfos;
}
-void PCHValidator::ReadCounter(unsigned Value) {
+void PCHValidator::ReadCounter(const ModuleFile &M, unsigned Value) {
PP.setCounterValue(Value);
}
@@ -1828,7 +1829,7 @@ ASTReader::ReadASTBlock(ModuleFile &F) {
RelocatablePCH = Record[4];
if (Listener) {
std::string TargetTriple(BlobStart, BlobLen);
- if (Listener->ReadTargetTriple(TargetTriple))
+ if (Listener->ReadTargetTriple(F, TargetTriple))
return IgnorePCH;
}
break;
@@ -1938,7 +1939,7 @@ ASTReader::ReadASTBlock(ModuleFile &F) {
}
case LANGUAGE_OPTIONS:
- if (ParseLanguageOptions(Record) && !DisableValidation)
+ if (ParseLanguageOptions(F, Record) && !DisableValidation)
return IgnorePCH;
break;
@@ -2083,7 +2084,7 @@ ASTReader::ReadASTBlock(ModuleFile &F) {
case PP_COUNTER_VALUE:
if (!Record.empty() && Listener)
- Listener->ReadCounter(Record[0]);
+ Listener->ReadCounter(F, Record[0]);
break;
case FILE_SORTED_DECLS:
@@ -3430,7 +3431,8 @@ ASTReader::ASTReadResult ASTReader::ReadSubmoduleBlock(ModuleFile &F) {
/// them to the AST listener if one is set.
///
/// \returns true if the listener deems the file unacceptable, false otherwise.
-bool ASTReader::ParseLanguageOptions(const RecordData &Record) {
+bool ASTReader::ParseLanguageOptions(const ModuleFile &M,
+ const RecordData &Record) {
if (Listener) {
LangOptions LangOpts;
unsigned Idx = 0;
@@ -3447,7 +3449,7 @@ bool ASTReader::ParseLanguageOptions(const RecordData &Record) {
unsigned Length = Record[Idx++];
LangOpts.CurrentModule.assign(Record.begin() + Idx,
Record.begin() + Idx + Length);
- return Listener->ReadLanguageOptions(LangOpts);
+ return Listener->ReadLanguageOptions(M, LangOpts);
}
return false;
OpenPOWER on IntegriCloud