[Lldb-commits] [PATCH] D130213: [LLDB][ClangExpression] Fix evaluation of types with constant initialized enum typedefs
Michael Buch via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Thu Jul 21 03:40:12 PDT 2022
Michael137 updated this revision to Diff 446418.
Michael137 added a comment.
- Reword commit
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D130213/new/
https://reviews.llvm.org/D130213
Files:
lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
lldb/test/API/lang/cpp/const_static_integral_member/TestConstStaticIntegralMember.py
lldb/test/API/lang/cpp/const_static_integral_member/main.cpp
Index: lldb/test/API/lang/cpp/const_static_integral_member/main.cpp
===================================================================
--- lldb/test/API/lang/cpp/const_static_integral_member/main.cpp
+++ lldb/test/API/lang/cpp/const_static_integral_member/main.cpp
@@ -69,6 +69,15 @@
constexpr static ScopedEnum scoped_enum_val = ScopedEnum::scoped_enum_case2;
} cwc;
+struct ClassWithEnumAlias {
+ using EnumAlias = ScopedEnum;
+ static constexpr EnumAlias enum_alias = ScopedEnum::scoped_enum_case2;
+
+ using EnumAliasAlias = EnumAlias;
+ static constexpr EnumAliasAlias enum_alias_alias =
+ ScopedEnum::scoped_enum_case1;
+};
+
int main() {
A a;
@@ -98,5 +107,9 @@
se = A::invalid_scoped_enum_val;
ScopedCharEnum sce = A::scoped_char_enum_val;
ScopedLongLongEnum sle = A::scoped_ll_enum_val;
+
+ auto enum_alias_val = ClassWithEnumAlias::enum_alias;
+ auto enum_alias_alias_val = ClassWithEnumAlias::enum_alias_alias;
+
return 0; // break here
}
Index: lldb/test/API/lang/cpp/const_static_integral_member/TestConstStaticIntegralMember.py
===================================================================
--- lldb/test/API/lang/cpp/const_static_integral_member/TestConstStaticIntegralMember.py
+++ lldb/test/API/lang/cpp/const_static_integral_member/TestConstStaticIntegralMember.py
@@ -66,6 +66,12 @@
self.expect_expr("A::scoped_ll_enum_val_neg", result_value="case0")
self.expect_expr("A::scoped_ll_enum_val", result_value="case2")
+ # Test an aliased enum with fixed underlying type.
+ self.expect_expr("ClassWithEnumAlias::enum_alias",
+ result_value="scoped_enum_case2")
+ self.expect_expr("ClassWithEnumAlias::enum_alias_alias",
+ result_value="scoped_enum_case1")
+
# Test taking address.
if lldbplatformutil.getPlatform() == "windows":
# On Windows data members without the out-of-class definitions still have
Index: lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
===================================================================
--- lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
+++ lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
@@ -7538,7 +7538,7 @@
"only integer or enum types supported");
// If the variable is an enum type, take the underlying integer type as
// the type of the integer literal.
- if (const EnumType *enum_type = llvm::dyn_cast<EnumType>(qt.getTypePtr())) {
+ if (const EnumType *enum_type = qt->getAs<EnumType>()) {
const EnumDecl *enum_decl = enum_type->getDecl();
qt = enum_decl->getIntegerType();
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D130213.446418.patch
Type: text/x-patch
Size: 2660 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20220721/7fba60d5/attachment.bin>
More information about the lldb-commits
mailing list