summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang-tools-extra/modularize/Modularize.cpp12
-rw-r--r--clang-tools-extra/test/modularize/Inputs/Anonymous.h11
-rw-r--r--clang-tools-extra/test/modularize/Inputs/NamespaceClasses.h20
-rw-r--r--clang-tools-extra/test/modularize/Inputs/SomeTypes.h22
-rw-r--r--clang-tools-extra/test/modularize/Inputs/TemplateClasses.h15
-rw-r--r--clang-tools-extra/test/modularize/NoProblemsAnonymous.modularize3
-rw-r--r--clang-tools-extra/test/modularize/NoProblemsNamespaceClasses.modularize3
-rw-r--r--clang-tools-extra/test/modularize/NoProblemsTemplateClasses.modularize3
8 files changed, 66 insertions, 23 deletions
diff --git a/clang-tools-extra/modularize/Modularize.cpp b/clang-tools-extra/modularize/Modularize.cpp
index 823165bb58d..c1bba91af11 100644
--- a/clang-tools-extra/modularize/Modularize.cpp
+++ b/clang-tools-extra/modularize/Modularize.cpp
@@ -418,13 +418,23 @@ public:
if (isa<NamespaceDecl>(ND) || isa<UsingDirectiveDecl>(ND) ||
isa<NamespaceAliasDecl>(ND) ||
isa<ClassTemplateSpecializationDecl>(ND) || isa<UsingDecl>(ND) ||
+ isa<ClassTemplateDecl>(ND) || isa<TemplateTypeParmDecl>(ND) ||
+ isa<TypeAliasTemplateDecl>(ND) ||
isa<UsingShadowDecl>(ND) || isa<FunctionDecl>(ND) ||
isa<FunctionTemplateDecl>(ND) ||
(isa<TagDecl>(ND) &&
!cast<TagDecl>(ND)->isThisDeclarationADefinition()))
return true;
- std::string Name = ND->getNameAsString();
+ // Skip anonymous declarations.
+ if (!ND->getDeclName())
+ return true;
+
+ // Get the qualified name.
+ std::string Name;
+ llvm::raw_string_ostream OS(Name);
+ ND->printQualifiedName(OS);
+ OS.flush();
if (Name.empty())
return true;
diff --git a/clang-tools-extra/test/modularize/Inputs/Anonymous.h b/clang-tools-extra/test/modularize/Inputs/Anonymous.h
new file mode 100644
index 00000000000..8388ecaafd4
--- /dev/null
+++ b/clang-tools-extra/test/modularize/Inputs/Anonymous.h
@@ -0,0 +1,11 @@
+// Exercise some anonymous type issues.
+
+// Anonymous enum.
+enum {
+ Tag1
+};
+
+// Anonymous enum typedef.
+typedef enum {
+ Tag2
+} AnonymousEnum;
diff --git a/clang-tools-extra/test/modularize/Inputs/NamespaceClasses.h b/clang-tools-extra/test/modularize/Inputs/NamespaceClasses.h
new file mode 100644
index 00000000000..57e6091fd96
--- /dev/null
+++ b/clang-tools-extra/test/modularize/Inputs/NamespaceClasses.h
@@ -0,0 +1,20 @@
+// Define same class name in different namespaces.
+
+namespace Namespace1 {
+ class NamespaceClass {
+ public:
+ NamespaceClass() : Member(0) {}
+ private:
+ int Member;
+ };
+}
+
+namespace Namespace2 {
+ class NamespaceClass {
+ public:
+ NamespaceClass() : Member(0) {}
+ private:
+ int Member;
+ };
+}
+
diff --git a/clang-tools-extra/test/modularize/Inputs/SomeTypes.h b/clang-tools-extra/test/modularize/Inputs/SomeTypes.h
index c5c7e7ae89f..46c4316fc93 100644
--- a/clang-tools-extra/test/modularize/Inputs/SomeTypes.h
+++ b/clang-tools-extra/test/modularize/Inputs/SomeTypes.h
@@ -14,25 +14,3 @@ public:
private:
int Member;
};
-
-/*
-This currently doesn't work. Can't handle same name in different namespaces.
-namespace Namespace1 {
- class NamespaceClass {
- public:
- NamespaceClass() : Member(0) {}
- private:
- int Member;
- };
-}
-
-namespace Namespace2 {
- class NamespaceClass {
- public:
- NamespaceClass() : Member(0) {}
- private:
- int Member;
- };
-}
-*/
-
diff --git a/clang-tools-extra/test/modularize/Inputs/TemplateClasses.h b/clang-tools-extra/test/modularize/Inputs/TemplateClasses.h
new file mode 100644
index 00000000000..3eab6d90091
--- /dev/null
+++ b/clang-tools-extra/test/modularize/Inputs/TemplateClasses.h
@@ -0,0 +1,15 @@
+// Exercise some template issues. Should not produce errors.
+
+// Forward declaration.
+template<class T> class TemplateClass;
+
+// Full declaration.
+template<class T>class TemplateClass {
+public:
+ TemplateClass() {}
+private:
+ T Member;
+};
+
+// Template alias.
+template<class T> using TemplateClassAlias = TemplateClass<T>;
diff --git a/clang-tools-extra/test/modularize/NoProblemsAnonymous.modularize b/clang-tools-extra/test/modularize/NoProblemsAnonymous.modularize
new file mode 100644
index 00000000000..20b18985d22
--- /dev/null
+++ b/clang-tools-extra/test/modularize/NoProblemsAnonymous.modularize
@@ -0,0 +1,3 @@
+# RUN: modularize %s -x c++
+
+Inputs/Anonymous.h
diff --git a/clang-tools-extra/test/modularize/NoProblemsNamespaceClasses.modularize b/clang-tools-extra/test/modularize/NoProblemsNamespaceClasses.modularize
new file mode 100644
index 00000000000..1d02c788d13
--- /dev/null
+++ b/clang-tools-extra/test/modularize/NoProblemsNamespaceClasses.modularize
@@ -0,0 +1,3 @@
+# RUN: modularize %s -x c++
+
+Inputs/NamespaceClasses.h
diff --git a/clang-tools-extra/test/modularize/NoProblemsTemplateClasses.modularize b/clang-tools-extra/test/modularize/NoProblemsTemplateClasses.modularize
new file mode 100644
index 00000000000..d41c43cbf2a
--- /dev/null
+++ b/clang-tools-extra/test/modularize/NoProblemsTemplateClasses.modularize
@@ -0,0 +1,3 @@
+# RUN: modularize %s -x c++
+
+Inputs/TemplateClasses.h
OpenPOWER on IntegriCloud