[lldb] Test direct ivar access in objc++ (NFC)

Add an Objective-C++ specific test for direct ivar access. This adds to the existing C++ and ObjC tests, and tests against regression for future refactoring.

Differential Revision: https://reviews.llvm.org/D146320
This commit is contained in:
Dave Lee 2023-03-16 19:15:38 -07:00
parent 006230e10d
commit 75fdf7fd15
3 changed files with 63 additions and 0 deletions

View File

@ -0,0 +1,4 @@
OBJCXX_SOURCES := main.mm
CFLAGS_EXTRAS := -fblocks -fobjc-arc
LD_EXTRAS := -lobjc
include Makefile.rules

View File

@ -0,0 +1,24 @@
import lldb
from lldbsuite.test.lldbtest import *
from lldbsuite.test.decorators import *
from lldbsuite.test import lldbutil
class TestCase(TestBase):
@skipUnlessDarwin
def test_objc_self(self):
self.build()
lldbutil.run_to_source_breakpoint(self, "check self", lldb.SBFileSpec("main.mm"))
self.expect("frame variable _ivar", startstr="(int) _ivar = 30")
@skipUnlessDarwin
def test_objc_explicit_self(self):
self.build()
lldbutil.run_to_source_breakpoint(self, "check explicit self", lldb.SBFileSpec("main.mm"))
self.expect("frame variable _ivar", startstr="(int) _ivar = 30")
@skipUnlessDarwin
def test_cpp_this(self):
self.build()
lldbutil.run_to_source_breakpoint(self, "check this", lldb.SBFileSpec("main.mm"))
self.expect("frame variable m_field", startstr="(int) m_field = 41")

View File

@ -0,0 +1,35 @@
#import <objc/NSObject.h>
#include <stdio.h>
struct Structure {
int m_field;
void fun() {
puts("check this\n");
}
};
@interface Classic : NSObject {
@public
int _ivar;
}
@end
@implementation Classic
- (void)fun {
puts("check self\n");
}
@end
int main() {
Structure s;
s.m_field = 41;
s.fun();
Classic *c = [Classic new];
c->_ivar = 30;
[c fun];
Classic *self = c;
puts("check explicit self\n");
(void)self;
}