Skip to content

Commit e7d7620

Browse files
committed
Return aliases through 'members_of'.
Closes llvm#42.
1 parent c2764ac commit e7d7620

File tree

2 files changed

+7
-8
lines changed

2 files changed

+7
-8
lines changed

clang/lib/Sema/Metafunctions.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1256,11 +1256,6 @@ bool map_decl_to_entity(APValue &Result, Sema &S, EvalFn Evaluator,
12561256

12571257
if (auto *TyDecl = dyn_cast<TypeDecl>(D)) {
12581258
QualType QT = S.Context.getTypeDeclType(TyDecl);
1259-
if (auto *TDND = dyn_cast<TypedefNameDecl>(TyDecl)) {
1260-
auto TSI = TDND->getTypeSourceInfo();
1261-
assert(TSI);
1262-
QT = TSI->getType();
1263-
}
12641259
return SetAndSucceed(Result, makeReflection(QT));
12651260
} else if (auto *TDecl = dyn_cast<TemplateDecl>(D)) {
12661261
TemplateName TName(TDecl);

libcxx/test/std/experimental/reflection/members-and-subobjects.pass.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,18 @@ struct Cls : NotAMember {
5252
template <typename T> void TMemFn();
5353

5454
struct Inner { int c; };
55+
56+
using Alias = int;
5557
};
5658

57-
static_assert(members_of(^Cls).size() == 12);
59+
static_assert(members_of(^Cls).size() == 13);
5860
static_assert(nonstatic_data_members_of(^Cls) ==
5961
std::vector{^Cls::mem1, ^Cls::mem2});
6062
static_assert(static_data_members_of(^Cls) == std::vector{^Cls::smem});
6163
static_assert(members_of(^Cls, std::meta::is_constructor).size() == 2);
6264
static_assert(members_of(^Cls, std::meta::is_destructor).size() == 1);
63-
static_assert(members_of(^Cls, std::meta::is_type) == std::vector{^Cls::Inner});
65+
static_assert(members_of(^Cls, std::meta::is_type) == std::vector{^Cls::Inner,
66+
^Cls::Alias});
6467
static_assert(members_of(^Cls, std::meta::is_template) ==
6568
std::vector{^Cls::TMemFn});
6669
static_assert(members_of(^Cls, std::meta::is_function,
@@ -70,6 +73,7 @@ static_assert(members_of(^Cls, std::meta::is_function,
7073
[](auto R) { return !is_static_member(R) &&
7174
!is_special_member(R); }) ==
7275
std::vector{^Cls::memfn1, ^Cls::memfn2});
76+
static_assert(members_of(^Cls, std::meta::is_alias)[0] == ^Cls::Alias);
7377

7478
template <typename T>
7579
struct TCls {
@@ -96,7 +100,7 @@ void usage_example() {
96100
return members_of(^Cls, std::meta::is_type).size();
97101
};
98102

99-
static_assert(1 == getSz());
103+
static_assert(2 == getSz());
100104
static_assert(^Cls::Inner == members_of(^Cls, std::meta::is_type)[0]);
101105

102106
constexpr auto getInnerObj = []() consteval {

0 commit comments

Comments
 (0)