Browse Source

兼容gcc 10

tags/2.9.10
tearshark 4 years ago
parent
commit
3d92c8811b
4 changed files with 24 additions and 16 deletions
  1. 14
    4
      CMakeLists.txt
  2. 2
    2
      test_librf.cpp
  3. 4
    6
      tutorial/gcc_bugs.cpp
  4. 4
    4
      tutorial/test_async_mutex.cpp

+ 14
- 4
CMakeLists.txt View File

elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
set(CMAKE_CXX_FLAGS "/std:c++latest /await /EHsc") set(CMAKE_CXX_FLAGS "/std:c++latest /await /EHsc")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(CMAKE_CXX_FLAGS "-std=c++2a -fcoroutines -pthread")
set(CMAKE_CXX_FLAGS "-std=c++2a -fcoroutines")
endif()
if (UNIX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
endif()
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
set(CMAKE_CXX_FLAGS_MINSIZEREL "/W4 /GS- /Gm- /Ox /Ob2 /Oy /Oi /Os /GT /EHsc /Zc:inline")
set(CMAKE_CXX_FLAGS_RELEASE "/W4 /GS- /Gm- /Ox /Ob2 /Oy /Oi /Os /GT /EHsc /Zc:inline")
else()
if(CMAKE_BUILD_TYPE STREQUAL "Debug") if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g -ggdb")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -ggdb")
else() else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -DNDEBUG")
endif() endif()
endif() endif()
message(STATUS "C++ flags: ${CMAKE_CXX_FLAGS}") message(STATUS "C++ flags: ${CMAKE_CXX_FLAGS}")
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")

+ 2
- 2
test_librf.cpp View File

(void)argc; (void)argc;
(void)argv; (void)argv;


resumable_main_mutex();
return 0;
//resumable_main_mutex();
//return 0;


//if (argc > 1) //if (argc > 1)
// resumable_main_benchmark_asio_client(atoi(argv[1])); // resumable_main_benchmark_asio_client(atoi(argv[1]));

+ 4
- 6
tutorial/gcc_bugs.cpp View File

for (int i = 0; i < 100; ++i) for (int i = 0; i < 100; ++i)
{ {
co_await(head << 0); co_await(head << 0);
intptr_t value = co_await tail;
co_await tail;
} }
} }
#endif #endif




template<class... _Mtxs> template<class... _Mtxs>
static future_t<> gcc_bugs_nameless_args(adopt_manual_unlock_t
static future_t<> gcc_bugs_nameless_args(adopt_manual_unlock_t
#if GCC_FIX_BUGS #if GCC_FIX_BUGS
nameless nameless
#endif #endif
#if GCC_FIX_BUGS #if GCC_FIX_BUGS
(void)nameless; (void)nameless;
#endif #endif

mutex_t::_MutexAwaitAssembleT _MAA{ root_state(), mtxs... };
co_await detail::mutex_lock_await_lock_impl::_Lock_range(_MAA);
co_await mutex_t::lock(adopt_manual_unlock, mtxs...);
} //internal compiler error: Segmentation fault } //internal compiler error: Segmentation fault






mutex_t a, b, c; mutex_t a, b, c;
go gcc_bugs_nameless_args(adopt_manual_unlock, a, b, c); go gcc_bugs_nameless_args(adopt_manual_unlock, a, b, c);
}
}

+ 4
- 4
tutorial/test_async_mutex.cpp View File

assert(c.is_locked()); assert(c.is_locked());
++g_counter; ++g_counter;
std::cout << "push:" << g_counter << " on " << idx << std::endl;
co_await 5ms;
//std::cout << "push:" << g_counter << " on " << idx << std::endl;
//co_await 5ms;
} }
} }
assert(c.is_locked()); assert(c.is_locked());
--g_counter; --g_counter;
std::cout << "pop :" << g_counter << " on " << idx << std::endl;
co_await 5ms;
//std::cout << "pop :" << g_counter << " on " << idx << std::endl;
//co_await 5ms;
} }
} }

Loading…
Cancel
Save