https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118203
Bug ID: 118203
Summary: Redefined 'Image (with Put_Image aspect) causes
STORAGE_ERROR when in a case expression
Product: gcc
Version: 14.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: ada
Assignee: unassigned at gcc dot gnu.org
Reporter: 00120260a at gmail dot com
CC: dkm at gcc dot gnu.org
Target Milestone: ---
code:
with Ada.Text_IO, Ada.Strings.Text_Buffers;
procedure main is
use Ada.Text_IO, Ada.Strings.Text_Buffers;
Ln: Boolean := True;
type Clicks is (Left, Middle, Right) with Put_Image => My_Put_Image;
procedure My_Put_Image (Output : in out Root_Buffer_Type'Class; Value :
Clicks);
procedure My_Put_Image (Output : in out Root_Buffer_Type'Class; Value :
Clicks) is
begin
null;
end My_Put_Image;
A: clicks := left;
begin
Put_line ("Works, 'Image on its own statement' : "); Put
(clicks'(left)'Image);
Put_line ("Good outside a case expression: " & (case LN is when True =>
"a ", when False => "b " ) & A'Image);
Put_line ("Fails when inside it: " & (case LN is when True => "a ",
when False => "b " & A'Image));
end main;
---------
I checked, it matters not that put_image has anything in it or not. It suffices
that the aspect is present. And if expressions don't cause this, only case
expressions.