r241662 - [modules] When determining the visible module set during template

Richard Smith richard-llvm at metafoo.co.uk
Tue Jul 7 19:22:15 PDT 2015


Author: rsmith
Date: Tue Jul  7 21:22:15 2015
New Revision: 241662

URL: http://llvm.org/viewvc/llvm-project?rev=241662&view=rev
Log:
[modules] When determining the visible module set during template
instantiation, use the set of modules visible from the template definition, not
from whichever declaration the specialization was instantiated from.

Added:
    cfe/trunk/test/Modules/Inputs/merge-template-pattern-visibility/
    cfe/trunk/test/Modules/Inputs/merge-template-pattern-visibility/a.h
    cfe/trunk/test/Modules/Inputs/merge-template-pattern-visibility/b.h
    cfe/trunk/test/Modules/Inputs/merge-template-pattern-visibility/module.modulemap
    cfe/trunk/test/Modules/merge-template-pattern-visibility.cpp
Modified:
    cfe/trunk/lib/AST/DeclCXX.cpp

Modified: cfe/trunk/lib/AST/DeclCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclCXX.cpp?rev=241662&r1=241661&r2=241662&view=diff
==============================================================================
--- cfe/trunk/lib/AST/DeclCXX.cpp (original)
+++ cfe/trunk/lib/AST/DeclCXX.cpp Tue Jul  7 21:22:15 2015
@@ -1272,7 +1272,7 @@ const CXXRecordDecl *CXXRecordDecl::getT
           break;
         CTD = NewCTD;
       }
-      return CTD->getTemplatedDecl();
+      return CTD->getTemplatedDecl()->getDefinition();
     }
     if (auto *CTPSD =
             From.dyn_cast<ClassTemplatePartialSpecializationDecl *>()) {
@@ -1281,7 +1281,7 @@ const CXXRecordDecl *CXXRecordDecl::getT
           break;
         CTPSD = NewCTPSD;
       }
-      return CTPSD;
+      return CTPSD->getDefinition();
     }
   }
 
@@ -1290,7 +1290,7 @@ const CXXRecordDecl *CXXRecordDecl::getT
       const CXXRecordDecl *RD = this;
       while (auto *NewRD = RD->getInstantiatedFromMemberClass())
         RD = NewRD;
-      return RD;
+      return RD->getDefinition();
     }
   }
 

Added: cfe/trunk/test/Modules/Inputs/merge-template-pattern-visibility/a.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/merge-template-pattern-visibility/a.h?rev=241662&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/merge-template-pattern-visibility/a.h (added)
+++ cfe/trunk/test/Modules/Inputs/merge-template-pattern-visibility/a.h Tue Jul  7 21:22:15 2015
@@ -0,0 +1,5 @@
+template<typename, typename = int> struct A;
+template<typename T> struct B;
+
+template<typename, typename> struct A {};
+template<typename T> struct B : A<T> {};

Added: cfe/trunk/test/Modules/Inputs/merge-template-pattern-visibility/b.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/merge-template-pattern-visibility/b.h?rev=241662&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/merge-template-pattern-visibility/b.h (added)
+++ cfe/trunk/test/Modules/Inputs/merge-template-pattern-visibility/b.h Tue Jul  7 21:22:15 2015
@@ -0,0 +1,9 @@
+template<typename, typename = int> struct A;
+template<typename T> struct B;
+
+template<typename, typename> struct A {};
+template<typename T> struct B : A<T> {};
+
+inline void f() {
+  B<int> bi;
+}

Added: cfe/trunk/test/Modules/Inputs/merge-template-pattern-visibility/module.modulemap
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/merge-template-pattern-visibility/module.modulemap?rev=241662&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/merge-template-pattern-visibility/module.modulemap (added)
+++ cfe/trunk/test/Modules/Inputs/merge-template-pattern-visibility/module.modulemap Tue Jul  7 21:22:15 2015
@@ -0,0 +1,4 @@
+module X {
+  module A { header "a.h" }
+  module B { header "b.h" }
+}

Added: cfe/trunk/test/Modules/merge-template-pattern-visibility.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/merge-template-pattern-visibility.cpp?rev=241662&view=auto
==============================================================================
--- cfe/trunk/test/Modules/merge-template-pattern-visibility.cpp (added)
+++ cfe/trunk/test/Modules/merge-template-pattern-visibility.cpp Tue Jul  7 21:22:15 2015
@@ -0,0 +1,4 @@
+// RUN: rm -rf %t
+// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fno-modules-error-recovery \
+// RUN:            -fmodule-name=X -emit-module %S/Inputs/merge-template-pattern-visibility/module.modulemap -x c++ \
+// RUN:            -fmodules-local-submodule-visibility





More information about the cfe-commits mailing list