[clang] [clang]not lookup name containing a dependent type (PR #77587)

Congcong Cai via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 10 03:28:50 PST 2024


https://github.com/HerrCai0907 created https://github.com/llvm/llvm-project/pull/77587

Fixes: #77583
bcd51aaaf8bde4b0ae7a4155d9ce3dec78fe2598 fixed part of template instantiation dependent name issues but still missing some cases This patch want to enhance the dependent name check

>From f6b9afa26fabb5f9dcea5615c92914bed93ef474 Mon Sep 17 00:00:00 2001
From: Congcong Cai <congcongcai0907 at 163.com>
Date: Wed, 10 Jan 2024 19:27:31 +0800
Subject: [PATCH] [clang]not lookup name containing a dependent type

Fixes: #77583
bcd51aaaf8bde4b0ae7a4155d9ce3dec78fe2598 fixed part of template instantiation dependent name issues but still missing some cases
This patch want to enhance the dependent name check
---
 clang/lib/Sema/SemaExprMember.cpp          |  3 ++-
 clang/test/SemaCXX/conversion-function.cpp | 14 +++++++++++---
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/clang/lib/Sema/SemaExprMember.cpp b/clang/lib/Sema/SemaExprMember.cpp
index 2abec3d86a27d9..32998ae60eafe2 100644
--- a/clang/lib/Sema/SemaExprMember.cpp
+++ b/clang/lib/Sema/SemaExprMember.cpp
@@ -782,7 +782,8 @@ Sema::BuildMemberReferenceExpr(Expr *Base, QualType BaseType,
                                const Scope *S,
                                ActOnMemberAccessExtraArgs *ExtraArgs) {
   if (BaseType->isDependentType() ||
-      (SS.isSet() && isDependentScopeSpecifier(SS)))
+      (SS.isSet() && isDependentScopeSpecifier(SS)) ||
+      NameInfo.getName().isDependentName())
     return ActOnDependentMemberExpr(Base, BaseType,
                                     IsArrow, OpLoc,
                                     SS, TemplateKWLoc, FirstQualifierInScope,
diff --git a/clang/test/SemaCXX/conversion-function.cpp b/clang/test/SemaCXX/conversion-function.cpp
index b6e6142d179066..220ae78f2d8246 100644
--- a/clang/test/SemaCXX/conversion-function.cpp
+++ b/clang/test/SemaCXX/conversion-function.cpp
@@ -475,13 +475,21 @@ struct S {
 
 #if __cplusplus >= 201103L
 namespace dependent_conversion_function_id_lookup {
-  template<typename T> struct A {
+  struct A1 {
+    operator int();
+  };
+  template<class T> struct C {
+    template <typename U> using Lookup = decltype(T{}.operator U());
+  };
+  C<A1> v{};
+
+  template<typename T> struct A2 {
     operator T();
   };
-  template<typename T> struct B : A<T> {
+  template<typename T> struct B : A2<T> {
     template<typename U> using Lookup = decltype(&B::operator U);
   };
   using Result = B<int>::Lookup<int>;
-  using Result = int (A<int>::*)();
+  using Result = int (A2<int>::*)();
 }
 #endif



More information about the cfe-commits mailing list