This revision was automatically updated to reflect the committed changes.
Closed by commit rL299028: Centralize libc++ test skipping logic (authored by 
labath).

Changed prior to commit:
  https://reviews.llvm.org/D30984?vs=91878&id=93407#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D30984

Files:
  lldb/trunk/packages/Python/lldbsuite/test/dotest.py
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/TestDataFormatterLibcxxString.py
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/elf-core/gcore/main.cpp
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/elf-core/thread_crash/main.cpp
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/break_after_join/main.cpp
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/concurrent_events/main.cpp
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/create_during_step/main.cpp
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/exit_during_break/main.cpp
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/exit_during_step/main.cpp
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/multi_break/main.cpp
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/step_out/main.cpp
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/thread_exit/main.cpp
  lldb/trunk/packages/Python/lldbsuite/test/lldbplatformutil.py
  lldb/trunk/packages/Python/lldbsuite/test/make/Android.rules
  lldb/trunk/packages/Python/lldbsuite/test/make/Makefile.rules
  lldb/trunk/packages/Python/lldbsuite/test/make/pseudo_barrier.h
  lldb/trunk/packages/Python/lldbsuite/test/make/test_common.h
  lldb/trunk/packages/Python/lldbsuite/test/test_categories.py

Index: lldb/trunk/packages/Python/lldbsuite/test/test_categories.py
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/test_categories.py
+++ lldb/trunk/packages/Python/lldbsuite/test/test_categories.py
@@ -25,6 +25,7 @@
     'dsym': 'Tests that can be run with DSYM debug information',
     'gmodules': 'Tests that can be run with -gmodules debug information',
     'expression': 'Tests related to the expression parser',
+    'libc++': 'Test for libc++ data formatters',
     'objc': 'Tests related to the Objective-C programming language support',
     'pyapi': 'Tests related to the Python API',
     'basic_process': 'Basic process execution sniff tests.',
Index: lldb/trunk/packages/Python/lldbsuite/test/dotest.py
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/dotest.py
+++ lldb/trunk/packages/Python/lldbsuite/test/dotest.py
@@ -1061,6 +1061,29 @@
     configuration.compiler = cmd_output.split('\n')[0]
     print("'xcrun -find %s' returning %s" % (c, configuration.compiler))
 
+def canRunLibcxxTests():
+    from lldbsuite.test import lldbplatformutil
+
+    platform = lldbplatformutil.getPlatform()
+
+    if lldbplatformutil.target_is_android() or lldbplatformutil.platformIsDarwin():
+        return True, "libc++ always present"
+
+    if platform == "linux":
+        if not os.path.isdir("/usr/include/c++/v1"):
+            return False, "Unable to find libc++ installation"
+        return True, "Headers found, let's hope they work"
+
+    return False, "Don't know how to build with libc++ on %s" % platform
+
+def checkLibcxxSupport():
+    result, reason = canRunLibcxxTests()
+    if result:
+        return # libc++ supported
+    if "libc++" in configuration.categoriesList:
+        return # libc++ category explicitly requested, let it run.
+    print("Libc++ tests will not be run because: " + reason)
+    configuration.skipCategories.append("libc++")
 
 def run_suite():
     # On MacOS X, check to make sure that domain for com.apple.DebugSymbols defaults
@@ -1164,6 +1187,8 @@
 
     target_platform = lldb.DBG.GetSelectedPlatform().GetTriple().split('-')[2]
 
+    checkLibcxxSupport()
+
     # Don't do debugserver tests on everything except OS X.
     configuration.dont_do_debugserver_test = "linux" in target_platform or "freebsd" in target_platform or "windows" in target_platform
 
Index: lldb/trunk/packages/Python/lldbsuite/test/make/test_common.h
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/make/test_common.h
+++ lldb/trunk/packages/Python/lldbsuite/test/make/test_common.h
@@ -45,34 +45,3 @@
 #define lldb_enable_attach()
 
 #endif
