Fix 'bases_of' with aliases.
This commit is contained in:
@@ -1767,7 +1767,11 @@ bool get_ith_base_of(APValue &Result, ASTContext &C, MetaActions &Meta,
|
||||
|
||||
switch (RV.getReflectionKind()) {
|
||||
case ReflectionKind::Type: {
|
||||
Decl *typeDecl = findTypeDecl(RV.getReflectedType());
|
||||
QualType QT = RV.getReflectedType();
|
||||
QT = desugarType(QT, /*UnwrapAliases=*/true, /*DropCV=*/false,
|
||||
/*DropRefs=*/false);
|
||||
|
||||
Decl *typeDecl = findTypeDecl(QT);
|
||||
|
||||
if (auto cxxRecordDecl = dyn_cast_or_null<CXXRecordDecl>(typeDecl)) {
|
||||
Meta.EnsureInstantiated(typeDecl, Range);
|
||||
|
||||
@@ -329,6 +329,7 @@ struct B1 {};
|
||||
struct B2 {};
|
||||
struct B3 {};
|
||||
struct D1 : public B1, virtual protected B2, private B3 {};
|
||||
using Alias = D1;
|
||||
static_assert(bases_of(^^B1, access_context::unchecked()).size() == 0);
|
||||
static_assert(type_of(bases_of(^^D1, access_context::unchecked())[0]) == ^^B1);
|
||||
static_assert(type_of(bases_of(^^D1, access_context::unchecked())[1]) == ^^B2);
|
||||
@@ -346,6 +347,9 @@ static_assert(!is_protected(bases_of(^^D1, access_context::unchecked())[2]));
|
||||
static_assert(is_private(bases_of(^^D1, access_context::unchecked())[2]));
|
||||
static_assert(!is_virtual(bases_of(^^D1, access_context::unchecked())[2]));
|
||||
|
||||
static_assert(type_of(bases_of(^^Alias,
|
||||
access_context::unchecked())[0]) == ^^B1);
|
||||
|
||||
template <typename... Bases> struct D2 : Bases... {};
|
||||
static_assert(type_of(bases_of(^^D2<B1, B3>, access_context::unchecked())[0]) ==
|
||||
^^B1);
|
||||
|
||||
Reference in New Issue
Block a user