From: "Yannick Duchêne (Hibou57)" <yannick_duchene@yahoo.fr>
Subject: Weird behavior with modular type
Date: Tue, 07 Feb 2012 18:24:57 +0100
Date: 2012-02-07T18:24:57+01:00 [thread overview]
Message-ID: <op.v9bjzvhzule2fv@douda-yannick> (raw)
Hi all,
I expect the test to be shortened enough.
The following compiles and run without an error:
with Ada.Text_IO;
procedure Bug is
type Modular_Type is mod 256;
subtype Index_Type is Natural range 1 .. 3;
E : Modular_Type := 255;
I : Index_Type := 3;
B : Boolean;
begin
B := E < 10 ** I;
Ada.Text_IO.Put_Line (Boolean'Image (B));
end Bug;
It prints "FALSE"
Now, the following, with added “Natural'Pos (...)”, did not even compile:
with Ada.Text_IO;
procedure Bug is
type Modular_Type is mod 256;
subtype Index_Type is Natural range 1 .. 3;
E : Modular_Type := 255;
I : Index_Type := 3;
B : Boolean;
begin
B := E < Natural'Pos (10 ** I);
Ada.Text_IO.Put_Line (Boolean'Image (B));
end Bug;
That's counter intuitive. I would expect the first to behave as the
second, with either a failure to compile or range error at run‑time.
Someone remember a pointer to the most relevant part in the RM? I may be a
bit tired, could not find it.
Seems in the first case, the left‑side of “E < 10 ** I” has a modulo
applied, or else, I see no way to explain the result, "FALSE". But why
would this modulo be applied with a subtype of Natural and not with an
Universal_Integer?
I don't like it (and must be idiot in some way, don't you think?).
--
“Syntactic sugar causes cancer of the semi-colons.” [1]
“Structured Programming supports the law of the excluded muddle.” [1]
[1]: Epigrams on Programming — Alan J. — P. Yale University
next reply other threads:[~2012-02-07 17:24 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-07 17:24 Yannick Duchêne (Hibou57) [this message]
2012-02-07 17:49 ` Weird behavior with modular type Jeffrey Carter
2012-02-07 18:06 ` Adam Beneschan
2012-02-07 18:21 ` Yannick Duchêne (Hibou57)
2012-02-08 6:53 ` J-P. Rosen
2012-02-08 15:29 ` Adam Beneschan
2012-02-09 3:37 ` Randy Brukardt
2012-02-07 18:15 ` Yannick Duchêne (Hibou57)
2012-02-07 17:53 ` Adam Beneschan
2012-02-07 17:54 ` Gautier write-only
2012-02-07 18:23 ` Yannick Duchêne (Hibou57)
2012-02-09 3:40 ` Randy Brukardt
2012-02-07 18:02 ` Adam Beneschan
2012-02-07 18:32 ` Georg Bauhaus
2012-02-07 18:13 ` Yannick Duchêne (Hibou57)
2012-02-07 18:15 ` Adam Beneschan
2012-02-07 18:35 ` Yannick Duchêne (Hibou57)
2012-02-07 18:40 ` Adam Beneschan
2012-02-07 19:22 ` Yannick Duchêne (Hibou57)
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox