Fix TestInlines.py on Windows
authorAdrian McCarthy <amccarth@google.com>
Mon, 29 Feb 2016 21:13:29 +0000 (21:13 +0000)
committerAdrian McCarthy <amccarth@google.com>
Mon, 29 Feb 2016 21:13:29 +0000 (21:13 +0000)
The inlining semantics for C and C++ are different, which affects the test's expectation of the number of times the function should appear in the binary.  In the case of this test, C semantics means there should be three instances of inner_inline, while C++ semantics means there should be only two.

On Windows, clang uses C++ inline semantics even for C code, and there doesn't seem to be a combination of compiler flags to avoid this.

So, for consistency, I've recast the test to use C++ everywhere.  Since the test resided under lang/c, it seemed appropriate to move it to lang/cpp.

This does not address the other XFAIL for this test on Linux/gcc.  See https://llvm.org/bugs/show_bug.cgi?id=26710

Differential Revision: http://reviews.llvm.org/D17650

llvm-svn: 262255

lldb/packages/Python/lldbsuite/test/lang/c/inlines/Makefile [deleted file]
lldb/packages/Python/lldbsuite/test/lang/c/inlines/TestInlines.py [deleted file]
lldb/packages/Python/lldbsuite/test/lang/c/inlines/inlines.c [deleted file]
lldb/packages/Python/lldbsuite/test/lang/c/inlines/inlines.h [deleted file]
lldb/packages/Python/lldbsuite/test/lang/cpp/inlines/Makefile [new file with mode: 0644]
lldb/packages/Python/lldbsuite/test/lang/cpp/inlines/TestInlines.py [new file with mode: 0644]
lldb/packages/Python/lldbsuite/test/lang/cpp/inlines/inlines.cpp [new file with mode: 0644]
lldb/packages/Python/lldbsuite/test/lang/cpp/inlines/inlines.h [new file with mode: 0644]