-
-#if defined(__APPLE__) && defined(LLDB_USING_LIBSTDCPP)              
-
-// on Darwin, libstdc++ is missing <atomic>, so this would cause any test to fail building
-// since this header file is being included in every C-family test case, we need to not include it
-// on Darwin, most tests use libc++ by default, so this will only affect tests that explicitly require libstdc++
-
-#else
-#ifdef __cplusplus
-#include <atomic>
-
-// Note that although hogging the CPU while waiting for a variable to change
-// would be terrible in production code, it's great for testing since it
-// avoids a lot of messy context switching to get multiple threads synchronized.
-
-typedef std::atomic<int> pseudo_barrier_t;
-#define pseudo_barrier_wait(barrier)        \
-    do                                      \
-    {                                       \
-        --(barrier);                        \
-        while ((barrier).load() > 0)        \
-            ;                               \
-    } while (0)
-
-#define pseudo_barrier_init(barrier, count) \
-    do                                      \
-    {                                       \
-        (barrier) = (count);                \
-    } while (0)
-#endif // __cplusplus
-#endif // defined(__APPLE__) && defined(LLDB_USING_LIBSTDCPP)
Index: lldb/trunk/packages/Python/lldbsuite/test/make/pseudo_barrier.h
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/make/pseudo_barrier.h
+++ lldb/trunk/packages/Python/lldbsuite/test/make/pseudo_barrier.h
@@ -0,0 +1,20 @@
+#include <atomic>
+
+// Note that although hogging the CPU while waiting for a variable to change
+// would be terrible in production code, it's great for testing since it
+// avoids a lot of messy context switching to get multiple threads synchronized.
+
+typedef std::atomic<int> pseudo_barrier_t;
+#define pseudo_barrier_wait(barrier)        \
+    do                                      \
+    {                                       \
+        --(barrier);                        \
+        while ((barrier).load() > 0)        \
+            ;                               \
+    } while (0)
+
+#define pseudo_barrier_init(barrier, count) \
+    do                                      \
+    {                                       \
+        (barrier) = (count);                \
+    } while (0)
Index: lldb/trunk/packages/Python/lldbsuite/test/make/Android.rules
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/make/Android.rules
+++ lldb/trunk/packages/Python/lldbsuite/test/make/Android.rules
@@ -72,7 +72,7 @@
 
 	ARCH_LDFLAGS += \
 		-L$(NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/$(STL_ARCH) \
-		-l$(NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/$(STL_ARCH)/libc++.a
+		$(NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/$(STL_ARCH)/libc++.a
 else
 	ARCH_CFLAGS += \
 		-isystem $(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.9/include \
Index: lldb/trunk/packages/Python/lldbsuite/test/make/Makefile.rules
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/make/Makefile.rules
+++ lldb/trunk/packages/Python/lldbsuite/test/make/Makefile.rules
@@ -202,7 +202,7 @@
 	CFLAGS += $(ARCHFLAG)$(ARCH) $(FRAMEWORK_INCLUDES) $(CFLAGS_EXTRAS) -I$(LLDB_BASE_DIR)include
 endif
 
-CFLAGS += -include $(THIS_FILE_DIR)test_common.h $(ARCH_CFLAGS)
+CFLAGS += -include $(THIS_FILE_DIR)test_common.h -I$(THIS_FILE_DIR) $(ARCH_CFLAGS)
 
 # Use this one if you want to build one part of the result without debug information:
 ifeq "$(OS)" "Darwin"
@@ -324,23 +324,21 @@
 endif
 
 ifeq (1,$(USE_LIBCPP))
-	# Clang requires an extra flag: -stdlib=libstdc++
-	ifneq (,$(findstring clang,$(CC)))
-		CXXFLAGS += -DLLDB_USING_LIBCPP
-		ifeq "$(OS)" "Linux"
-			# This is the default install location on Ubuntu 14.04
-			ifneq ($(wildcard /usr/include/c++/v1/.),)
-				CXXFLAGS += -stdlib=libc++
-				LDFLAGS += -stdlib=libc++
-				CXXFLAGS += -I/usr/include/c++/v1
-			endif
-		else ifeq "$(OS)" "Android"
-			# Nothing to do, this is already handled in
-			# Android.rules.
-		else
+	CXXFLAGS += -DLLDB_USING_LIBCPP
+	ifeq "$(OS)" "Linux"
+		ifneq (,$(findstring clang,$(CC)))
 			CXXFLAGS += -stdlib=libc++
 			LDFLAGS += -stdlib=libc++
+		else
+			CXXFLAGS += -isystem /usr/include/c++/v1
+			LDFLAGS += -lc++
 		endif
+	else ifeq "$(OS)" "Android"
+		# Nothing to do, this is already handled in
+		# Android.rules.
+	else
+		CXXFLAGS += -stdlib=libc++
+		LDFLAGS += -stdlib=libc++
 	endif
 endif
 
Index: lldb/trunk/packages/Python/lldbsuite/test/lldbplatformutil.py
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/lldbplatformutil.py
+++ lldb/trunk/packages/Python/lldbsuite/test/lldbplatformutil.py
@@ -52,12 +52,12 @@
     return p.returncode, stdout, stderr
 
 
-def _target_is_android():
-    if not hasattr(_target_is_android, 'result'):
+def target_is_android():
+    if not hasattr(target_is_android, 'result'):
         triple = lldb.DBG.GetSelectedPlatform().GetTriple()
         match = re.match(".*-.*-.*-android", triple)
-        _target_is_android.result = match is not None
-    return _target_is_android.result
+        target_is_android.result = match is not None
+    return target_is_android.result
 
 
 def android_device_api():
@@ -84,7 +84,7 @@
 
 
 def match_android_device(device_arch, valid_archs=None, valid_api_levels=None):
-    if not _target_is_android():
+    if not target_is_android():
         return False
     if valid_archs is not None and device_arch not in valid_archs:
         return False
@@ -95,7 +95,7 @@
 
 
 def finalize_build_dictionary(dictionary):
-    if _target_is_android():
+    if target_is_android():
         if dictionary is None:
             dictionary = {}
         dictionary["OS"] = "Android"
Index: lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/create_during_step/main.cpp
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/create_during_step/main.cpp
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/create_during_step/main.cpp
@@ -10,7 +10,7 @@
 // This test is intended to create a situation in which one thread will be
 // created while the debugger is stepping in another thread.
 
-#include <atomic>
+#include "pseudo_barrier.h"
 #include <thread>
 
 #define do_nothing()
Index: lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/concurrent_events/main.cpp
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/concurrent_events/main.cpp
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/concurrent_events/main.cpp
@@ -13,7 +13,7 @@
 // the main thread (before any worker threads are spawned) and modify variables
 // which control the number of threads that are spawned for each action.
 
-#include <atomic>
+#include "pseudo_barrier.h"
 #include <vector>
 using namespace std;
 
Index: lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/step_out/main.cpp
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/step_out/main.cpp
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/step_out/main.cpp
@@ -10,7 +10,7 @@
 // This test is intended to create a situation in which two threads are stopped
 // at a breakpoint and the debugger issues a step-out command.
 
-#include <atomic>
+#include "pseudo_barrier.h"
 #include <thread>
 
 pseudo_barrier_t g_barrier;
Index: lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/thread_exit/main.cpp
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/thread_exit/main.cpp
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/thread_exit/main.cpp
@@ -9,7 +9,7 @@
 
 // This test verifies the correct handling of child thread exits.
 
-#include <atomic>
+#include "pseudo_barrier.h"
 #include <thread>
 
 pseudo_barrier_t g_barrier1;
Index: lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/multi_break/main.cpp
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/multi_break/main.cpp
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/multi_break/main.cpp
@@ -12,7 +12,7 @@
 // the breakpoint in the second thread will be hit while the breakpoint handler
 // in the first thread is trying to stop all threads.
 
-#include <atomic>
+#include "pseudo_barrier.h"
 #include <thread>
 
 pseudo_barrier_t g_barrier;
Index: lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/exit_during_break/main.cpp
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/exit_during_break/main.cpp
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/exit_during_break/main.cpp
@@ -13,7 +13,7 @@
 // breakpoint is hit.  The test case should be flexible enough to treat that
 // as success.
 
-#include <atomic>
+#include "pseudo_barrier.h"
 #include <chrono>
 #include <thread>
 
Index: lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/break_after_join/main.cpp
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/break_after_join/main.cpp
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/break_after_join/main.cpp
@@ -13,7 +13,7 @@
 // breakpoint is hit.  The test case should be flexible enough to treat that
 // as success.
 
-#include <atomic>
+#include "pseudo_barrier.h"
 #include <chrono>
 #include <thread>
 
Index: lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/exit_during_step/main.cpp
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/exit_during_step/main.cpp
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/exit_during_step/main.cpp
@@ -10,6 +10,7 @@
 // This test is intended to create a situation in which one thread will exit
 // while the debugger is stepping in another thread.
 
+#include "pseudo_barrier.h"
 #include <thread>
 
 #define do_nothing()
Index: lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/elf-core/thread_crash/main.cpp
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/elf-core/thread_crash/main.cpp
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/elf-core/thread_crash/main.cpp
@@ -9,7 +9,7 @@
 
 // This test verifies the correct handling of child thread exits.
 
-#include <atomic>
+#include "pseudo_barrier.h"
 #include <thread>
 #include <csignal>
 
Index: lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/elf-core/gcore/main.cpp
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/elf-core/gcore/main.cpp
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/elf-core/gcore/main.cpp
@@ -9,7 +9,7 @@
 
 // This test verifies the correct handling of child thread exits.
 
-#include <atomic>
+#include "pseudo_barrier.h"
 #include <thread>
 #include <csignal>
 
Index: lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/TestDataFormatterLibcxxString.py
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/TestDataFormatterLibcxxString.py
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/TestDataFormatterLibcxxString.py
@@ -23,9 +23,10 @@
         TestBase.setUp(self)
         # Find the line number to break at.
         self.line = line_number('main.cpp', '// Set break point at this line.')
+        ns = 'ndk' if lldbplatformutil.target_is_android() else ''
+        self.namespace = 'std::__' + ns + '1'
 
-    @skipIf(compiler="gcc")
-    @skipIfWindows  # libc++ not ported to Windows yet
+    @add_test_categories(["libc++"])
     def test_with_run_command(self):
         """Test that that file and class static variables display correctly."""
         self.build()
@@ -36,9 +37,6 @@
 
         self.runCmd("run", RUN_SUCCEEDED)
 
-        lldbutil.skip_if_library_missing(
-            self, self.target(), lldbutil.PrintableRegex("libc\+\+"))
-
         # The stop reason of the thread should be breakpoint.
         self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
                     substrs=['stopped',
@@ -58,17 +56,18 @@
         # Execute the cleanup function during test case tear down.
         self.addTearDownHook(cleanup)
 
+        ns = self.namespace
         self.expect(
             "frame variable",
             substrs=[
-                '(std::__1::wstring) s = L"hello world! מזל טוב!"',
-                '(std::__1::wstring) S = L"!!!!"',
+                '(%s::wstring) s = L"hello world! מזל טוב!"'%ns,
+                '(%s::wstring) S = L"!!!!"'%ns,
                 '(const wchar_t *) mazeltov = 0x',
                 'L"מזל טוב"',
-                '(std::__1::string) q = "hello world"',
-                '(std::__1::string) Q = "quite a long std::strin with lots of info inside it"',
-                '(std::__1::string) IHaveEmbeddedZeros = "a\\0b\\0c\\0d"',
-                '(std::__1::wstring) IHaveEmbeddedZerosToo = L"hello world!\\0てざ ル゜䋨ミ㠧槊 きゅへ狦穤襩 じゃ馩リョ 䤦監"'])
+                '(%s::string) q = "hello world"'%ns,
+                '(%s::string) Q = "quite a long std::strin with lots of info inside it"'%ns,
+                '(%s::string) IHaveEmbeddedZeros = "a\\0b\\0c\\0d"'%ns,
+                '(%s::wstring) IHaveEmbeddedZerosToo = L"hello world!\\0てざ ル゜䋨ミ㠧槊 きゅへ狦穤襩 じゃ馩リョ 䤦監"'%ns])
 
         self.runCmd("n")
 
@@ -91,11 +90,11 @@
         self.expect(
             "frame variable",
             substrs=[
-                '(std::__1::wstring) s = L"hello world! מזל טוב!"',
-                '(std::__1::wstring) S = L"!!!!!"',
+                '(%s::wstring) s = L"hello world! מזל טוב!"'%ns,
+                '(%s::wstring) S = L"!!!!!"'%ns,
                 '(const wchar_t *) mazeltov = 0x',
                 'L"מזל טוב"',
-                '(std::__1::string) q = "hello world"',
-                '(std::__1::string) Q = "quite a long std::strin with lots of info inside it"',
-                '(std::__1::string) IHaveEmbeddedZeros = "a\\0b\\0c\\0d"',
-                '(std::__1::wstring) IHaveEmbeddedZerosToo = L"hello world!\\0てざ ル゜䋨ミ㠧槊 きゅへ狦穤襩 じゃ馩リョ 䤦監"'])
+                '(%s::string) q = "hello world"'%ns,
+                '(%s::string) Q = "quite a long std::strin with lots of info inside it"'%ns,
+                '(%s::string) IHaveEmbeddedZeros = "a\\0b\\0c\\0d"'%ns,
+                '(%s::wstring) IHaveEmbeddedZerosToo = L"hello world!\\0てざ ル゜䋨ミ㠧槊 きゅへ狦穤襩 じゃ馩リョ 䤦監"'%ns])
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to