1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

MDEV-34388: Stack overflow on Alpine Linux

page_is_corrupted(): Do not allocate the buffers from stack,
but from the heap, in xb_fil_cur_open().

row_quiesce_write_cfg(): Issue one type of message when we
fail to create the .cfg file.

update_statistics_for_table(), read_statistics_for_table(),
delete_statistics_for_table(), rename_table_in_stat_tables():
Use a common stack buffer for Index_stat, Column_stat, Table_stat.

ha_connect::FileExists(): Invoke push_warning_printf() so that
we can avoid allocating a buffer for snprintf().

translog_init_with_table(): Do not duplicate TRANSLOG_PAGE_SIZE_BUFF.

Let us also globally enable the GCC 4.4 and clang 3.0 option
-Wframe-larger-than=16384 to reduce the possibility of introducing
such stack overflow in the future.  For RocksDB and Mroonga we relax
these limits.

Reviewed by: Vladislav Lesin
This commit is contained in:
Marko Mäkelä
2025-05-20 17:27:05 +03:00
parent 2350295643
commit 82d7419e06
21 changed files with 130 additions and 119 deletions

View File

@@ -897,6 +897,9 @@ static int disable_binlog()
} }
/* Ok as mysqlcheck is not multi threaded */
PRAGMA_DISABLE_CHECK_STACK_FRAME
static int handle_request_for_tables(char *tables, size_t length, static int handle_request_for_tables(char *tables, size_t length,
my_bool view, my_bool dont_quote) my_bool view, my_bool dont_quote)
{ {
@@ -1028,9 +1031,6 @@ static void insert_table_name(DYNAMIC_ARRAY *arr, char *in, size_t dblen)
insert_dynamic(arr, (uchar*) buf); insert_dynamic(arr, (uchar*) buf);
} }
/* Ok as mysqlcheck is not multi threaded */
PRAGMA_DISABLE_CHECK_STACK_FRAME
static void __attribute__((noinline)) print_result() static void __attribute__((noinline)) print_result()
{ {
MYSQL_RES *res; MYSQL_RES *res;

View File

@@ -430,6 +430,8 @@ int main(int argc, char **argv)
return 0; return 0;
} }
PRAGMA_DISABLE_CHECK_STACK_FRAME
void concurrency_loop(MYSQL *mysql, uint current, option_string *eptr) void concurrency_loop(MYSQL *mysql, uint current, option_string *eptr)
{ {
unsigned int x; unsigned int x;
@@ -525,6 +527,7 @@ void concurrency_loop(MYSQL *mysql, uint current, option_string *eptr)
my_free(head_sptr); my_free(head_sptr);
} }
PRAGMA_REENABLE_CHECK_STACK_FRAME
static struct my_option my_long_options[] = static struct my_option my_long_options[] =
@@ -2295,6 +2298,7 @@ statement_cleanup(statement *stmt)
} }
} }
PRAGMA_DISABLE_CHECK_STACK_FRAME
int int
slap_connect(MYSQL *mysql) slap_connect(MYSQL *mysql)
@@ -2328,3 +2332,4 @@ slap_connect(MYSQL *mysql)
return 0; return 0;
} }
PRAGMA_REENABLE_CHECK_STACK_FRAME

View File

@@ -41,6 +41,7 @@ SET(MY_WARNING_FLAGS
-Wvla -Wvla
-Wwrite-strings -Wwrite-strings
-Wcast-function-type-strict -Wcast-function-type-strict
-Wframe-larger-than=16384
) )
# Warning flags that are in testing before moving # Warning flags that are in testing before moving

View File

