mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 15:12:02 +00:00
Fix UBSan report in "round"
This commit is contained in:
parent
9c111a7bdb
commit
eb0473c3f9
@ -84,10 +84,12 @@
|
||||
# define NO_SANITIZE_UNDEFINED __attribute__((__no_sanitize__("undefined")))
|
||||
# define NO_SANITIZE_ADDRESS __attribute__((__no_sanitize__("address")))
|
||||
# define NO_SANITIZE_THREAD __attribute__((__no_sanitize__("thread")))
|
||||
# define ALWAYS_INLINE_NO_SANITIZE_UNDEFINED __attribute__((__always_inline__, __no_sanitize__("undefined")))
|
||||
#else /// It does not work in GCC. GCC 7 cannot recognize this attribute and GCC 8 simply ignores it.
|
||||
# define NO_SANITIZE_UNDEFINED
|
||||
# define NO_SANITIZE_ADDRESS
|
||||
# define NO_SANITIZE_THREAD
|
||||
# define ALWAYS_INLINE_NO_SANITIZE_UNDEFINED ALWAYS_INLINE
|
||||
#endif
|
||||
|
||||
/// A template function for suppressing warnings about unused variables or function results.
|
||||
|
@ -101,7 +101,8 @@ struct IntegerRoundingComputation
|
||||
return scale;
|
||||
}
|
||||
|
||||
static ALWAYS_INLINE T computeImpl(T x, T scale)
|
||||
/// Integer overflow is Ok.
|
||||
static ALWAYS_INLINE_NO_SANITIZE_UNDEFINED T computeImpl(T x, T scale)
|
||||
{
|
||||
switch (rounding_mode)
|
||||
{
|
||||
|
@ -0,0 +1 @@
|
||||
9223372036854775700
|
6
tests/queries/0_stateless/01676_round_int_ubsan.sql
Normal file
6
tests/queries/0_stateless/01676_round_int_ubsan.sql
Normal file
@ -0,0 +1,6 @@
|
||||
-- Overflow during integer rounding is implementation specific behaviour.
|
||||
-- This test allows to be aware if the impkementation changes.
|
||||
-- Changing the implementation specific behaviour is Ok.
|
||||
-- and should not be treat as incompatibility (simply update test result then).
|
||||
|
||||
SELECT round(-9223372036854775808, -2);
|
Loading…
Reference in New Issue
Block a user