[Tarantool-patches] [PATCH v2 luajit 25/26] test: enable <catch_wrap.lua> LuaJIT test

Sergey Bronnikov sergeyb at tarantool.org
Mon Feb 5 16:32:16 MSK 2024


Hi, Sergey

thanks for the patch! LGTM

On 1/29/24 13:45, Sergey Kaplun wrote:
> This patch moves the <catch_wrap.lua> test from the <misc> to <lang>
> directory, includes it in <index>, and names subtests. Also, since the
> tests may be shuffled, `cp.wrapon()` and `cp.wrapoff()` are used for
> each test separately. Also, this patch adds a workaround for the
> internal ASAN bug, see details in the comment in the <CMakeLists.txt>.
>
> Part of tarantool/tarantool#9398
> ---
>   test/LuaJIT-tests/CMakeLists.txt              | 16 ++++++++++
>   .../{misc => lang}/catch_wrap.lua             | 29 +++++++++++++------
>   test/LuaJIT-tests/lang/index                  |  1 +
>   3 files changed, 37 insertions(+), 9 deletions(-)
>   rename test/LuaJIT-tests/{misc => lang}/catch_wrap.lua (71%)
>
> diff --git a/test/LuaJIT-tests/CMakeLists.txt b/test/LuaJIT-tests/CMakeLists.txt
> index c52bcc71..8ecfe3f6 100644
> --- a/test/LuaJIT-tests/CMakeLists.txt
> +++ b/test/LuaJIT-tests/CMakeLists.txt
> @@ -24,6 +24,22 @@ else()
>     list(APPEND LUAJIT_TESTS_ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}")
>   endif()
>   
> +if(LUAJIT_USE_ASAN)
> +  # When running LuaJIT-tests under ASAN, the internal ASAN check
> +  # failed:
> +  # AddressSanitizer: CHECK failed: asan_interceptors.cpp:356
> +  # "((__interception::real___cxa_throw)) != (0)" (0x0, 0x0)
> +  # This is a workaround suggested at
> +  # https://github.com/google/sanitizers/issues/934.
> +  execute_process(
> +    COMMAND ${CMAKE_CXX_COMPILER} -print-file-name=libstdc++.so
> +    OUTPUT_VARIABLE LIB_STDCPP
> +    OUTPUT_STRIP_TRAILING_WHITESPACE
> +  )
> +  # Fortunately, we are not interested in macOS here.
> +  list(APPEND LUAJIT_TESTS_ENV LD_PRELOAD="${LIB_STDCPP}")
> +endif()
> +
>   add_custom_command(TARGET LuaJIT-tests
>     COMMENT "Running LuaJIT-tests"
>     COMMAND
> diff --git a/test/LuaJIT-tests/misc/catch_wrap.lua b/test/LuaJIT-tests/lang/catch_wrap.lua
> similarity index 71%
> rename from test/LuaJIT-tests/misc/catch_wrap.lua
> rename to test/LuaJIT-tests/lang/catch_wrap.lua
> index 7f656bcc..9d1e3478 100644
> --- a/test/LuaJIT-tests/misc/catch_wrap.lua
> +++ b/test/LuaJIT-tests/lang/catch_wrap.lua
> @@ -1,45 +1,56 @@
> +local cp = require("libcpptest")
>   
> -local cp = require("cpptest")
> -cp.wrapon()
> +local unwind
>   
> -do
> +do --- catch, no error
> +  cp.wrapon()
>     local a, b = pcall(cp.catch, function() return "x" end)
>     assert(a == true and b == "x")
> +  cp.wrapoff()
>   end
>   
> -do
> +do --- pcall throw
> +  cp.wrapon()
>     local a, b = pcall(function() cp.throw("foo") end)
>     assert(a == false and b == "foo")
> +  cp.wrapoff()
>   end
>   
> -local unwind
> -do
> +do --- catch throw
> +  cp.wrapon()
>     local a, b = pcall(cp.catch, function() cp.throw("foo") end)
>     unwind = a
>     assert((a == false and b == "foo") or (a == true and b == "catch ..."))
> +  cp.wrapoff()
>   end
>   
> -do
> +do --- alloc, no error
> +  cp.wrapon()
>     local st = cp.alloc(function() return cp.isalloc() end)
>     assert(st == true)
>     assert(cp.isalloc() == false)
> +  cp.wrapoff()
>   end
>   
> -do
> +do --- throw in alloc
> +  cp.wrapon()
>     local a, b = pcall(cp.alloc, function()
>       assert(cp.isalloc() == true)
>       return "foo", cp.throw
>     end)
>     assert(a == false and b == "foo")
>     assert(cp.isalloc() == false)
> +  cp.wrapoff()
>   end
>   
> -do
> +do --- error in alloc
> +  cp.wrapon()
>     local a, b = pcall(cp.alloc, function()
>       assert(cp.isalloc() == true)
>       return "foo", error
>     end)
>     assert(a == false and b == "foo")
>     if unwind then assert(cp.isalloc() == false) end
> +  cp.wrapoff()
>   end
>   
> diff --git a/test/LuaJIT-tests/lang/index b/test/LuaJIT-tests/lang/index
> index dc0c2e14..87b0c5a0 100644
> --- a/test/LuaJIT-tests/lang/index
> +++ b/test/LuaJIT-tests/lang/index
> @@ -1,6 +1,7 @@
>   andor.lua
>   api_call.lua
>   assignment.lua
> +catch_wrap.lua
>   compare.lua
>   compare_nan.lua
>   constant


More information about the Tarantool-patches mailing list