diff options
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 |