[clang] 3734079 - Argument dependent lookup with class argument is recursing into base

Zahira Ammarguellat via cfe-commits cfe-commits at lists.llvm.org
Tue Dec 1 10:44:53 PST 2020


Author: Zahira Ammarguellat
Date: 2020-12-01T10:33:12-08:00
New Revision: 37340798ccb00b9c3a53e8a5f1b6430e85870338

URL: https://github.com/llvm/llvm-project/commit/37340798ccb00b9c3a53e8a5f1b6430e85870338
DIFF: https://github.com/llvm/llvm-project/commit/37340798ccb00b9c3a53e8a5f1b6430e85870338.diff

LOG: Argument dependent lookup with class argument is recursing into base
classes that haven't been instantiated. This is generating an assertion
in DeclTemplate.h. Fix for Bug25668.

Added: 
    clang/test/OpenMP/template-specialization.cpp

Modified: 
    clang/lib/Sema/SemaLookup.cpp
    clang/lib/Sema/SemaOpenMP.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Sema/SemaLookup.cpp b/clang/lib/Sema/SemaLookup.cpp
index 16dd8f510596..34065a5a212a 100644
--- a/clang/lib/Sema/SemaLookup.cpp
+++ b/clang/lib/Sema/SemaLookup.cpp
@@ -2576,6 +2576,8 @@ namespace {
 
     bool addClassTransitive(CXXRecordDecl *RD) {
       Classes.insert(RD);
+      if (InstantiationLoc.isInvalid())
+        InstantiationLoc = RD->getLocation();
       return ClassesTransitive.insert(RD);
     }
 

diff  --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index 63ea297493ff..dece57bb060a 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -17549,6 +17549,7 @@ static void checkMappableExpressionList(
     auto &DeclNames = SemaRef.getASTContext().DeclarationNames;
     MapperId.setName(DeclNames.getIdentifier(
         &SemaRef.getASTContext().Idents.get("default")));
+    MapperId.setLoc(StartLoc);
   }
 
   // Iterators to find the current unresolved mapper expression.

diff  --git a/clang/test/OpenMP/template-specialization.cpp b/clang/test/OpenMP/template-specialization.cpp
new file mode 100644
index 000000000000..714fbf4a2011
--- /dev/null
+++ b/clang/test/OpenMP/template-specialization.cpp
@@ -0,0 +1,16 @@
+// RUN: %clang_cc1 -verify -fopenmp -fsyntax-only %s
+
+// expected-no-diagnostics
+
+template <typename T>
+struct z {
+  static void aj() {
+    T f;
+#pragma omp target map(f)
+    ;
+  }
+};
+
+template <typename> class ar {};
+template <int> struct as {};
+template class z<ar<as<4>>>;


        


More information about the cfe-commits mailing list