Read the GNAT documentation. If I remember correctly, it does not, by default, check for integer overflow. You have to set a compiler option to do this. GNAT is not fully conformant to all the semantics required for validation in it's default mode, and rightly so, I believe. You have to give it the right options to make it fully conform. -Corey Rick Duley wrote: > Hi teamers, > > I was working on a demonstration exercise for students the other day and > gave myself one heck of a surprise. > The idea was that I could increment an integer variable past Integer'Last > and trap the ensuing uproar, doing something useful with it without > crashing > the program. Well, ...that was the idea :( > > I am using GNAT 3.13p -- is this a problem with the compiler or have I > misunderstood the purpose of CONSTRAINT_ERROR all these years? Do I > have to > do a manual check for run-time errors like this or am I doomed to have my > jet plane turn upside down when the variable goes from positive to > negative? > ;) > > Keep the faith > --------------------------------------------------------- > > Please: if you have not already done so, alter your addressbook > settings for > me to > [log in to unmask] > --------------------------------------------------------- > Rick Duley > Perth, Western Australia > tel: +61 040 910 6049 /-_|\ > / \ > perth *_.-._/ > "Never be a pioneer. v > It's the early Christian > that gets the fattest Lion." > Saki (H. H. Munro (1870 - 1916)) > > > > > > _________________________________________________________________ > Get your FREE download of MSN Explorer at > http://explorer.msn.com/intl.asp > -- ada programming problem from > -- rick duley > -- edith cowan university > -- perth, western australia > -- [log in to unmask] > -- > -- explanations, suggestions, solutions please > -- > with Ada.Text_Io; use Ada.Text_Io; > with Ada.Exceptions; use Ada.Exceptions; > procedure Fall_Off_The_End is > -- > -- in the PC implementation for which this program was > -- written and compiled with GNAT 3.13p the maximum > -- integer value (Integer'Last) is 2,147,486,647 > -- this program starts with something close and increments > -- until the value is exceeded > -- the idea is to show that CONSTRAINT_ERROR is raised and > -- can be protected against without intefering with the > -- run of the program > -- > -- oops! > -- > Start : constant Integer := 2_147_483_600; > Log_File : File_Type; > begin -- Fall_Off_The_End > Create > (File => Log_File, > Mode => Out_File, > Name => "Fall_Off_The_End.txt"); > > Count_Loop: > for Count in 1 .. 100 loop > Protect_Block: > declare > > -- this is where the fun should begin > Current : Integer := Start + Count; > -- once the value of Count exceeds 47 this > -- assignment should (IMHO) raise > -- CONSTRAINT_ERROR and drive the point of > -- control into the exception handler > > begin -- Protect_Block > Put_Line(Item => Integer'Image(Current)); > Put_Line(File => Log_File, > Item => Integer'Image(Current)); > exception > when Error: others => > -- write to log file > Put_Line(File => Log_File, > Item => Exception_Name(Error)); > Put_Line(File => Log_File, > Item => Exception_Message(Error)); > Put_Line(File => Log_File, > Item => "Resetting Current to" > & Integer'Image(Integer'Last)); > > -- reset operating value > Current := Integer'Last; > > -- confirm in log file > Put_Line(File => Log_File, > Item => Integer'Image(Current)); > > -- write to screen > Put_Line(Item => Exception_Name(Error)); > Put_Line(Item => Exception_Message(Error)); > Put_Line(Item => "Current reset to" > & Integer'Image(Integer'Last)); > Put_Line(Item => Integer'Image(Current)); > end Protect_Block; > end loop Count_Loop; > > Ada.Text_Io.Close > (File => Log_File); > end Fall_Off_The_End;