This test for anonymous unions seems off. It tests the following:
```
union {
// fields
};
struct {
// fields
} var{...};
```
Both are anonymous types, but the first does not declare a variable and the
second one does. The test then checks that `frame var` can directly access the
fields of the anonymous union, but can't directly access the fields of the
anonymous struct variable.
The second test, to directly access the members of the struct variable, seems
pointless as similar code would not compile. A demonstration:
```
struct {
int a;
int z;
} a_z{23, 45};
printf("%d\n", a_z.a); // fine
printf("%d\n", a); // this does not compile
```
Since we can't directly access the fields in code, I'm not sure there's a
reason to test that lldb also can't directly access them (other than perhaps as
a regression test).
Differential Revision: https://reviews.llvm.org/D116863
32 lines
1.0 KiB
Python
32 lines
1.0 KiB
Python
"""
|
|
Tests that frame variable looks into anonymous unions
|
|
"""
|
|
import lldb
|
|
from lldbsuite.test.lldbtest import *
|
|
import lldbsuite.test.lldbutil as lldbutil
|
|
|
|
|
|
class FrameVariableAnonymousUnionsTestCase(TestBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
def test_with_run_command(self):
|
|
"""Tests that frame variable looks into anonymous unions"""
|
|
self.build()
|
|
self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
|
|
|
|
line = line_number('main.cpp', '// break here')
|
|
lldbutil.run_break_set_by_file_and_line(
|
|
self, "main.cpp", line, num_expected_locations=-1, loc_exact=False)
|
|
|
|
self.runCmd("process launch", RUN_SUCCEEDED)
|
|
|
|
process = self.dbg.GetSelectedTarget().GetProcess()
|
|
|
|
if process.GetByteOrder() == lldb.eByteOrderLittle:
|
|
self.expect('frame variable -f x i', substrs=['ffffff41'])
|
|
else:
|
|
self.expect('frame variable -f x i', substrs=['41ffff00'])
|
|
|
|
self.expect('frame variable c', substrs=["'A"])
|