<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/119101>119101</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[LLDB] `static const` fields of type `unsigned char` cannot be inspected
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Walnut356
</td>
</tr>
</table>
<pre>
The sample code is roughly the debuginfo layout of Rust enums, written in C++ and compiled via `cl.exe`. Worth pointing out that Rust uses `TypeSystemClangCommon` at the moment. For the enum type and non-uchar integer types, `SBTypeStaticField::GetConstantValue()` returns the static field's initializer value. For unsigned char it always returns an invalid `SBValue`
version: 19.1.1
main.cpp:
```
#include <stdio.h>
union enum2 {
enum VariantNames { First, Second };
struct Variant0 {
struct First {
int a;
} value;
const static VariantNames NAME = enum2::VariantNames::First;
const static unsigned char DISCR_EXACT = 1; // <-- relevant value
} variant0;
unsigned long tag;
};
int main()
{
enum2 val = enum2{};
printf("Hello World!");
}
```
Output:
```
(lldb) script lldb.frame.FindVariable("val").GetType()
union enum2 {
struct Variant0 {
struct First {
int a;
};
static const enum2::VariantNames NAME = 0;
static const unsigned char DISCR_EXACT;
...
}
```
Output if `DISCR_EXACT` is changed to `unsigned long long`:
```
(lldb) script lldb.frame.FindVariable("val").GetType()
union enum2 {
struct Variant0 {
struct First {
int a;
};
static const enum2::VariantNames NAME = 0;
static const unsigned long long DISCR_EXACT = 1ULL;
...
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsVcFu4zYQ_Rr6MohAUbEUHXyQ7XhbIN0Cm3S3t4KWxhILihTIkVP36wuSTmLvbtpTbysEMcThvHl886iR3qveIK7Ycs2W24WcabBu9UVqM1OxLBd7251WTwOCl-OkEVrbISgPzs79oE9AA0KH-7lX5mBBy5OdCewBPs2eAM08eiY28OwUERpQBjZMrJlYgzQdtHaclMYOjkoCK3mrM_wLWckz-GIdDTBZZUiZHgIqDZIS7uzRh_1PpwkfT55w3Ghp-o0dR2tYyUFSJDbaEQ1lsLMuvgc-QKcJY3Vjzc3cDtKBMoQ9uhiKfFnJH9cRnSSpdqdQd6xoWNF8QNpY40ka-iz1jEzcMVGHmg5pdsbHQj6mwSHmicqDMoqU1OpvdHAMeYnUbKL8HSQaBFI_y5N_xZJBsqPUqkuUUsmSM94w3hzReWUNKxrI6yzP8rQ8SmWydpoC4bgQEtIfb5golGn13CGwYuOpUzYbWHGfds5GWRNlEsCqNeMNACTZPkunpKGPcgzaV2vYKecpiPWIrTUdsGrLipjiyc0tvWTwC6TwnKMx_atQeJQhkGeg88OqbRLterkNfXiR-orex-aXe2DFNp0kNe5yQ1pJB3gf8ro5258fN5_-uP-92TxF6JwVa2Bix8QuKHlzAw41HqWhM9eEmrgnIVKtc-AVXVvTA8n-HH1RkfEmSBGaefZYCF62RIRCF8es1m8tAIDJKUOHmCt-Qq1tuFPBjjkTIuC91vvKIbz5daZpprN_rsxzp3W3Z6IG3zo1EYTX7ODkiNlOmS6KvNfpVoij1KlU9gEp3KbXg3zfZ_-Db14dGTua2vuOKd5cw69hrpLfNcVbTpZl_y4sqEO4zpfJJQ8f1XaQpscOyIb4tUPCv4Dz_Uv9oy_fiPXtjf3t4eG_u7ToVkVXF7Vc4CqviqLMqyIvF8NK8Jrztq7aurgrbos7jvtl3pUo8iq_XdbVQq0EF7e54Heci3xZZmW9FEW3PCyrQrY15uyW4yiVzrQ-jpl1_UJ5P-Mqz-uc5wst96h9nMRCGHyGGA2dWm4XbhWSbvZz79kt18qTf4MhRTqO8IeHbRjjwT2X6gR7xVnkw2iOA_DSX8HKYUsrjbEEewRl_IQtYbeYnV4NRFP8ZsavXa9omPdZa0cmdoHC-edmcvZPbImJXSTumdidT3ZciX8CAAD__15wgqk">