[Lldb-commits] [lldb] r151790 - in /lldb/trunk/test/lang/objc/forward-decl: ./ Container.h Container.m Makefile TestForwardDecl.py main.m
Sean Callanan
scallanan at apple.com
Wed Feb 29 18:06:31 PST 2012
Author: spyffe
Date: Wed Feb 29 20:06:31 2012
New Revision: 151790
URL: http://llvm.org/viewvc/llvm-project?rev=151790&view=rev
Log:
Added a testcase verifying that forward declarations
of Objective-C classes in header files are correctly
resolved in the final type.
Added:
lldb/trunk/test/lang/objc/forward-decl/
lldb/trunk/test/lang/objc/forward-decl/Container.h
lldb/trunk/test/lang/objc/forward-decl/Container.m
lldb/trunk/test/lang/objc/forward-decl/Makefile
lldb/trunk/test/lang/objc/forward-decl/TestForwardDecl.py
lldb/trunk/test/lang/objc/forward-decl/main.m
Added: lldb/trunk/test/lang/objc/forward-decl/Container.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lang/objc/forward-decl/Container.h?rev=151790&view=auto
==============================================================================
--- lldb/trunk/test/lang/objc/forward-decl/Container.h (added)
+++ lldb/trunk/test/lang/objc/forward-decl/Container.h Wed Feb 29 20:06:31 2012
@@ -0,0 +1,13 @@
+#import <Foundation/Foundation.h>
+
+ at class ForwardDeclaredClass;
+
+ at interface Container : NSObject {
+ at public
+ ForwardDeclaredClass *member;
+}
+
+-(id)init;
+-(ForwardDeclaredClass*)getMember;
+
+ at end
Added: lldb/trunk/test/lang/objc/forward-decl/Container.m
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lang/objc/forward-decl/Container.m?rev=151790&view=auto
==============================================================================
--- lldb/trunk/test/lang/objc/forward-decl/Container.m (added)
+++ lldb/trunk/test/lang/objc/forward-decl/Container.m Wed Feb 29 20:06:31 2012
@@ -0,0 +1,27 @@
+#import "Container.h"
+
+ at interface ForwardDeclaredClass : NSObject
+{
+ int a;
+ int b;
+}
+ at end
+
+ at implementation ForwardDeclaredClass
+
+ at end
+
+ at implementation Container
+
+-(id)init
+{
+ member = [ForwardDeclaredClass alloc];
+ return [super init];
+}
+
+-(ForwardDeclaredClass *)getMember
+{
+ return member;
+}
+
+ at end
Added: lldb/trunk/test/lang/objc/forward-decl/Makefile
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lang/objc/forward-decl/Makefile?rev=151790&view=auto
==============================================================================
--- lldb/trunk/test/lang/objc/forward-decl/Makefile (added)
+++ lldb/trunk/test/lang/objc/forward-decl/Makefile Wed Feb 29 20:06:31 2012
@@ -0,0 +1,9 @@
+LEVEL = ../../../make
+
+DYLIB_NAME := libContainer
+DYLIB_OBJC_SOURCES := Container.m
+OBJC_SOURCES := main.m
+
+LDFLAGS = -framework Foundation
+
+include $(LEVEL)/Makefile.rules
Added: lldb/trunk/test/lang/objc/forward-decl/TestForwardDecl.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lang/objc/forward-decl/TestForwardDecl.py?rev=151790&view=auto
==============================================================================
--- lldb/trunk/test/lang/objc/forward-decl/TestForwardDecl.py (added)
+++ lldb/trunk/test/lang/objc/forward-decl/TestForwardDecl.py Wed Feb 29 20:06:31 2012
@@ -0,0 +1,56 @@
+"""Test that a forward-declared class works when its complete definition is in a library"""
+
+import os, time
+import unittest2
+import lldb
+from lldbtest import *
+
+class ForwardDeclTestCase(TestBase):
+
+ mydir = os.path.join("lang", "objc", "forward-decl")
+
+ def test_expr_with_dsym(self):
+ self.buildDsym()
+ self.expr()
+
+ def test_expr_with_dwarf(self):
+ self.buildDwarf()
+ self.expr()
+
+ def setUp(self):
+ # Call super's setUp().
+ TestBase.setUp(self)
+ # Find the line number to break inside main().
+ self.line = line_number('main.m', '// Set breakpoint 0 here.')
+
+ def common_setup(self):
+ exe = os.path.join(os.getcwd(), "a.out")
+ self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
+
+ # Break inside the foo function which takes a bar_ptr argument.
+ self.expect("breakpoint set -f main.m -l %d" % self.line, BREAKPOINT_CREATED,
+ startstr = "Breakpoint created")
+
+ self.runCmd("run", RUN_SUCCEEDED)
+
+ # The stop reason of the thread should be breakpoint.
+ self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
+ substrs = ['stopped',
+ 'stop reason = breakpoint'])
+
+ # The breakpoint should have a hit count of 1.
+ self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE,
+ substrs = [' resolved, hit count = 1'])
+
+ def expr(self):
+ self.common_setup()
+
+ # This should display correctly.
+ self.expect("expression [j getMember]", VARIABLES_DISPLAYED_CORRECTLY,
+ substrs = ["= 0x"])
+
+if __name__ == '__main__':
+ import atexit
+ lldb.SBDebugger.Initialize()
+ atexit.register(lambda: lldb.SBDebugger.Terminate())
+ unittest2.main()
Added: lldb/trunk/test/lang/objc/forward-decl/main.m
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lang/objc/forward-decl/main.m?rev=151790&view=auto
==============================================================================
--- lldb/trunk/test/lang/objc/forward-decl/main.m (added)
+++ lldb/trunk/test/lang/objc/forward-decl/main.m Wed Feb 29 20:06:31 2012
@@ -0,0 +1,14 @@
+#import <Foundation/Foundation.h>
+#import "Container.h"
+
+int main(int argc, const char * argv[])
+{
+
+ @autoreleasepool {
+ Container *j = [[Container alloc] init];
+
+ printf("member value = %p", [j getMember]); // Set breakpoint 0 here.
+ }
+ return 0;
+}
+
More information about the lldb-commits
mailing list