mirror of
https://gitlab.com/niansa/libcrosscoro.git
synced 2025-03-06 20:53:32 +01:00
Issue 88/opensuse ci (#92)
* fix up g++ 11 warnings for unused return values * Add opensuse/leap:15.2 CI build * Add __attribute__((used)) for template functions openSUSE/leap gcc on Release build seems to be aggressively removing templates that are actually required, the used attribute will force the compiler to leave them in.
This commit is contained in:
parent
475bcf6d8b
commit
5de38b2d60
12 changed files with 85 additions and 20 deletions
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/sh
|
||||
#!/bin/bash
|
||||
|
||||
FILE_EXTS=".c .h .cpp .hpp .cc .hh .cxx .tcc"
|
||||
|
||||
|
|
|
@ -309,6 +309,12 @@ client: Hello from server 5
|
|||
|
||||
### Instructions
|
||||
|
||||
#### Tested Distos
|
||||
|
||||
* ubuntu:20.04
|
||||
* fedora:32-34
|
||||
* openSUSE/leap:15.2
|
||||
|
||||
#### Cloning the project
|
||||
This project uses gitsubmodules, to properly checkout this project use:
|
||||
|
||||
|
|
35
.github/workflows/ci.yml
vendored
35
.github/workflows/ci.yml
vendored
|
@ -166,6 +166,41 @@ jobs:
|
|||
-DCMAKE_CXX_COMPILER=g++ \
|
||||
..
|
||||
ninja
|
||||
- name: test-release-g++
|
||||
run: |
|
||||
cd build-release-g++
|
||||
ctest -VV
|
||||
build-opensuse-15:
|
||||
name: opensuse-15
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: opensuse/leap:15.2
|
||||
steps:
|
||||
- name: zypper
|
||||
run: |
|
||||
zypper install -y \
|
||||
cmake \
|
||||
git \
|
||||
ninja \
|
||||
gcc10 \
|
||||
gcc10-c++ \
|
||||
openssl \
|
||||
openssl-devel
|
||||
- name: Checkout # recurisve checkout requires git to be installed first
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: build-release-g++
|
||||
run: |
|
||||
mkdir build-release-g++
|
||||
cd build-release-g++
|
||||
cmake \
|
||||
-GNinja \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER=gcc-10 \
|
||||
-DCMAKE_CXX_COMPILER=g++-10 \
|
||||
..
|
||||
ninja
|
||||
- name: test-release-g++
|
||||
run: |
|
||||
cd build-release-g++
|
||||
|
|
2
.gitmodules
vendored
2
.gitmodules
vendored
|
@ -1,3 +1,3 @@
|
|||
[submodule "vendor/c-ares/c-ares"]
|
||||
path = vendor/c-ares/c-ares
|
||||
url = git@github.com:c-ares/c-ares.git
|
||||
url = https://github.com/c-ares/c-ares.git
|
||||
|
|
|
@ -985,6 +985,12 @@ client: Hello from server 5
|
|||
|
||||
### Instructions
|
||||
|
||||
#### Tested Distos
|
||||
|
||||
* ubuntu:20.04
|
||||
* fedora:32-34
|
||||
* openSUSE/leap:15.2
|
||||
|
||||
#### Cloning the project
|
||||
This project uses gitsubmodules, to properly checkout this project use:
|
||||
|
||||
|
|
|
@ -17,8 +17,8 @@ public:
|
|||
sync_wait_event(const sync_wait_event&) = delete;
|
||||
sync_wait_event(sync_wait_event&&) = delete;
|
||||
auto operator=(const sync_wait_event&) -> sync_wait_event& = delete;
|
||||
auto operator=(sync_wait_event&&) -> sync_wait_event& = delete;
|
||||
~sync_wait_event() = default;
|
||||
auto operator=(sync_wait_event &&) -> sync_wait_event& = delete;
|
||||
~sync_wait_event() = default;
|
||||
|
||||
auto set() noexcept -> void;
|
||||
auto reset() noexcept -> void;
|
||||
|
@ -182,6 +182,11 @@ private:
|
|||
coroutine_type m_coroutine;
|
||||
};
|
||||
|
||||
template<
|
||||
concepts::awaitable awaitable_type,
|
||||
typename return_type = concepts::awaitable_traits<awaitable_type>::awaiter_return_type>
|
||||
static auto make_sync_wait_task(awaitable_type&& a) -> sync_wait_task<return_type> __attribute__((used));
|
||||
|
||||
template<
|
||||
concepts::awaitable awaitable_type,
|
||||
typename return_type = concepts::awaitable_traits<awaitable_type>::awaiter_return_type>
|
||||
|
|
|
@ -49,7 +49,7 @@ public:
|
|||
task_container(const task_container&) = delete;
|
||||
task_container(task_container&&) = delete;
|
||||
auto operator=(const task_container&) -> task_container& = delete;
|
||||
auto operator=(task_container&&) -> task_container& = delete;
|
||||
auto operator=(task_container &&) -> task_container& = delete;
|
||||
~task_container()
|
||||
{
|
||||
// This will hang the current thread.. but if tasks are not complete thats also pretty bad.
|
||||
|
@ -107,7 +107,7 @@ public:
|
|||
* the task container for newly stored tasks.
|
||||
* @return The number of tasks that were deleted.
|
||||
*/
|
||||
auto garbage_collect() -> std::size_t
|
||||
auto garbage_collect() -> std::size_t __attribute__((used))
|
||||
{
|
||||
std::scoped_lock lk{m_mutex};
|
||||
return gc_internal();
|
||||
|
|
|
@ -105,7 +105,7 @@ public:
|
|||
}
|
||||
|
||||
auto operator=(const when_all_ready_awaitable&) -> when_all_ready_awaitable& = delete;
|
||||
auto operator=(when_all_ready_awaitable&&) -> when_all_ready_awaitable& = delete;
|
||||
auto operator=(when_all_ready_awaitable &&) -> when_all_ready_awaitable& = delete;
|
||||
|
||||
auto operator co_await() & noexcept
|
||||
{
|
||||
|
@ -379,7 +379,7 @@ public:
|
|||
}
|
||||
|
||||
auto operator=(const when_all_task&) -> when_all_task& = delete;
|
||||
auto operator=(when_all_task&&) -> when_all_task& = delete;
|
||||
auto operator=(when_all_task &&) -> when_all_task& = delete;
|
||||
|
||||
~when_all_task()
|
||||
{
|
||||
|
@ -434,6 +434,11 @@ private:
|
|||
coroutine_handle_type m_coroutine;
|
||||
};
|
||||
|
||||
template<
|
||||
concepts::awaitable awaitable,
|
||||
typename return_type = concepts::awaitable_traits<awaitable&&>::awaiter_return_type>
|
||||
static auto make_when_all_task(awaitable a) -> when_all_task<return_type> __attribute__((used));
|
||||
|
||||
template<
|
||||
concepts::awaitable awaitable,
|
||||
typename return_type = concepts::awaitable_traits<awaitable&&>::awaiter_return_type>
|
||||
|
|
|
@ -192,7 +192,8 @@ auto io_scheduler::shutdown() noexcept -> void
|
|||
|
||||
// Signal the event loop to stop asap, triggering the event fd is safe.
|
||||
uint64_t value{1};
|
||||
::write(m_shutdown_fd, &value, sizeof(value));
|
||||
auto written = ::write(m_shutdown_fd, &value, sizeof(value));
|
||||
(void)written;
|
||||
|
||||
if (m_io_thread.joinable())
|
||||
{
|
||||
|
@ -252,10 +253,11 @@ auto io_scheduler::process_events_execute(std::chrono::milliseconds timeout) ->
|
|||
// Process scheduled coroutines.
|
||||
process_scheduled_execute_inline();
|
||||
}
|
||||
else if (handle_ptr == m_shutdown_ptr) [[unlikely]]
|
||||
{
|
||||
// Nothing to do , just needed to wake-up and smell the flowers
|
||||
}
|
||||
else if (handle_ptr == m_shutdown_ptr)
|
||||
[[unlikely]]
|
||||
{
|
||||
// Nothing to do , just needed to wake-up and smell the flowers
|
||||
}
|
||||
else
|
||||
{
|
||||
// Individual poll task wake-up.
|
||||
|
|
|
@ -25,7 +25,7 @@ set(LIBCORO_TEST_SOURCE_FILES
|
|||
add_executable(${PROJECT_NAME} main.cpp ${LIBCORO_TEST_SOURCE_FILES})
|
||||
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE libcoro)
|
||||
target_link_libraries(${PROJECT_NAME} PUBLIC libcoro)
|
||||
target_compile_options(${PROJECT_NAME} PUBLIC -fcoroutines)
|
||||
|
||||
if(LIBCORO_CODE_COVERAGE)
|
||||
|
|
|
@ -16,14 +16,16 @@ struct test_setup
|
|||
|
||||
// For SSL/TLS tests create a localhost cert.pem and key.pem, tests expected these files
|
||||
// to be generated into the same directory that the tests are running in.
|
||||
system(
|
||||
auto unused = system(
|
||||
"openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -subj '/CN=localhost' -nodes");
|
||||
(void)unused;
|
||||
}
|
||||
|
||||
~test_setup()
|
||||
{
|
||||
// Cleanup the temporary key.pem and cert.pem files.
|
||||
system("rm key.pem cert.pem");
|
||||
auto unused = system("rm key.pem cert.pem");
|
||||
(void)unused;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -111,7 +111,8 @@ TEST_CASE("io_scheduler task with read poll", "[io_scheduler]")
|
|||
auto make_poll_write_task = [&]() -> coro::task<void> {
|
||||
co_await s.schedule();
|
||||
uint64_t value{42};
|
||||
write(trigger_fd, &value, sizeof(value));
|
||||
auto unused = write(trigger_fd, &value, sizeof(value));
|
||||
(void)unused;
|
||||
co_return;
|
||||
};
|
||||
|
||||
|
@ -140,7 +141,8 @@ TEST_CASE("io_scheduler task with read poll with timeout", "[io_scheduler]")
|
|||
auto make_poll_write_task = [&]() -> coro::task<void> {
|
||||
co_await s.schedule();
|
||||
uint64_t value{42};
|
||||
write(trigger_fd, &value, sizeof(value));
|
||||
auto unused = write(trigger_fd, &value, sizeof(value));
|
||||
(void)unused;
|
||||
co_return;
|
||||
};
|
||||
|
||||
|
@ -621,7 +623,8 @@ TEST_CASE("io_scheduler manual process events thread pool", "[io_scheduler]")
|
|||
co_await s.schedule();
|
||||
uint64_t value{42};
|
||||
std::cerr << "write task writing s.size() == " << s.size() << "\n";
|
||||
write(trigger_fd, &value, sizeof(value));
|
||||
auto unused = write(trigger_fd, &value, sizeof(value));
|
||||
(void)unused;
|
||||
std::cerr << "write task exiting s.size() == " << s.size() << "\n";
|
||||
co_return;
|
||||
};
|
||||
|
@ -669,7 +672,8 @@ TEST_CASE("io_scheduler manual process events inline", "[io_scheduler]")
|
|||
co_await s.schedule();
|
||||
uint64_t value{42};
|
||||
std::cerr << "write task writing s.size() == " << s.size() << "\n";
|
||||
write(trigger_fd, &value, sizeof(value));
|
||||
auto unused = write(trigger_fd, &value, sizeof(value));
|
||||
(void)unused;
|
||||
std::cerr << "write task exiting s.size() == " << s.size() << "\n";
|
||||
co_return;
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue