[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:
parent
006230e10d
commit
75fdf7fd15
|
@ -0,0 +1,4 @@
|
|||
OBJCXX_SOURCES := main.mm
|
||||
CFLAGS_EXTRAS := -fblocks -fobjc-arc
|
||||
LD_EXTRAS := -lobjc
|
||||
include Makefile.rules
|
|
@ -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")
|
35
lldb/test/API/commands/frame/var/direct-ivar/objcpp/main.mm
Normal file
35
lldb/test/API/commands/frame/var/direct-ivar/objcpp/main.mm
Normal 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user