After update to latest GCC 10, I see the aforementioned test failing. I use -flto that enables cross module inlining and I investigated that stack overflow detection does not work in `check_stack_overrun` function in sql_parse.cc. It's very likely caused by optimized out the allocation of buf argument of the function, which is a stack variable in a caller frame.
I'm suggesting the following patch:
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
|
index a8e66d2a..9cbf23d7 100644
|
--- a/sql/sql_parse.cc
|
+++ b/sql/sql_parse.cc
|
@@ -7229,10 +7229,14 @@ long max_stack_used;
|
corresponding exec. (Thus we only have to check in fix_fields.)
|
- Passing to check_stack_overrun() prevents the compiler from removing it.
|
*/
|
-bool check_stack_overrun(THD *thd, long margin,
|
- uchar *buf __attribute__((unused)))
|
+bool check_stack_overrun(THD *thd, long margin, uchar *buf)
|
{
|
long stack_used;
|
+ /*
|
+ Take address of the buf argument in order to prevent
|
+ the stack allocation made this function caller.
|
+ */
|
+ static volatile uchar *buf_ptr = buf;
|
DBUG_ASSERT(thd == current_thd);
|
if ((stack_used= available_stack_size(thd->thread_stack, &stack_used)) >=
|
(long) (my_thread_stack_size - margin))
|