Ising song
2017-07-02 14:12:14 UTC
Bonjour,
J'ai tenté de compiler ceci:
procedure bug is
type my_int is new integer;
type access_function_my_int is access function (n : my_int) return my_int;
function f (n : my_int) return my_int is (n);
a : access_function_my_int :=f'access;
begin
null;
end bug;
avec la commande gcc -c -gnat2012 bug.adb
j'obtiens:
raised STORAGE_ERROR : stack overflow or erroneous memory access
Si je modifie le type "my_int" en "subtype my_int is integer;" alors ça compile normalement.
Plus intéressant, si dans le premier programme, la fonction n'est plus inline, alors ça compile également normalement.
Avez-vous une idée de ce qui se passe ?
J'ai tenté de compiler ceci:
procedure bug is
type my_int is new integer;
type access_function_my_int is access function (n : my_int) return my_int;
function f (n : my_int) return my_int is (n);
a : access_function_my_int :=f'access;
begin
null;
end bug;
avec la commande gcc -c -gnat2012 bug.adb
j'obtiens:
raised STORAGE_ERROR : stack overflow or erroneous memory access
Si je modifie le type "my_int" en "subtype my_int is integer;" alors ça compile normalement.
Plus intéressant, si dans le premier programme, la fonction n'est plus inline, alors ça compile également normalement.
Avez-vous une idée de ce qui se passe ?