[Bug fortran/68401] improve 'Allocation would exceed memory limit'
Joost.VandeVondele at mat dot ethz.ch
gcc-bugzilla@gcc.gnu.org
Thu Nov 19 13:35:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68401
--- Comment #6 from Joost VandeVondele <Joost.VandeVondele at mat dot ethz.ch> ---
(In reply to Mikael Morin from comment #5)
> (In reply to Joost VandeVondele from comment #4)
> > In the original post I suggested that I already looked at the code,
>
> What changes did you try?
Baby steps :-) see below. Basically stuck when I realized that somehow the
'tree size' needs to get in.
Index: fortran/trans.c
===================================================================
--- fortran/trans.c (revision 227094)
+++ fortran/trans.c (working copy)
@@ -567,6 +567,8 @@ gfc_call_malloc (stmtblock_t * block, tr
tree tmp, msg, malloc_result, null_result, res, malloc_tree;
stmtblock_t block2;
+ char* msgstr;
+
size = gfc_evaluate_now (size, block);
if (TREE_TYPE (size) != TREE_TYPE (size_type_node))
@@ -593,8 +595,9 @@ gfc_call_malloc (stmtblock_t * block, tr
null_result = fold_build2_loc (input_location, EQ_EXPR,
boolean_type_node, res,
build_int_cst (pvoid_type_node, 0));
+ msgstr = xasprintf("Memory allocation of %ld bytes failed",0L);
msg = gfc_build_addr_expr (pchar_type_node,
- gfc_build_localized_cstring_const ("Memory allocation failed"));
+ gfc_build_localized_cstring_const (msgstr));
tmp = fold_build3_loc (input_location, COND_EXPR, void_type_node,
null_result,
build_call_expr_loc (input_location,
@@ -641,6 +644,7 @@ gfc_allocate_using_malloc (stmtblock_t *
{
tree tmp, error_cond;
stmtblock_t on_error;
+ char* msgstr;
tree status_type = status ? TREE_TYPE (status) : NULL_TREE;
/* Evaluate size only once, and make sure it has the right type. */
@@ -677,10 +681,12 @@ gfc_allocate_using_malloc (stmtblock_t *
else
{
/* Here, os_error already implies PRED_NORETURN. */
+ /* TODO figure out how to get 'size' in this string */
+ msgstr=xasprintf("Allocation of %ld bytes would exceed memory
limit",-1L);
tmp = build_call_expr_loc (input_location, gfor_fndecl_os_error, 1,
- gfc_build_addr_expr (pchar_type_node,
- gfc_build_localized_cstring_const
- ("Allocation would exceed memory limit")));
+ gfc_build_addr_expr (pchar_type_node,
gfc_build_cstring_const(msgstr)));
+ /* gfc_build_localized_cstring_const
+ ("Allocation would exceed memory limit")));
*/
gfc_add_expr_to_block (&on_error, tmp);
}
More information about the Gcc-bugs
mailing list