MDEV-37502 mroonga + clang + Debug with exceeds stack frame size

Stack limits exceeded for clang-20 +Debug + MSAN.

Added disables for the following functions.

storage/mroonga/vendor/groonga/lib/ii.c:303:1: error: stack frame size (16696) exceeds limit (16384) in 'buffer_segment_reserve' [-Werror,-Wframe-larger-than]
 303 | buffer_segment_reserve(grn_ctx *ctx, grn_ii *ii,
     | ^
storage/mroonga/vendor/groonga/lib/ii.c:4803:1: error: stack frame size (20936) exceeds limit (16384) in 'grn_ii_delete_one' [-Werror,-Wframe-larger-than]
4803 | grn_ii_delete_one(grn_ctx *ctx, grn_ii *ii, grn_id tid, grn_ii_updspec *u, grn_hash *h)
     | ^
storage/mroonga/vendor/groonga/lib/ii.c:6313:1: error: stack frame size (25736) exceeds limit (16384) in 'grn_ii_column_update' [-Werror,-Wframe-larger-than]
6313 | grn_ii_column_update(grn_ctx *ctx, grn_ii *ii, grn_id rid, unsigned int section,
     | ^

For non-Debug the following stack frame sizes wher exceeded:

storage/mroonga/vendor/groonga/lib/proc/proc_select.c:3575:1: warning: stack frame size (94072) exceeds limit (49152) in 'command_select' [-Wframe-larger-than]
 3575 | command_select(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
      | ^
storage/mroonga/vendor/groonga/lib/proc/proc_schema.c:1134:1: warning: stack frame size (98360) exceeds limit (49152) in 'command_schema_output_tables' [-Wframe-larger-than]
 1134 | command_schema_output_tables(grn_ctx *ctx, grn_schema_data *data)

Reviewer: Jimmy Hu <jimmy.hu@mariadb.com>
This commit is contained in:
Daniel Black 2025-06-03 16:51:16 +10:00
commit f278c7a3e7
3 changed files with 10 additions and 4 deletions

View file

@ -300,6 +300,8 @@ buffer_segment_new(grn_ctx *ctx, grn_ii *ii, uint32_t *segno)
}
}
PRAGMA_DISABLE_CHECK_STACK_FRAME
static grn_rc
buffer_segment_reserve(grn_ctx *ctx, grn_ii *ii,
uint32_t *lseg0, uint32_t *pseg0,
@ -386,6 +388,8 @@ buffer_segment_reserve(grn_ctx *ctx, grn_ii *ii,
return ctx->rc;
}
PRAGMA_REENABLE_CHECK_STACK_FRAME
#define BGQENQUE(lseg) do {\
if (ii->header->binfo[lseg] != GRN_II_PSEG_NOT_ASSIGNED) {\
ii->header->bgqbody[ii->header->bgqhead] = ii->header->binfo[lseg];\
@ -4529,8 +4533,6 @@ grn_ii_get_disk_usage(grn_ctx *ctx, grn_ii *ii)
}
PRAGMA_DISABLE_CHECK_STACK_FRAME
#define BIT11_01(x) ((x >> 1) & 0x7ff)
#define BIT31_12(x) (x >> 12)
@ -4808,7 +4810,6 @@ exit :
return ctx->rc;
}
PRAGMA_REENABLE_CHECK_STACK_FRAME
grn_rc
grn_ii_delete_one(grn_ctx *ctx, grn_ii *ii, grn_id tid, grn_ii_updspec *u, grn_hash *h)

View file

@ -1130,6 +1130,8 @@ command_schema_output_table(grn_ctx *ctx,
grn_ctx_output_map_close(ctx);
}
PRAGMA_DISABLE_CHECK_STACK_FRAME
static void
command_schema_output_tables(grn_ctx *ctx, grn_schema_data *data)
{
@ -1201,6 +1203,8 @@ command_schema_output_tables(grn_ctx *ctx, grn_schema_data *data)
GRN_OBJ_FIN(ctx, &table_ids);
}
PRAGMA_REENABLE_CHECK_STACK_FRAME
static grn_obj *
command_schema(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
{

View file

@ -3569,7 +3569,6 @@ grn_select_data_fill_drilldowns(grn_ctx *ctx,
return succeeded;
}
}
PRAGMA_REENABLE_CHECK_STACK_FRAME
static grn_obj *
command_select(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
@ -3723,6 +3722,8 @@ exit :
return NULL;
}
PRAGMA_REENABLE_CHECK_STACK_FRAME
#define N_VARS 26
#define DEFINE_VARS grn_expr_var vars[N_VARS]