mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-23 13:50:11 +00:00
[clang]not lookup name containing a dependent type (#77587)
Fixes: #77583
bcd51aaaf8
fixed part of template
instantiation dependent name issues but still missing some cases This
patch want to enhance the dependent name check
This commit is contained in:
parent
dc974573a8
commit
bd2a6efb30
@ -719,7 +719,9 @@ Bug Fixes in This Version
|
||||
- Clang now emits correct source location for code-coverage regions in `if constexpr`
|
||||
and `if consteval` branches.
|
||||
Fixes (`#54419 <https://github.com/llvm/llvm-project/issues/54419>`_)
|
||||
|
||||
- Fix an issue where clang cannot find conversion function with template
|
||||
parameter when instantiation of template class.
|
||||
Fixes (`#77583 <https://github.com/llvm/llvm-project/issues/77583>`_)
|
||||
|
||||
Bug Fixes to Compiler Builtins
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
@ -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,
|
||||
|
@ -475,13 +475,22 @@ struct S {
|
||||
|
||||
#if __cplusplus >= 201103L
|
||||
namespace dependent_conversion_function_id_lookup {
|
||||
template<typename T> struct A {
|
||||
operator T();
|
||||
};
|
||||
template<typename T> struct B : A<T> {
|
||||
template<typename U> using Lookup = decltype(&B::operator U);
|
||||
};
|
||||
using Result = B<int>::Lookup<int>;
|
||||
using Result = int (A<int>::*)();
|
||||
namespace gh77583 {
|
||||
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 : A2<T> {
|
||||
template<typename U> using Lookup = decltype(&B::operator U);
|
||||
};
|
||||
using Result = B<int>::Lookup<int>;
|
||||
using Result = int (A2<int>::*)();
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user