diff options
author | Zahira Ammarguellat <zahira.ammarguellat@intel.com> | 2020-11-06 06:38:22 -0800 |
---|---|---|
committer | Zahira Ammarguellat <zahira.ammarguellat@intel.com> | 2020-12-01 10:33:12 -0800 |
commit | 37340798ccb00b9c3a53e8a5f1b6430e85870338 (patch) | |
tree | 8b0ddd372e29370c7184f0f5e566ad7535e7f48c | |
parent | static const char *const foo => const char foo[] (diff) | |
download | llvm-project-37340798ccb00b9c3a53e8a5f1b6430e85870338.tar.gz llvm-project-37340798ccb00b9c3a53e8a5f1b6430e85870338.tar.bz2 llvm-project-37340798ccb00b9c3a53e8a5f1b6430e85870338.zip |
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.
-rw-r--r-- | clang/lib/Sema/SemaLookup.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Sema/SemaOpenMP.cpp | 1 | ||||
-rw-r--r-- | clang/test/OpenMP/template-specialization.cpp | 16 |
3 files changed, 19 insertions, 0 deletions
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>>>; |