[Lldb-commits] [lldb] 33eb3f1 - [lldb] Delete TestBacktraceAll.py

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Thu Jan 27 06:01:39 PST 2022


Author: Pavel Labath
Date: 2022-01-27T15:01:08+01:00
New Revision: 33eb3f14eb42316524efe71a916b727fe563d973

URL: https://github.com/llvm/llvm-project/commit/33eb3f14eb42316524efe71a916b727fe563d973
DIFF: https://github.com/llvm/llvm-project/commit/33eb3f14eb42316524efe71a916b727fe563d973.diff

LOG: [lldb] Delete TestBacktraceAll.py

This test is completely nondeterministic, environment-dependent and does
not test what it was supposed to test (reverting the associated patch
does not make it fail).

I tried to figure out what the patch was meant to fix to see if I can
create a better test with the current tools, but I was not able to
understand the problem (it sounds like it has something to do with local
classes, but I don't understand the details).

Added: 
    

Modified: 
    

Removed: 
    lldb/test/API/functionalities/thread/backtrace_all/Makefile
    lldb/test/API/functionalities/thread/backtrace_all/ParallelTask.cpp
    lldb/test/API/functionalities/thread/backtrace_all/TestBacktraceAll.py


################################################################################
diff  --git a/lldb/test/API/functionalities/thread/backtrace_all/Makefile b/lldb/test/API/functionalities/thread/backtrace_all/Makefile
deleted file mode 100644
index cd092b7725618..0000000000000
--- a/lldb/test/API/functionalities/thread/backtrace_all/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-CXXFLAGS_EXTRAS := -std=c++11
-CXX_SOURCES := ParallelTask.cpp
-ENABLE_THREADS := YES
-
-include Makefile.rules

diff  --git a/lldb/test/API/functionalities/thread/backtrace_all/ParallelTask.cpp b/lldb/test/API/functionalities/thread/backtrace_all/ParallelTask.cpp
deleted file mode 100644
index 8e0f76f691b98..0000000000000
--- a/lldb/test/API/functionalities/thread/backtrace_all/ParallelTask.cpp
+++ /dev/null
@@ -1,152 +0,0 @@
-#include <cstdint>
-#include <thread>
-#include <vector>
-#include <queue>
-#include <functional>
-#include <future>
-#include <iostream>
-#include <cassert>
-
-class TaskPoolImpl
-{
-public:
-    TaskPoolImpl(uint32_t num_threads) :
-        m_stop(false)
-    {
-        for (uint32_t i = 0; i < num_threads; ++i)
-            m_threads.emplace_back(Worker, this);
-    }
-
-    ~TaskPoolImpl()
-    {
-        Stop();
-    }
-
-    template<typename F, typename... Args>
-    std::future<typename std::result_of<F(Args...)>::type>
-    AddTask(F&& f, Args&&... args)
-    {
-        auto task = std::make_shared<std::packaged_task<typename std::result_of<F(Args...)>::type()>>(
-            std::bind(std::forward<F>(f), std::forward<Args>(args)...));
-
-        std::unique_lock<std::mutex> lock(m_tasks_mutex);
-        assert(!m_stop && "Can't add task to TaskPool after it is stopped");
-        m_tasks.emplace([task](){ (*task)(); });
-        lock.unlock();
-        m_tasks_cv.notify_one();
-
-        return task->get_future();
-    }
-
-    void
-    Stop()
-    {
-        std::unique_lock<std::mutex> lock(m_tasks_mutex);
-        m_stop = true;
-        m_tasks_mutex.unlock();
-        m_tasks_cv.notify_all();
-        for (auto& t : m_threads)
-            t.join();
-    }
-
-private:
-    static void
-    Worker(TaskPoolImpl* pool)
-    {
-        while (true)
-        {
-            std::unique_lock<std::mutex> lock(pool->m_tasks_mutex);
-            if (pool->m_tasks.empty())
-                pool->m_tasks_cv.wait(lock, [pool](){ return !pool->m_tasks.empty() || pool->m_stop; });
-            if (pool->m_tasks.empty())
-                break;
-
-            std::function<void()> f = pool->m_tasks.front();
-            pool->m_tasks.pop();
-            lock.unlock();
-
-            f();
-        }
-    }
-
-    std::queue<std::function<void()>> m_tasks;
-    std::mutex                        m_tasks_mutex;
-    std::condition_variable           m_tasks_cv;
-    bool                              m_stop;
-    std::vector<std::thread>          m_threads;
-};
-
-class TaskPool
-{
-public:
-    // Add a new task to the thread pool and return a std::future belongs for the newly created task.
-    // The caller of this function have to wait on the future for this task to complete.
-    template<typename F, typename... Args>
-    static std::future<typename std::result_of<F(Args...)>::type>
-    AddTask(F&& f, Args&&... args)
-    {
-        return GetImplementation().AddTask(std::forward<F>(f), std::forward<Args>(args)...);
-    }
-
-    // Run all of the specified tasks on the thread pool and wait until all of them are finished
-    // before returning
-    template<typename... T>
-    static void
-    RunTasks(T&&... t)
-    {
-        RunTaskImpl<T...>::Run(std::forward<T>(t)...);
-    }
-
-private:
-    static TaskPoolImpl&
-    GetImplementation()
-    {
-        static TaskPoolImpl g_task_pool_impl(std::thread::hardware_concurrency());
-        return g_task_pool_impl;
-    }
-
-    template<typename... T>
-    struct RunTaskImpl;
-};
-
-template<typename H, typename... T>
-struct TaskPool::RunTaskImpl<H, T...>
-{
-    static void
-    Run(H&& h, T&&... t)
-    {
-        auto f = AddTask(std::forward<H>(h));
-        RunTaskImpl<T...>::Run(std::forward<T>(t)...);
-        f.wait();
-    }
-};
-
-template<>
-struct TaskPool::RunTaskImpl<>
-{
-    static void
-    Run() {}
-};
-
-int main()
-{
-    std::vector<std::future<uint32_t>> tasks;
-    for (int i = 0; i < 100000; ++i)
-    {
-        tasks.emplace_back(TaskPool::AddTask([](int i){
-            uint32_t s = 0;
-            for (int j = 0; j <= i; ++j)
-                s += j;
-            return s;
-        },
-        i));
-    }
-
-    for (auto& it : tasks)  // Set breakpoint here
-        it.wait();
-
-    TaskPool::RunTasks(
-        []() { return 1; },
-        []() { return "aaaa"; }
-    );
-}

diff  --git a/lldb/test/API/functionalities/thread/backtrace_all/TestBacktraceAll.py b/lldb/test/API/functionalities/thread/backtrace_all/TestBacktraceAll.py
deleted file mode 100644
index f34d4e0b81b45..0000000000000
--- a/lldb/test/API/functionalities/thread/backtrace_all/TestBacktraceAll.py
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-Test regression for Bug 25251.
-"""
-
-import unittest2
-import lldb
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-
-class BacktraceAllTestCase(TestBase):
-
-    mydir = TestBase.compute_mydir(__file__)
-
-    def setUp(self):
-        # Call super's setUp().
-        TestBase.setUp(self)
-        # Find the line number for our breakpoint.
-        self.breakpoint = line_number(
-            'ParallelTask.cpp', '// Set breakpoint here')
-
-    # The android-arm compiler can't compile the inferior
-    @skipIfTargetAndroid(archs=["arm"])
-    # because of an issue around std::future.
-    # TODO: Change the test to don't depend on std::future<T>
-    def test(self):
-        """Test breakpoint handling after a thread join."""
-        self.build()
-
-        exe = self.getBuildArtifact("a.out")
-        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
-
-        # This should create a breakpoint
-        lldbutil.run_break_set_by_file_and_line(
-            self, "ParallelTask.cpp", self.breakpoint, num_expected_locations=-1)
-
-        # The breakpoint list should show 1 location.
-        self.expect(
-            "breakpoint list -f",
-            "Breakpoint location shown correctly",
-            substrs=[
-                "1: file = 'ParallelTask.cpp', line = %d, exact_match = 0" %
-                self.breakpoint])
-
-        # Run the program.
-        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'])
-
-        # This should not result in a segmentation fault
-        self.expect("thread backtrace all", STOPPED_DUE_TO_BREAKPOINT,
-                    substrs=["stop reason = breakpoint 1."])
-
-        # Run to completion
-        self.runCmd("continue")


        


More information about the lldb-commits mailing list