1
0
Fork 0
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:
Josh Baldwin 2021-07-25 15:27:51 -06:00 committed by GitHub
parent 475bcf6d8b
commit 5de38b2d60
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 85 additions and 20 deletions

View file

@ -1,4 +1,4 @@
#!/usr/bin/sh
#!/bin/bash
FILE_EXTS=".c .h .cpp .hpp .cc .hh .cxx .tcc"

View file

@ -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:

View file

@ -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
View file

@ -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

View file

@ -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:

View file

@ -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>

View file

@ -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();

View file

@ -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>

View file

@ -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.

View file

@ -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)

View file

@ -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;
}
};

View file

@ -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;
};