@@ -217,7 +217,10 @@ xb_fil_cur_open(
cursor->buf_size = XB_FIL_CUR_PAGES * cursor->page_size; cursor->buf_size = XB_FIL_CUR_PAGES * cursor->page_size;
cursor->buf = static_cast<byte*>(aligned_malloc(cursor->buf_size, cursor->buf = static_cast<byte*>(aligned_malloc(cursor->buf_size,
srv_page_size)); srv_page_size));
cursor->tmp_page = static_cast<byte*>(aligned_malloc(srv_page_size,
srv_page_size));
cursor->tmp_frame = static_cast<byte*>(aligned_malloc(srv_page_size,
srv_page_size));
cursor->buf_read = 0; cursor->buf_read = 0;
cursor->buf_npages = 0; cursor->buf_npages = 0;
cursor->buf_offset = 0; cursor->buf_offset = 0;
@@ -245,15 +248,10 @@ xb_fil_cur_open(
return(XB_FIL_CUR_SUCCESS); return(XB_FIL_CUR_SUCCESS);
} }
/* Stack usage 131224 with clang */
PRAGMA_DISABLE_CHECK_STACK_FRAME
static bool page_is_corrupted(const byte *page, ulint page_no, static bool page_is_corrupted(const byte *page, ulint page_no,
const xb_fil_cur_t *cursor, const xb_fil_cur_t *cursor,
const fil_space_t *space) const fil_space_t *space)
{ {
byte tmp_frame[UNIV_PAGE_SIZE_MAX];
byte tmp_page[UNIV_PAGE_SIZE_MAX];
const ulint page_size = cursor->page_size; const ulint page_size = cursor->page_size;
uint16_t page_type = fil_page_get_type(page); uint16_t page_type = fil_page_get_type(page);
@@ -316,42 +314,43 @@ static bool page_is_corrupted(const byte *page, ulint page_no,
&& !opt_extended_validation) && !opt_extended_validation)
return false; return false;
memcpy(tmp_page, page, page_size); memcpy(cursor->tmp_page, page, page_size);
if (!space->crypt_data if (!space->crypt_data
|| space->crypt_data->type == CRYPT_SCHEME_UNENCRYPTED || space->crypt_data->type == CRYPT_SCHEME_UNENCRYPTED
|| !fil_space_decrypt(space, tmp_frame, tmp_page)) { || !fil_space_decrypt(space, cursor->tmp_frame,
cursor->tmp_page)) {
return true; return true;
} }
if (page_type != FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED) { if (page_type != FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED) {
return buf_page_is_corrupted(false, tmp_page, return buf_page_is_corrupted(false, cursor->tmp_page,
space->flags); space->flags);
} }
} }
if (page_type == FIL_PAGE_PAGE_COMPRESSED) { if (page_type == FIL_PAGE_PAGE_COMPRESSED) {
memcpy(tmp_page, page, page_size); memcpy(cursor->tmp_page, page, page_size);
} }
if (page_type == FIL_PAGE_PAGE_COMPRESSED if (page_type == FIL_PAGE_PAGE_COMPRESSED
|| page_type == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED) { || page_type == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED) {
ulint decomp = fil_page_decompress(tmp_frame, tmp_page, ulint decomp = fil_page_decompress(cursor->tmp_frame,
cursor->tmp_page,
space->flags); space->flags);
page_type = fil_page_get_type(tmp_page); page_type = fil_page_get_type(cursor->tmp_page);
return (!decomp return (!decomp
|| (decomp != srv_page_size || (decomp != srv_page_size
&& cursor->zip_size) && cursor->zip_size)
|| page_type == FIL_PAGE_PAGE_COMPRESSED || page_type == FIL_PAGE_PAGE_COMPRESSED
|| page_type == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED || page_type == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED
|| buf_page_is_corrupted(false, tmp_page, || buf_page_is_corrupted(false, cursor->tmp_page,
space->flags)); space->flags));
} }
return buf_page_is_corrupted(false, page, space->flags); return buf_page_is_corrupted(false, page, space->flags);
} }
PRAGMA_REENABLE_CHECK_STACK_FRAME
/** Reads and verifies the next block of pages from the source /** Reads and verifies the next block of pages from the source
file. Positions the cursor after the last read non-corrupted page. file. Positions the cursor after the last read non-corrupted page.
@@ -514,7 +513,11 @@ xb_fil_cur_close(
xb_fil_cur_t *cursor) /*!< in/out: source file cursor */ xb_fil_cur_t *cursor) /*!< in/out: source file cursor */
{ {
aligned_free(cursor->buf); aligned_free(cursor->buf);
aligned_free(cursor->tmp_page);
aligned_free(cursor->tmp_frame);
cursor->buf = NULL; cursor->buf = NULL;
cursor->tmp_page = NULL;
cursor->tmp_frame = NULL;
if (cursor->node != NULL) { if (cursor->node != NULL) {
xb_fil_node_close_file(cursor->node); xb_fil_node_close_file(cursor->node);

View File

@@ -45,7 +45,9 @@ struct xb_fil_cur_t {
xb_read_filt_t* read_filter; /*!< read filter */ xb_read_filt_t* read_filter; /*!< read filter */
xb_read_filt_ctxt_t read_filter_ctxt; xb_read_filt_ctxt_t read_filter_ctxt;
/*!< read filter context */ /*!< read filter context */
byte* buf; /*!< read buffer */ byte* buf; /*!< read buffer of XB_FIL_CUR_PAGES */
byte* tmp_page; /*!< buffer for decrypting a page */
byte* tmp_frame; /*!< buffer for decompressing a page */
size_t buf_size; /*!< buffer size in bytes */ size_t buf_size; /*!< buffer size in bytes */
size_t buf_read; /*!< number of read bytes in buffer size_t buf_read; /*!< number of read bytes in buffer
after the last cursor read */ after the last cursor read */

View File

@@ -83,13 +83,13 @@
/* Define pragmas to disable warnings for stack frame checking */ /* Define pragmas to disable warnings for stack frame checking */
#if defined(__clang__) #ifdef __GNUC__
#define PRAGMA_DISABLE_CHECK_STACK_FRAME \ #define PRAGMA_DISABLE_CHECK_STACK_FRAME \
_Pragma("clang diagnostic push") \ _Pragma("GCC diagnostic push") \
_Pragma("clang diagnostic ignored \"-Wframe-larger-than=\"") _Pragma("GCC diagnostic ignored \"-Wframe-larger-than=\"")
#define PRAGMA_REENABLE_CHECK_STACK_FRAME \ #define PRAGMA_REENABLE_CHECK_STACK_FRAME \
_Pragma("clang diagnostic pop") _Pragma("GCC diagnostic pop")
#else #else
#define PRAGMA_DISABLE_CHECK_STACK_FRAME #define PRAGMA_DISABLE_CHECK_STACK_FRAME

View File

@@ -81,8 +81,7 @@ SET @saved_debug_dbug = @@SESSION.debug_dbug;
SET SESSION debug_dbug="+d,ib_export_io_write_failure_1"; SET SESSION debug_dbug="+d,ib_export_io_write_failure_1";
FLUSH TABLES t1 FOR EXPORT; FLUSH TABLES t1 FOR EXPORT;
Warnings: Warnings:
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
UNLOCK TABLES; UNLOCK TABLES;
SET SESSION debug_dbug=@saved_debug_dbug; SET SESSION debug_dbug=@saved_debug_dbug;
DROP TABLE t1; DROP TABLE t1;
@@ -91,8 +90,7 @@ INSERT INTO t1 VALUES (1);
SET SESSION debug_dbug="+d,ib_export_io_write_failure_2"; SET SESSION debug_dbug="+d,ib_export_io_write_failure_2";
FLUSH TABLES t1 FOR EXPORT; FLUSH TABLES t1 FOR EXPORT;
Warnings: Warnings:
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
UNLOCK TABLES; UNLOCK TABLES;
SET SESSION debug_dbug=@saved_debug_dbug; SET SESSION debug_dbug=@saved_debug_dbug;
DROP TABLE t1; DROP TABLE t1;
@@ -101,8 +99,7 @@ INSERT INTO t1 VALUES (1);
SET SESSION debug_dbug="+d,ib_export_io_write_failure_3"; SET SESSION debug_dbug="+d,ib_export_io_write_failure_3";
FLUSH TABLES t1 FOR EXPORT; FLUSH TABLES t1 FOR EXPORT;
Warnings: Warnings:
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
UNLOCK TABLES; UNLOCK TABLES;
SET SESSION debug_dbug=@saved_debug_dbug; SET SESSION debug_dbug=@saved_debug_dbug;
DROP TABLE t1; DROP TABLE t1;
@@ -111,8 +108,7 @@ INSERT INTO t1 VALUES (1);
SET SESSION debug_dbug="+d,ib_export_io_write_failure_4"; SET SESSION debug_dbug="+d,ib_export_io_write_failure_4";
FLUSH TABLES t1 FOR EXPORT; FLUSH TABLES t1 FOR EXPORT;
Warnings: Warnings:
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
UNLOCK TABLES; UNLOCK TABLES;
SET SESSION debug_dbug=@saved_debug_dbug; SET SESSION debug_dbug=@saved_debug_dbug;
DROP TABLE t1; DROP TABLE t1;
@@ -121,8 +117,7 @@ INSERT INTO t1 VALUES (1);
SET SESSION debug_dbug="+d,ib_export_io_write_failure_5"; SET SESSION debug_dbug="+d,ib_export_io_write_failure_5";
FLUSH TABLES t1 FOR EXPORT; FLUSH TABLES t1 FOR EXPORT;
Warnings: Warnings:
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
UNLOCK TABLES; UNLOCK TABLES;
SET SESSION debug_dbug=@saved_debug_dbug; SET SESSION debug_dbug=@saved_debug_dbug;
DROP TABLE t1; DROP TABLE t1;
@@ -131,8 +126,7 @@ INSERT INTO t1 VALUES (1);
SET SESSION debug_dbug="+d,ib_export_io_write_failure_6"; SET SESSION debug_dbug="+d,ib_export_io_write_failure_6";
FLUSH TABLES t1 FOR EXPORT; FLUSH TABLES t1 FOR EXPORT;
Warnings: Warnings:
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
UNLOCK TABLES; UNLOCK TABLES;
SET SESSION debug_dbug=@saved_debug_dbug; SET SESSION debug_dbug=@saved_debug_dbug;
DROP TABLE t1; DROP TABLE t1;
@@ -141,8 +135,7 @@ INSERT INTO t1 VALUES (1);
SET SESSION debug_dbug="+d,ib_export_io_write_failure_7"; SET SESSION debug_dbug="+d,ib_export_io_write_failure_7";
FLUSH TABLES t1 FOR EXPORT; FLUSH TABLES t1 FOR EXPORT;
Warnings: Warnings:
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
UNLOCK TABLES; UNLOCK TABLES;
SET SESSION debug_dbug=@saved_debug_dbug; SET SESSION debug_dbug=@saved_debug_dbug;
DROP TABLE t1; DROP TABLE t1;
@@ -151,8 +144,7 @@ INSERT INTO t1 VALUES (1);
SET SESSION debug_dbug="+d,ib_export_io_write_failure_8"; SET SESSION debug_dbug="+d,ib_export_io_write_failure_8";
FLUSH TABLES t1 FOR EXPORT; FLUSH TABLES t1 FOR EXPORT;
Warnings: Warnings:
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
UNLOCK TABLES; UNLOCK TABLES;
SET SESSION debug_dbug=@saved_debug_dbug; SET SESSION debug_dbug=@saved_debug_dbug;
DROP TABLE t1; DROP TABLE t1;
@@ -161,8 +153,7 @@ INSERT INTO t1 VALUES (1);
SET SESSION debug_dbug="+d,ib_export_io_write_failure_9"; SET SESSION debug_dbug="+d,ib_export_io_write_failure_9";
FLUSH TABLES t1 FOR EXPORT; FLUSH TABLES t1 FOR EXPORT;
Warnings: Warnings:
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
UNLOCK TABLES; UNLOCK TABLES;
SET SESSION debug_dbug=@saved_debug_dbug; SET SESSION debug_dbug=@saved_debug_dbug;
DROP TABLE t1; DROP TABLE t1;
@@ -171,8 +162,7 @@ INSERT INTO t1 VALUES (1);
SET SESSION debug_dbug="+d,ib_export_io_write_failure_10"; SET SESSION debug_dbug="+d,ib_export_io_write_failure_10";
FLUSH TABLES t1 FOR EXPORT; FLUSH TABLES t1 FOR EXPORT;
Warnings: Warnings:
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
UNLOCK TABLES; UNLOCK TABLES;
SET SESSION debug_dbug=@saved_debug_dbug; SET SESSION debug_dbug=@saved_debug_dbug;
DROP TABLE t1; DROP TABLE t1;
@@ -181,8 +171,7 @@ INSERT INTO t1 VALUES (1);
SET SESSION debug_dbug="+d,ib_export_io_write_failure_11"; SET SESSION debug_dbug="+d,ib_export_io_write_failure_11";
FLUSH TABLES t1 FOR EXPORT; FLUSH TABLES t1 FOR EXPORT;
Warnings: Warnings:
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
UNLOCK TABLES; UNLOCK TABLES;
SET SESSION debug_dbug=@saved_debug_dbug; SET SESSION debug_dbug=@saved_debug_dbug;
DROP TABLE t1; DROP TABLE t1;
@@ -191,8 +180,7 @@ INSERT INTO t1 VALUES (1);
SET SESSION debug_dbug="+d,ib_export_io_write_failure_12"; SET SESSION debug_dbug="+d,ib_export_io_write_failure_12";
FLUSH TABLES t1 FOR EXPORT; FLUSH TABLES t1 FOR EXPORT;
Warnings: Warnings:
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
UNLOCK TABLES; UNLOCK TABLES;
SET SESSION debug_dbug=@saved_debug_dbug; SET SESSION debug_dbug=@saved_debug_dbug;
DROP TABLE t1; DROP TABLE t1;

View File

@@ -2785,9 +2785,6 @@ int collect_statistics_for_table(THD *thd, TABLE *table)
After having been updated the statistical system tables are closed. After having been updated the statistical system tables are closed.
*/ */
/* Stack usage 20248 from clang */
PRAGMA_DISABLE_CHECK_STACK_FRAME
int update_statistics_for_table(THD *thd, TABLE *table) int update_statistics_for_table(THD *thd, TABLE *table)
{ {
TABLE_LIST tables[STATISTICS_TABLES]; TABLE_LIST tables[STATISTICS_TABLES];
@@ -2816,9 +2813,13 @@ int update_statistics_for_table(THD *thd, TABLE *table)
save_binlog_format= thd->set_current_stmt_binlog_format_stmt(); save_binlog_format= thd->set_current_stmt_binlog_format_stmt();
char statbuf[sizeof(Index_stat)];
static_assert(sizeof(statbuf) >= sizeof(Table_stat), "");
static_assert(sizeof(statbuf) >= sizeof(Column_stat), "");
/* Update the statistical table table_stats */ /* Update the statistical table table_stats */
stat_table= tables[TABLE_STAT].table; stat_table= tables[TABLE_STAT].table;
Table_stat table_stat(stat_table, table); Table_stat &table_stat= *new(statbuf) Table_stat(stat_table, table);
restore_record(stat_table, s->default_values); restore_record(stat_table, s->default_values);
table_stat.set_key_fields(); table_stat.set_key_fields();
err= table_stat.update_stat(); err= table_stat.update_stat();
@@ -2827,7 +2828,7 @@ int update_statistics_for_table(THD *thd, TABLE *table)
/* Update the statistical table colum_stats */ /* Update the statistical table colum_stats */
stat_table= tables[COLUMN_STAT].table; stat_table= tables[COLUMN_STAT].table;
Column_stat column_stat(stat_table, table); Column_stat &column_stat= *new(statbuf) Column_stat(stat_table, table);
for (Field **field_ptr= table->field; *field_ptr; field_ptr++) for (Field **field_ptr= table->field; *field_ptr; field_ptr++)
{ {
Field *table_field= *field_ptr; Field *table_field= *field_ptr;
@@ -2844,7 +2845,7 @@ int update_statistics_for_table(THD *thd, TABLE *table)
stat_table= tables[INDEX_STAT].table; stat_table= tables[INDEX_STAT].table;
uint key; uint key;
key_map::Iterator it(table->keys_in_use_for_query); key_map::Iterator it(table->keys_in_use_for_query);
Index_stat index_stat(stat_table, table); Index_stat &index_stat= *new(statbuf) Index_stat(stat_table, table);
while ((key= it++) != key_map::Iterator::BITMAP_END) while ((key= it++) != key_map::Iterator::BITMAP_END)
{ {
@@ -2872,7 +2873,6 @@ int update_statistics_for_table(THD *thd, TABLE *table)
new_trans.restore_old_transaction(); new_trans.restore_old_transaction();
DBUG_RETURN(rc); DBUG_RETURN(rc);
} }
PRAGMA_REENABLE_CHECK_STACK_FRAME
/** /**
@@ -2957,7 +2957,10 @@ read_statistics_for_table(THD *thd, TABLE *table,
/* Read statistics from the statistical table table_stats */ /* Read statistics from the statistical table table_stats */
Table_statistics *read_stats= new_stats_cb->table_stats; Table_statistics *read_stats= new_stats_cb->table_stats;
stat_table= stat_tables[TABLE_STAT].table; stat_table= stat_tables[TABLE_STAT].table;
Table_stat table_stat(stat_table, table); char statbuf[sizeof(Index_stat)];
static_assert(sizeof(statbuf) >= sizeof(Table_stat), "");
static_assert(sizeof(statbuf) >= sizeof(Column_stat), "");
Table_stat &table_stat= *new(statbuf) Table_stat(stat_table, table);
table_stat.set_key_fields(); table_stat.set_key_fields();
if (table_stat.get_stat_values(new_stats_cb->table_stats)) if (table_stat.get_stat_values(new_stats_cb->table_stats))
new_stats_cb->stats_available|= TABLE_STAT_TABLE; new_stats_cb->stats_available|= TABLE_STAT_TABLE;
@@ -2965,7 +2968,7 @@ read_statistics_for_table(THD *thd, TABLE *table,
/* Read statistics from the statistical table column_stats */ /* Read statistics from the statistical table column_stats */
stat_table= stat_tables[COLUMN_STAT].table; stat_table= stat_tables[COLUMN_STAT].table;
ulong total_hist_size= 0; ulong total_hist_size= 0;
Column_stat column_stat(stat_table, table); Column_stat &column_stat= *new(statbuf) Column_stat(stat_table, table);
Column_statistics *column_statistics= new_stats_cb->table_stats->column_stats; Column_statistics *column_statistics= new_stats_cb->table_stats->column_stats;
found= 0; found= 0;
for (field_ptr= table_share->field; for (field_ptr= table_share->field;
@@ -2990,7 +2993,7 @@ read_statistics_for_table(THD *thd, TABLE *table,
/* Read statistics from the statistical table index_stats */ /* Read statistics from the statistical table index_stats */
stat_table= stat_tables[INDEX_STAT].table; stat_table= stat_tables[INDEX_STAT].table;
Index_stat index_stat(stat_table, table); Index_stat &index_stat= *new(statbuf) Index_stat(stat_table, table);
Index_statistics *index_statistics= new_stats_cb->table_stats->index_stats; Index_statistics *index_statistics= new_stats_cb->table_stats->index_stats;
for (key_info= table_share->key_info, for (key_info= table_share->key_info,
key_info_end= key_info + table_share->keys; key_info_end= key_info + table_share->keys;
@@ -3285,9 +3288,6 @@ end:
The function is called when executing the statement DROP TABLE 'tab'. The function is called when executing the statement DROP TABLE 'tab'.
*/ */
/* Stack size 20248 with clang */
PRAGMA_DISABLE_CHECK_STACK_FRAME
int delete_statistics_for_table(THD *thd, const LEX_CSTRING *db, int delete_statistics_for_table(THD *thd, const LEX_CSTRING *db,
const LEX_CSTRING *tab) const LEX_CSTRING *tab)
{ {
@@ -3311,7 +3311,10 @@ int delete_statistics_for_table(THD *thd, const LEX_CSTRING *db,
/* Delete statistics on table from the statistical table index_stats */ /* Delete statistics on table from the statistical table index_stats */
stat_table= tables[INDEX_STAT].table; stat_table= tables[INDEX_STAT].table;
Index_stat index_stat(stat_table, db, tab); char statbuf[sizeof(Index_stat)];
static_assert(sizeof(statbuf) >= sizeof(Table_stat), "");
static_assert(sizeof(statbuf) >= sizeof(Column_stat), "");
Index_stat &index_stat= *new(statbuf) Index_stat(stat_table, db, tab);
index_stat.set_full_table_name(); index_stat.set_full_table_name();
while (index_stat.find_next_stat_for_prefix(2)) while (index_stat.find_next_stat_for_prefix(2))
{ {
@@ -3322,7 +3325,7 @@ int delete_statistics_for_table(THD *thd, const LEX_CSTRING *db,
/* Delete statistics on table from the statistical table column_stats */ /* Delete statistics on table from the statistical table column_stats */
stat_table= tables[COLUMN_STAT].table; stat_table= tables[COLUMN_STAT].table;
Column_stat column_stat(stat_table, db, tab); Column_stat &column_stat= *new(statbuf) Column_stat(stat_table, db, tab);
column_stat.set_full_table_name(); column_stat.set_full_table_name();
while (column_stat.find_next_stat_for_prefix(2)) while (column_stat.find_next_stat_for_prefix(2))
{ {
@@ -3333,7 +3336,7 @@ int delete_statistics_for_table(THD *thd, const LEX_CSTRING *db,
/* Delete statistics on table from the statistical table table_stats */ /* Delete statistics on table from the statistical table table_stats */
stat_table= tables[TABLE_STAT].table; stat_table= tables[TABLE_STAT].table;
Table_stat table_stat(stat_table, db, tab); Table_stat &table_stat= *new(statbuf) Table_stat(stat_table, db, tab);
table_stat.set_key_fields(); table_stat.set_key_fields();
if (table_stat.find_stat()) if (table_stat.find_stat())
{ {
@@ -3356,7 +3359,6 @@ int delete_statistics_for_table(THD *thd, const LEX_CSTRING *db,
new_trans.restore_old_transaction(); new_trans.restore_old_transaction();
DBUG_RETURN(rc); DBUG_RETURN(rc);
} }
PRAGMA_REENABLE_CHECK_STACK_FRAME
/** /**
@@ -3725,7 +3727,6 @@ int rename_indexes_in_stat_table(THD *thd, TABLE *tab,
int rc= 0; int rc= 0;
uint duplicate_counter= 0; uint duplicate_counter= 0;
List_iterator<Alter_info::RENAME_INDEX_STAT_PARAMS> it(*indexes); List_iterator<Alter_info::RENAME_INDEX_STAT_PARAMS> it(*indexes);
Alter_info::RENAME_INDEX_STAT_PARAMS *index;
char tmp_name_buffer[32]; char tmp_name_buffer[32];
LEX_CSTRING tmp_name= {tmp_name_buffer, 0}; LEX_CSTRING tmp_name= {tmp_name_buffer, 0};
DBUG_ENTER("rename_indexes_in_stat_tables"); DBUG_ENTER("rename_indexes_in_stat_tables");
@@ -3746,15 +3747,16 @@ int rename_indexes_in_stat_table(THD *thd, TABLE *tab,
/* Rename index in the statistical table index_stat */ /* Rename index in the statistical table index_stat */
stat_table= tables.table; stat_table= tables.table;
char statbuf[sizeof(Index_stat)];
/* /*
Loop over all indexes and rename to new name or temp name in case of Loop over all indexes and rename to new name or temp name in case of
conflicts conflicts
*/ */
while ((index= it++)) while (Alter_info::RENAME_INDEX_STAT_PARAMS *index= it++)
{ {
Index_stat index_stat(stat_table, tab); Index_stat &index_stat= *new(statbuf) Index_stat(stat_table, tab);
uint found= 0; uint found= 0;
/* We have to make a loop as one index may have many entries */ /* We have to make a loop as one index may have many entries */
@@ -3822,12 +3824,11 @@ int rename_indexes_in_stat_table(THD *thd, TABLE *tab,
the final name. the final name.
*/ */
Alter_info::RENAME_INDEX_STAT_PARAMS *index;
it.rewind(); it.rewind();
Index_stat index_stat(stat_table, tab); Index_stat &index_stat= *new(statbuf) Index_stat(stat_table, tab);
stat_table->file->ha_index_init(index_stat.stat_key_idx, 0); stat_table->file->ha_index_init(index_stat.stat_key_idx, 0);
while ((index= it++)) while (Alter_info::RENAME_INDEX_STAT_PARAMS *index= it++)
{ {
int err __attribute__((unused)); int err __attribute__((unused));
@@ -3901,9 +3902,6 @@ int rename_indexes_in_stat_table(THD *thd, TABLE *tab,
The function is called when executing any statement that renames a table The function is called when executing any statement that renames a table
*/ */
/* Stack size 20968 with clang */
PRAGMA_DISABLE_CHECK_STACK_FRAME
int rename_table_in_stat_tables(THD *thd, const LEX_CSTRING *db, int rename_table_in_stat_tables(THD *thd, const LEX_CSTRING *db,
const LEX_CSTRING *tab, const LEX_CSTRING *tab,
const LEX_CSTRING *new_db, const LEX_CSTRING *new_db,
@@ -3928,7 +3926,11 @@ int rename_table_in_stat_tables(THD *thd, const LEX_CSTRING *db,
/* Rename table in the statistical table index_stats */ /* Rename table in the statistical table index_stats */
stat_table= tables[INDEX_STAT].table; stat_table= tables[INDEX_STAT].table;
Index_stat index_stat(stat_table, db, tab); char statbuf[sizeof(Index_stat)];
static_assert(sizeof(statbuf) >= sizeof(Table_stat), "");
static_assert(sizeof(statbuf) >= sizeof(Column_stat), "");
Index_stat &index_stat= *new(statbuf) Index_stat(stat_table, db, tab);
index_stat.set_full_table_name(); index_stat.set_full_table_name();
Stat_table_write_iter index_iter(&index_stat); Stat_table_write_iter index_iter(&index_stat);
@@ -3945,7 +3947,7 @@ int rename_table_in_stat_tables(THD *thd, const LEX_CSTRING *db,
/* Rename table in the statistical table column_stats */ /* Rename table in the statistical table column_stats */
stat_table= tables[COLUMN_STAT].table; stat_table= tables[COLUMN_STAT].table;
Column_stat column_stat(stat_table, db, tab); Column_stat &column_stat= *new(statbuf) Column_stat(stat_table, db, tab);
column_stat.set_full_table_name(); column_stat.set_full_table_name();
Stat_table_write_iter column_iter(&column_stat); Stat_table_write_iter column_iter(&column_stat);
if (column_iter.init(2)) if (column_iter.init(2))
@@ -3961,7 +3963,7 @@ int rename_table_in_stat_tables(THD *thd, const LEX_CSTRING *db,
/* Rename table in the statistical table table_stats */ /* Rename table in the statistical table table_stats */
stat_table= tables[TABLE_STAT].table; stat_table= tables[TABLE_STAT].table;
Table_stat table_stat(stat_table, db, tab); Table_stat &table_stat= *new(statbuf) Table_stat(stat_table, db, tab);
table_stat.set_key_fields(); table_stat.set_key_fields();
if (table_stat.find_stat()) if (table_stat.find_stat())
{ {
@@ -3981,7 +3983,6 @@ int rename_table_in_stat_tables(THD *thd, const LEX_CSTRING *db,
new_trans.restore_old_transaction(); new_trans.restore_old_transaction();
DBUG_RETURN(rc); DBUG_RETURN(rc);
} }
PRAGMA_REENABLE_CHECK_STACK_FRAME
/** /**

View File

@@ -715,6 +715,10 @@ static void stop_timer(pool_timer_t *timer)
@return a ready connection, or NULL on shutdown @return a ready connection, or NULL on shutdown
*/ */
/* ev[MAX_EVENTS] may bloat the stack frame beyond 16 KiB */
PRAGMA_DISABLE_CHECK_STACK_FRAME
static TP_connection_generic * listener(worker_thread_t *current_thread, static TP_connection_generic * listener(worker_thread_t *current_thread,
thread_group_t *thread_group) thread_group_t *thread_group)
{ {
@@ -830,6 +834,7 @@ static TP_connection_generic * listener(worker_thread_t *current_thread,
DBUG_RETURN(retval); DBUG_RETURN(retval);
} }
PRAGMA_REENABLE_CHECK_STACK_FRAME
/** /**
Adjust thread counters in group or global Adjust thread counters in group or global
@@ -1157,6 +1162,9 @@ static bool too_many_threads(thread_group_t *thread_group)
NULL is returned if timeout has expired,or on shutdown. NULL is returned if timeout has expired,or on shutdown.
*/ */
/* ev[MAX_EVENTS] may bloat the stack frame beyond 16 KiB */
PRAGMA_DISABLE_CHECK_STACK_FRAME
TP_connection_generic *get_event(worker_thread_t *current_thread, TP_connection_generic *get_event(worker_thread_t *current_thread,
thread_group_t *thread_group, struct timespec *abstime) thread_group_t *thread_group, struct timespec *abstime)
{ {
@@ -1262,6 +1270,7 @@ TP_connection_generic *get_event(worker_thread_t *current_thread,
DBUG_RETURN(connection); DBUG_RETURN(connection);
} }
PRAGMA_REENABLE_CHECK_STACK_FRAME

View File

@@ -2287,6 +2287,8 @@ str_to_offset(const char *str, uint length, long *offset)
specification or other error. specification or other error.
*/ */
PRAGMA_DISABLE_CHECK_STACK_FRAME
Time_zone * Time_zone *
my_tz_find(THD *thd, const String *name) my_tz_find(THD *thd, const String *name)
{ {
@@ -2355,6 +2357,7 @@ my_tz_find(THD *thd, const String *name)
DBUG_RETURN(result_tz); DBUG_RETURN(result_tz);
} }
PRAGMA_REENABLE_CHECK_STACK_FRAME
/** /**

View File

@@ -7010,9 +7010,6 @@ PRAGMA_REENABLE_CHECK_STACK_FRAME
- user has file privilege - user has file privilege
*/ */
/* Stack size 16664 in clang */
PRAGMA_DISABLE_CHECK_STACK_FRAME
bool ha_connect::FileExists(const char *fn, bool bf) bool ha_connect::FileExists(const char *fn, bool bf)
{ {
if (!fn || !*fn) if (!fn || !*fn)
@@ -7048,10 +7045,8 @@ bool ha_connect::FileExists(const char *fn, bool bf)
if (n < 0) { if (n < 0) {
if (errno != ENOENT) { if (errno != ENOENT) {
char buf[_MAX_PATH + 20]; push_warning_printf(table->in_use, Sql_condition::WARN_LEVEL_WARN, 0,
"Error %d for file %s", errno, filename);
snprintf(buf, sizeof(buf), "Error %d for file %s", errno, filename);
push_warning(table->in_use, Sql_condition::WARN_LEVEL_WARN, 0, buf);
return true; return true;
} else } else
return false; return false;
@@ -7063,7 +7058,6 @@ bool ha_connect::FileExists(const char *fn, bool bf)
return true; return true;
} // end of FileExists } // end of FileExists
PRAGMA_REENABLE_CHECK_STACK_FRAME
// Called by SameString and NoFieldOptionChange // Called by SameString and NoFieldOptionChange
bool ha_connect::CheckString(PCSZ str1, PCSZ str2) bool ha_connect::CheckString(PCSZ str1, PCSZ str2)

View File

@@ -432,9 +432,6 @@ row_quiesce_write_header(
Write the table meta data after quiesce. Write the table meta data after quiesce.
@return DB_SUCCESS or error code */ @return DB_SUCCESS or error code */
/* Stack size 20904 with clang */
PRAGMA_DISABLE_CHECK_STACK_FRAME
static MY_ATTRIBUTE((nonnull, warn_unused_result)) static MY_ATTRIBUTE((nonnull, warn_unused_result))
dberr_t dberr_t
row_quiesce_write_cfg( row_quiesce_write_cfg(
@@ -452,8 +449,9 @@ row_quiesce_write_cfg(
FILE* file = fopen(name, "w+b"); FILE* file = fopen(name, "w+b");
if (file == NULL) { if (!file) {
ib_errf(thd, IB_LOG_LEVEL_WARN, ER_CANT_CREATE_FILE, fail:
ib_senderrf(thd, IB_LOG_LEVEL_WARN, ER_CANT_CREATE_FILE,
name, errno, strerror(errno)); name, errno, strerror(errno));
err = DB_IO_ERROR; err = DB_IO_ERROR;
@@ -468,31 +466,18 @@ row_quiesce_write_cfg(
err = row_quiesce_write_indexes(table, file, thd); err = row_quiesce_write_indexes(table, file, thd);
} }
if (fflush(file) != 0) { if (fflush(file)) {
std::ignore = fclose(file);
char msg[BUFSIZ]; goto fail;
snprintf(msg, sizeof(msg), "%s flush() failed", name);
ib_senderrf(
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
(ulong) errno, strerror(errno), msg);
} }
if (fclose(file) != 0) { if (fclose(file)) {
char msg[BUFSIZ]; goto fail;
snprintf(msg, sizeof(msg), "%s flose() failed", name);
ib_senderrf(
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
(ulong) errno, strerror(errno), msg);
} }
} }
return(err); return(err);
} }
PRAGMA_REENABLE_CHECK_STACK_FRAME
/*********************************************************************//** /*********************************************************************//**
Check whether a table has an FTS index defined on it. Check whether a table has an FTS index defined on it.

View File

@@ -3605,9 +3605,6 @@ static my_bool translog_is_LSN_chunk(uchar type)
@retval 1 Error @retval 1 Error
*/ */
/* Stack size 26120 from clang */
PRAGMA_DISABLE_CHECK_STACK_FRAME
my_bool translog_init_with_table(const char *directory, my_bool translog_init_with_table(const char *directory,
uint32 log_file_max_size, uint32 log_file_max_size,
uint32 server_version, uint32 server_version,
@@ -3861,6 +3858,7 @@ my_bool translog_init_with_table(const char *directory,
if (logs_found) if (logs_found)
{ {
TRANSLOG_PAGE_SIZE_BUFF psize_buff;
TRANSLOG_ADDRESS current_page= sure_page; TRANSLOG_ADDRESS current_page= sure_page;
my_bool pageok; my_bool pageok;
@@ -3901,7 +3899,6 @@ my_bool translog_init_with_table(const char *directory,
do do
{ {
TRANSLOG_VALIDATOR_DATA data; TRANSLOG_VALIDATOR_DATA data;
TRANSLOG_PAGE_SIZE_BUFF psize_buff;
uchar *page; uchar *page;
data.addr= &current_page; data.addr= &current_page;
if ((page= translog_get_page(&data, psize_buff.buffer, NULL)) == NULL) if ((page= translog_get_page(&data, psize_buff.buffer, NULL)) == NULL)
@@ -3950,7 +3947,6 @@ my_bool translog_init_with_table(const char *directory,
if (logs_found && !old_log_was_recovered && old_flags == flags) if (logs_found && !old_log_was_recovered && old_flags == flags)
{ {
TRANSLOG_VALIDATOR_DATA data; TRANSLOG_VALIDATOR_DATA data;
TRANSLOG_PAGE_SIZE_BUFF psize_buff;
uchar *page; uchar *page;
uint16 chunk_offset; uint16 chunk_offset;
data.addr= &last_valid_page; data.addr= &last_valid_page;
@@ -4241,7 +4237,6 @@ err:
ma_message_no_user(0, "log initialization failed"); ma_message_no_user(0, "log initialization failed");
DBUG_RETURN(1); DBUG_RETURN(1);
} }
PRAGMA_REENABLE_CHECK_STACK_FRAME
/* /*

View File

@@ -1558,7 +1558,7 @@ uint _ma_state_info_write(MARIA_SHARE *share, uint pWrite)
@retval 1 Error @retval 1 Error
*/ */
/* Stack size 26376 from clang */ /* MARIA_STATE_INFO_SIZE + MARIA_STATE_EXTRA_SIZE == 25559 */
PRAGMA_DISABLE_CHECK_STACK_FRAME PRAGMA_DISABLE_CHECK_STACK_FRAME
uint _ma_state_info_write_sub(File file, MARIA_STATE_INFO *state, uint pWrite) uint _ma_state_info_write_sub(File file, MARIA_STATE_INFO *state, uint pWrite)

View File

@@ -4913,6 +4913,7 @@ static int flush_cached_blocks(PAGECACHE *pagecache,
@retval PCFLUSH_PINNED Pinned blocks was met and skipped. @retval PCFLUSH_PINNED Pinned blocks was met and skipped.
@retval PCFLUSH_PINNED_AND_ERROR PCFLUSH_ERROR and PCFLUSH_PINNED. @retval PCFLUSH_PINNED_AND_ERROR PCFLUSH_ERROR and PCFLUSH_PINNED.
*/ */
PRAGMA_DISABLE_CHECK_STACK_FRAME
static int flush_pagecache_blocks_int(PAGECACHE *pagecache, static int flush_pagecache_blocks_int(PAGECACHE *pagecache,
PAGECACHE_FILE *file, PAGECACHE_FILE *file,
@@ -5242,6 +5243,7 @@ int flush_pagecache_blocks_with_filter(PAGECACHE *pagecache,
pagecache_pthread_mutex_unlock(&pagecache->cache_lock); pagecache_pthread_mutex_unlock(&pagecache->cache_lock);
DBUG_RETURN(res); DBUG_RETURN(res);
} }
PRAGMA_REENABLE_CHECK_STACK_FRAME
/* /*

View File

@@ -277,6 +277,7 @@ int maria_recovery_from_log(void)
@retval 0 OK @retval 0 OK
@retval !=0 Error @retval !=0 Error
*/ */
PRAGMA_DISABLE_CHECK_STACK_FRAME
int maria_apply_log(LSN from_lsn, LSN end_redo_lsn, LSN end_undo_lsn, int maria_apply_log(LSN from_lsn, LSN end_redo_lsn, LSN end_undo_lsn,
enum maria_apply_log_way apply, enum maria_apply_log_way apply,
@@ -562,6 +563,7 @@ end:
*/ */
DBUG_RETURN(error); DBUG_RETURN(error);
} }
PRAGMA_REENABLE_CHECK_STACK_FRAME
/* very basic info about the record's header */ /* very basic info about the record's header */

View File

@@ -49,6 +49,14 @@ if(MSVC)
message(FATAL_ERROR ${MRN_OLD_MSVC_MESSAGE}) message(FATAL_ERROR ${MRN_OLD_MSVC_MESSAGE})
endif() endif()
endif() endif()
else()
STRING(REGEX REPLACE "-Wframe-larger-than=[0-9]*" ""
CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
STRING(REGEX REPLACE "-Wframe-larger-than=[0-9]*" ""
CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
STRING(REGEX REPLACE "-Wframe-larger-than=[0-9]*" ""
CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
MY_CHECK_AND_SET_COMPILER_FLAG(-Wframe-larger-than=49152)
endif() endif()
if(MRN_BUNDLED) if(MRN_BUNDLED)

View File

@@ -2459,6 +2459,10 @@ grn_proc_call(grn_ctx *ctx, grn_obj *proc, int nargs, grn_obj *caller)
} \ } \
} while (0) } while (0)
#ifdef __GNUC__
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wframe-larger-than="
#endif
inline static void inline static void
grn_expr_exec_get_member_vector(grn_ctx *ctx, grn_expr_exec_get_member_vector(grn_ctx *ctx,
grn_obj *expr, grn_obj *expr,
@@ -3834,6 +3838,9 @@ exit :
} }
GRN_API_RETURN(val); GRN_API_RETURN(val);
} }
#ifdef __GNUC__
# pragma GCC diagnostic pop
#endif
grn_obj * grn_obj *
grn_expr_get_value(grn_ctx *ctx, grn_obj *expr, int offset) grn_expr_get_value(grn_ctx *ctx, grn_obj *expr, int offset)

View File

@@ -86,8 +86,6 @@ void test_no_instruments()
cleanup_instruments(); cleanup_instruments();
} }
PRAGMA_DISABLE_CHECK_STACK_FRAME
void test_no_instances() void test_no_instances()
{ {
int rc; int rc;
@@ -218,7 +216,7 @@ void test_no_instances()
ok(file == NULL, "no file"); ok(file == NULL, "no file");
ok(global_file_container.m_lost == 4, "lost 4"); ok(global_file_container.m_lost == 4, "lost 4");
char long_file_name[10000]; char long_file_name[5000];
int size= sizeof(long_file_name); int size= sizeof(long_file_name);
memset(long_file_name, 'X', size); memset(long_file_name, 'X', size);
@@ -247,7 +245,6 @@ void test_no_instances()
cleanup_file_hash(); cleanup_file_hash();
cleanup_instruments(); cleanup_instruments();
} }
PRAGMA_REENABLE_CHECK_STACK_FRAME
void test_with_instances() void test_with_instances()
{ {

View File

@@ -9,6 +9,13 @@ SET(CPACK_RPM_rocksdb-engine_PACKAGE_SUMMARY "RocksDB storage engine for MariaDB
SET(CPACK_RPM_rocksdb-engine_PACKAGE_DESCRIPTION "The RocksDB storage engine is a high performance storage engine, aimed SET(CPACK_RPM_rocksdb-engine_PACKAGE_DESCRIPTION "The RocksDB storage engine is a high performance storage engine, aimed
at maximising storage efficiency while maintaining InnoDB-like performance." PARENT_SCOPE) at maximising storage efficiency while maintaining InnoDB-like performance." PARENT_SCOPE)
STRING(REGEX REPLACE "-Wframe-larger-than=[0-9]*" ""
CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
STRING(REGEX REPLACE "-Wframe-larger-than=[0-9]*" ""
CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
STRING(REGEX REPLACE "-Wframe-larger-than=[0-9]*" ""
CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
MY_CHECK_AND_SET_COMPILER_FLAG(-Wframe-larger-than=32768)
MY_CHECK_AND_SET_COMPILER_FLAG(-Wno-range-loop-construct) MY_CHECK_AND_SET_COMPILER_FLAG(-Wno-range-loop-construct)
MY_CHECK_AND_SET_COMPILER_FLAG(-Wno-effc++ DEBUG RELWITHDEBINFO) MY_CHECK_AND_SET_COMPILER_FLAG(-Wno-effc++ DEBUG RELWITHDEBINFO)

View File

@@ -10454,6 +10454,7 @@ error:
} }
PRAGMA_DISABLE_CHECK_STACK_FRAME
bool spider_db_conn_is_network_error( bool spider_db_conn_is_network_error(
int error_num int error_num
) { ) {
@@ -10470,3 +10471,4 @@ bool spider_db_conn_is_network_error(
} }
DBUG_RETURN(FALSE); DBUG_RETURN(FALSE);
} }
PRAGMA_REENABLE_CHECK_STACK_FRAME