diff --git a/lldb/packages/Python/lldbsuite/test/lang/c/inlines/Makefile b/lldb/packages/Python/lldbsuite/test/lang/c/inlines/Makefile
deleted file mode 100644 (file)
index c5b0d18..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-LEVEL = ../../../make
-
-C_SOURCES := inlines.c
-
-include $(LEVEL)/Makefile.rules
diff --git a/lldb/packages/Python/lldbsuite/test/lang/c/inlines/TestInlines.py b/lldb/packages/Python/lldbsuite/test/lang/c/inlines/TestInlines.py
deleted file mode 100644 (file)
index b75f0be..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-"""Test variable lookup when stopped in inline functions."""
-
-from __future__ import print_function
-
-import os, time
-import lldb
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-class InlinesTestCase(TestBase):
-
-    mydir = TestBase.compute_mydir(__file__)
-
-    def setUp(self):
-        # Call super's setUp().
-        TestBase.setUp(self)
-        # Find the line number to break inside main().
-        self.line = line_number('inlines.c', '// Set break point at this line.')
-
-    @expectedFailureAll("llvm.org/pr26710", oslist=["linux"], compiler="gcc")
-    @expectedFailureAll("llvm.org/pr26710", oslist=["windows"], compiler="clang")
-    def test(self):
-        """Test that local variables are visible in expressions."""
-        self.build()
-        self.runToBreakpoint()
-
-        # Check that 'frame variable' finds a variable
-        self.expect("frame variable inner_input", VARIABLES_DISPLAYED_CORRECTLY,
-            startstr = '(int) inner_input =')
-
-        # Check that 'expr' finds a variable
-        self.expect("expr inner_input", VARIABLES_DISPLAYED_CORRECTLY,
-            startstr = '(int) $0 =')
-
-    def runToBreakpoint(self):
-        exe = os.path.join(os.getcwd(), "a.out")
-        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
-        
-        # Break inside the main.
-        lldbutil.run_break_set_by_file_and_line (self, "inlines.c", self.line, num_expected_locations=3, loc_exact=True)
-        
-        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'])
diff --git a/lldb/packages/Python/lldbsuite/test/lang/c/inlines/inlines.c b/lldb/packages/Python/lldbsuite/test/lang/c/inlines/inlines.c
deleted file mode 100644 (file)
index 822d88e..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-#include <stdio.h>
-#include "inlines.h"
-
-#define INLINE_ME __inline__ __attribute__((always_inline))
-
-int
-not_inlined_2 (int input)
-{
-  printf ("Called in not_inlined_2 with : %d.\n", input);
-  return input;
-}
-
-int 
-not_inlined_1 (int input)
-{
-  printf ("Called in not_inlined_1 with %d.\n", input);
-  return not_inlined_2(input);
-}
-  
-INLINE_ME int
-inner_inline (int inner_input, int mod_value)
-{
-  int inner_result;
-  inner_result = inner_input % mod_value;
-  printf ("Returning: %d.\n", inner_result);
-  return not_inlined_1 (inner_result); // Set break point at this line.
-}
-
-INLINE_ME int
-outer_inline (int outer_input)
-{
-  int outer_result;
-
-  outer_result = inner_inline (outer_input, outer_input % 3);
-  return outer_result;
-}
-
-int
-main (int argc, char **argv)
-{
-  printf ("Starting...\n");
-
-  int (*func_ptr) (int);
-  func_ptr = outer_inline;
-
-  outer_inline (argc);
-
-  func_ptr (argc);
-
-  return 0;
-}
-
-
diff --git a/lldb/packages/Python/lldbsuite/test/lang/c/inlines/inlines.h b/lldb/packages/Python/lldbsuite/test/lang/c/inlines/inlines.h
deleted file mode 100644 (file)
index 265d7b4..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-int inner_inline (int inner_input, int mod_value);
-int outer_inline (int outer_input);
-int not_inlined_2 (int input);
-int not_inlined_1 (int input);
diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/inlines/Makefile b/lldb/packages/Python/lldbsuite/test/lang/cpp/inlines/Makefile
new file mode 100644 (file)
index 0000000..8f67abd
--- /dev/null
@@ -0,0 +1,5 @@
+LEVEL = ../../../make
+
+CXX_SOURCES := inlines.cpp
+
+include $(LEVEL)/Makefile.rules
diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/inlines/TestInlines.py b/lldb/packages/Python/lldbsuite/test/lang/cpp/inlines/TestInlines.py
new file mode 100644 (file)
index 0000000..284057d
--- /dev/null
@@ -0,0 +1,52 @@
+"""Test variable lookup when stopped in inline functions."""
+
+from __future__ import print_function
+
+import os, time
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+class InlinesTestCase(TestBase):
+
+    mydir = TestBase.compute_mydir(__file__)
+
+    def setUp(self):
+        # Call super's setUp().
+        TestBase.setUp(self)
+        # Find the line number to break inside main().
+        self.line = line_number('inlines.cpp', '// Set break point at this line.')
+
+    @expectedFailureAll("llvm.org/pr26710", oslist=["linux"], compiler="gcc")
+    def test(self):
+        """Test that local variables are visible in expressions."""
+        self.build()
+        self.runToBreakpoint()
+
+        # Check that 'frame variable' finds a variable
+        self.expect("frame variable inner_input", VARIABLES_DISPLAYED_CORRECTLY,
+            startstr = '(int) inner_input =')
+
+        # Check that 'expr' finds a variable
+        self.expect("expr inner_input", VARIABLES_DISPLAYED_CORRECTLY,
+            startstr = '(int) $0 =')
+
+    def runToBreakpoint(self):
+        exe = os.path.join(os.getcwd(), "a.out")
+        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
+
+        # Break inside the main.
+        lldbutil.run_break_set_by_file_and_line(self, "inlines.cpp", self.line, num_expected_locations=2,
+                                                loc_exact=True)
+
+        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'])
diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/inlines/inlines.cpp b/lldb/packages/Python/lldbsuite/test/lang/cpp/inlines/inlines.cpp
new file mode 100644 (file)
index 0000000..822d88e
--- /dev/null
@@ -0,0 +1,53 @@
+#include <stdio.h>
+#include "inlines.h"
+
+#define INLINE_ME __inline__ __attribute__((always_inline))
+
+int
+not_inlined_2 (int input)
+{
+  printf ("Called in not_inlined_2 with : %d.\n", input);
+  return input;
+}
+
+int 
+not_inlined_1 (int input)
+{
+  printf ("Called in not_inlined_1 with %d.\n", input);
+  return not_inlined_2(input);
+}
+  
+INLINE_ME int
+inner_inline (int inner_input, int mod_value)
+{
+  int inner_result;
+  inner_result = inner_input % mod_value;
+  printf ("Returning: %d.\n", inner_result);
+  return not_inlined_1 (inner_result); // Set break point at this line.
+}
+
+INLINE_ME int
+outer_inline (int outer_input)
+{
+  int outer_result;
+
+  outer_result = inner_inline (outer_input, outer_input % 3);
+  return outer_result;
+}
+
+int
+main (int argc, char **argv)
+{
+  printf ("Starting...\n");
+
+  int (*func_ptr) (int);
+  func_ptr = outer_inline;
+
+  outer_inline (argc);
+
+  func_ptr (argc);
+
+  return 0;
+}
+
+
diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/inlines/inlines.h b/lldb/packages/Python/lldbsuite/test/lang/cpp/inlines/inlines.h
new file mode 100644 (file)
index 0000000..265d7b4
--- /dev/null
@@ -0,0 +1,4 @@
+int inner_inline (int inner_input, int mod_value);
+int outer_inline (int outer_input);
+int not_inlined_2 (int input);
+int not_inlined_1 (int input);