summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization/ASTReader.cpp
diff options
context:
space:
mode:
authorYaxun Liu <Yaxun.Liu@amd.com>2016-12-16 21:23:55 +0000
committerYaxun Liu <Yaxun.Liu@amd.com>2016-12-16 21:23:55 +0000
commit35f6d66b0d4da029fbd2d6f97cd9121d59d20322 (patch)
tree5f5a561a7cd7ef8f164bcdb3431e13f8a9de677b /clang/lib/Serialization/ASTReader.cpp
parent40281846a1972e69c0a1bc12c0584fa88391c942 (diff)
downloadbcm5719-llvm-35f6d66b0d4da029fbd2d6f97cd9121d59d20322.tar.gz
bcm5719-llvm-35f6d66b0d4da029fbd2d6f97cd9121d59d20322.zip
Revert r289979 due to regressions
llvm-svn: 289991
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
-rw-r--r--clang/lib/Serialization/ASTReader.cpp45
1 files changed, 10 insertions, 35 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index ba1a3894de8..8d6735c50d8 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -3164,38 +3164,8 @@ ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
break;
case OPENCL_EXTENSIONS:
- for (unsigned I = 0, E = Record.size(); I != E; ) {
- auto Name = ReadString(Record, I);
- OpenCLExtensions.OptMap[Name] = {
- static_cast<bool>(Record[I++]) /* Supported */,
- static_cast<bool>(Record[I++]) /* Enabled */,
- static_cast<unsigned>(Record[I++]) /* Avail */,
- static_cast<unsigned>(Record[I++]) /* Core */};
- }
- break;
-
- case OPENCL_EXTENSION_TYPES:
- for (unsigned I = 0, E = Record.size(); I != E;) {
- auto TypeID = static_cast<::TypeID>(Record[I++]);
- auto *Type = GetType(TypeID).getTypePtr();
- auto NumExt = static_cast<unsigned>(Record[I++]);
- for (unsigned II = 0; II != NumExt; ++II) {
- auto Ext = ReadString(Record, I);
- OpenCLTypeExtMap[Type].insert(Ext);
- }
- }
- break;
-
- case OPENCL_EXTENSION_DECLS:
- for (unsigned I = 0, E = Record.size(); I != E;) {
- auto DeclID = static_cast<::DeclID>(Record[I++]);
- auto *Decl = GetDecl(DeclID);
- auto NumExt = static_cast<unsigned>(Record[I++]);
- for (unsigned II = 0; II != NumExt; ++II) {
- auto Ext = ReadString(Record, I);
- OpenCLDeclExtMap[Decl].insert(Ext);
- }
- }
+ // Later tables overwrite earlier ones.
+ OpenCLExtensions.swap(Record);
break;
case TENTATIVE_DEFINITIONS:
@@ -7121,9 +7091,14 @@ void ASTReader::InitializeSema(Sema &S) {
SemaObj->FPFeatures.fp_contract = FPPragmaOptions[0];
}
- SemaObj->OpenCLFeatures.copy(OpenCLExtensions);
- SemaObj->OpenCLTypeExtMap = OpenCLTypeExtMap;
- SemaObj->OpenCLDeclExtMap = OpenCLDeclExtMap;
+ // FIXME: What happens if these are changed by a module import?
+ if (!OpenCLExtensions.empty()) {
+ unsigned I = 0;
+#define OPENCLEXT(nm) SemaObj->OpenCLFeatures.nm = OpenCLExtensions[I++];
+#include "clang/Basic/OpenCLExtensions.def"
+
+ assert(OpenCLExtensions.size() == I && "Wrong number of OPENCL_EXTENSIONS");
+ }
UpdateSema();
}
OpenPOWER on IntegriCloud