[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