summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/include/clang/AST/ODRHash.h1
-rw-r--r--clang/lib/AST/ODRHash.cpp9
-rw-r--r--clang/test/Modules/Inputs/odr_hash-elaborated-types/first.h6
-rw-r--r--clang/test/Modules/Inputs/odr_hash-elaborated-types/module.modulemap5
-rw-r--r--clang/test/Modules/Inputs/odr_hash-elaborated-types/second.h6
-rw-r--r--clang/test/Modules/Inputs/odr_hash-elaborated-types/textual_stat.h11
-rw-r--r--clang/test/Modules/Inputs/odr_hash-elaborated-types/textual_time.h6
-rw-r--r--clang/test/Modules/odr_hash-elaborated-types.cpp12
8 files changed, 46 insertions, 10 deletions
diff --git a/clang/include/clang/AST/ODRHash.h b/clang/include/clang/AST/ODRHash.h
index c9e80278c7d..d4cddb8dfd7 100644
--- a/clang/include/clang/AST/ODRHash.h
+++ b/clang/include/clang/AST/ODRHash.h
@@ -40,7 +40,6 @@ class ODRHash {
// Use DenseMaps to convert from DeclarationName and Type pointers
// to an index value.
llvm::DenseMap<DeclarationName, unsigned> DeclNameMap;
- llvm::DenseMap<const Type*, unsigned> TypeMap;
// Save space by processing bools at the end.
llvm::SmallVector<bool, 128> Bools;
diff --git a/clang/lib/AST/ODRHash.cpp b/clang/lib/AST/ODRHash.cpp
index 126b6de25e4..ef1235e1d8c 100644
--- a/clang/lib/AST/ODRHash.cpp
+++ b/clang/lib/AST/ODRHash.cpp
@@ -180,7 +180,6 @@ void ODRHash::AddTemplateParameterList(const TemplateParameterList *TPL) {
void ODRHash::clear() {
DeclNameMap.clear();
- TypeMap.clear();
Bools.clear();
ID.clear();
}
@@ -770,14 +769,6 @@ public:
void ODRHash::AddType(const Type *T) {
assert(T && "Expecting non-null pointer.");
- auto Result = TypeMap.insert(std::make_pair(T, TypeMap.size()));
- ID.AddInteger(Result.first->second);
- // On first encounter of a Type pointer, process it. Every time afterwards,
- // only the index value is needed.
- if (!Result.second) {
- return;
- }
-
ODRTypeVisitor(ID, *this).Visit(T);
}
diff --git a/clang/test/Modules/Inputs/odr_hash-elaborated-types/first.h b/clang/test/Modules/Inputs/odr_hash-elaborated-types/first.h
new file mode 100644
index 00000000000..d2c4a033a16
--- /dev/null
+++ b/clang/test/Modules/Inputs/odr_hash-elaborated-types/first.h
@@ -0,0 +1,6 @@
+#ifndef FIRST
+#define FIRST
+
+#include "textual_time.h"
+
+#endif
diff --git a/clang/test/Modules/Inputs/odr_hash-elaborated-types/module.modulemap b/clang/test/Modules/Inputs/odr_hash-elaborated-types/module.modulemap
new file mode 100644
index 00000000000..94cb4c11191
--- /dev/null
+++ b/clang/test/Modules/Inputs/odr_hash-elaborated-types/module.modulemap
@@ -0,0 +1,5 @@
+module M {
+ module first { header "first.h" export *}
+ module second { header "second.h" export *}
+ export *
+}
diff --git a/clang/test/Modules/Inputs/odr_hash-elaborated-types/second.h b/clang/test/Modules/Inputs/odr_hash-elaborated-types/second.h
new file mode 100644
index 00000000000..577cf113457
--- /dev/null
+++ b/clang/test/Modules/Inputs/odr_hash-elaborated-types/second.h
@@ -0,0 +1,6 @@
+#ifndef SECOND
+#define SECOND
+
+#include "textual_stat.h"
+
+#endif
diff --git a/clang/test/Modules/Inputs/odr_hash-elaborated-types/textual_stat.h b/clang/test/Modules/Inputs/odr_hash-elaborated-types/textual_stat.h
new file mode 100644
index 00000000000..5dad510f9eb
--- /dev/null
+++ b/clang/test/Modules/Inputs/odr_hash-elaborated-types/textual_stat.h
@@ -0,0 +1,11 @@
+#ifndef _SYS_STAT_H
+#define _SYS_STAT_H
+
+#include "textual_time.h"
+
+struct stat {
+ struct timespec st_atim;
+ struct timespec st_mtim;
+};
+
+#endif
diff --git a/clang/test/Modules/Inputs/odr_hash-elaborated-types/textual_time.h b/clang/test/Modules/Inputs/odr_hash-elaborated-types/textual_time.h
new file mode 100644
index 00000000000..2a2a89c5a7e
--- /dev/null
+++ b/clang/test/Modules/Inputs/odr_hash-elaborated-types/textual_time.h
@@ -0,0 +1,6 @@
+#ifndef _TIME_H
+#define _TIME_H
+
+struct timespec { };
+
+#endif
diff --git a/clang/test/Modules/odr_hash-elaborated-types.cpp b/clang/test/Modules/odr_hash-elaborated-types.cpp
new file mode 100644
index 00000000000..7dd11ac6d7f
--- /dev/null
+++ b/clang/test/Modules/odr_hash-elaborated-types.cpp
@@ -0,0 +1,12 @@
+// RUN: rm -rf %t
+// RUN: %clang_cc1 -std=c++1z -I%S/Inputs/odr_hash-elaborated-types -verify %s
+// RUN: %clang_cc1 -std=c++1z -fmodules -fmodules-local-submodule-visibility -fmodule-map-file=%S/Inputs/odr_hash-elaborated-types/module.modulemap -fmodules-cache-path=%t -x c++ -I%S/Inputs/odr_hash-elaborated-types -verify %s
+
+#include "textual_stat.h"
+
+#include "first.h"
+#include "second.h"
+
+void use() { struct stat value; }
+
+// expected-no-diagnostics
OpenPOWER on IntegriCloud