[LLDB][ClangExpression] Fix initialization of static enum alias members
authorMichael Buch <michaelbuch12@gmail.com>
Thu, 21 Jul 2022 00:04:03 +0000 (01:04 +0100)
committerMichael Buch <michaelbuch12@gmail.com>
Thu, 21 Jul 2022 13:23:41 +0000 (14:23 +0100)
commit140bcd369b0fd61f19cdeabf4be2fe68d5f9804b
tree04471c30caeecf4c2e64991e1cbb80ff00a78681
parent6703812688b84100a159ec793f677952ea8e3eba
[LLDB][ClangExpression] Fix initialization of static enum alias members

`IntegerLiteral::Create` operates on integer types. For that reason
when we parse DWARF into an AST, when we encounter a constant
initialized enum member variable, we try to determine the underlying
integer type before creating the `IntegerLiteral`. However, we
currently don't desugar the type and for enum typedefs
`dyn_cast<EnumType>` fails. In debug builds this triggers following
assert:

```
Assertion failed: (type->isIntegerType() && "Illegal type in IntegerLiteral"), function IntegerLiteral, file Expr.cpp, line 892
```

This patch turns the `dyn_cast<EnumType>` into a `getAs<EnumType>`
which `dyn_cast`s the canonical type, allowing us to get to the
underlying integer type.

**Testing**

* API test
* Manual repro is fixed

Differential Revision: https://reviews.llvm.org/D130213
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