On Jan 28, 2013, at 8:47 PM, Orion Poplawski wrote:
> On 01/28/2013 07:54 PM, Alan W. Irwin wrote:
>> On 2013-01-28 17:01-0700 Orion Poplawski wrote:
>>
>>> Fedora rawhide has moved to gcc 3.8 and I'm seeing:
>>>
>>> $ ./x02a -dev psc -o x02a.psc
>>>
>>> raised CONSTRAINT_ERROR : x02a.adb:138 overflow check failed
>>>
>>> I'm taking that this is due to some increased checking with ada in
>>> 3.8. Thoughts?
>>
>> Hi Orion:
>>
>> I am virtually positive you meant the gcc-4.8 development effort which
>> (as far as I can tell) has not had a single release yet. So I am
>> changing the subject line accordingly. But please confirm that is
>> what you meant.
>>
>> If you meant gcc-4.8, there is always the chance that the symptom you
>> are seeing is a general problem caused by some recently introduced
>> version incompatibilty between gcc and Ada that still needs to be
>> worked out, i.e., a compiler inconsistency issue that has nothing to
>> do with PLplot development. On the other hand, it might be a PLplot
>> Ada issue that has been detected by (presumably) better error checking
>> for the latest versions of gcc/Ada as you have suggested. To help
>> decide between those two possibilities, could you give more details?
>>
>> For example, if you use the make -k option (to keep going despite
>> errors) are you able to compile all the Ada examples other than the
>> second one? If the issue is confined to just one of our examples, then
>> it is much more likely a PLplot Ada issue with that example (or the
>> API tested with that example) as you have suggested.
>
> Sorry, yes it is 4.8. Fedora is very tight with gcc development so we
> get things early - fun!
>
> The example compiles fine, it just doesn't run. Some others don't run
> either (see below).
>
> It looks very much like a floating point overflow condition is being
> triggered. With a debug statement it aborts at the start of the loop:
>
> i = 0 r1 = 3.00000000000000E-01
>
> I suspect that:
>
> 138 r(i+16) := Integer((r1 * 255.001) - 0.499999999999999);
>
> Has too many digits to be properly expressed. The comments indicate
> that it is dealing with some rounding/truncating differences. I suspect
> that gcc in 4.8 traps these conditions by default.
>
> Others:
>
> raised CONSTRAINT_ERROR : x02a.adb:141 overflow check failed
> raised CONSTRAINT_ERROR : x03a.adb:92 overflow check failed
> raised CONSTRAINT_ERROR : plplot_thin.adb:179 overflow check failed
> raised CONSTRAINT_ERROR : x12a.adb:105 overflow check failed
> raised CONSTRAINT_ERROR : x13a.adb:73 overflow check failed
> raised CONSTRAINT_ERROR : x14a.adb:218 overflow check failed
> raised CONSTRAINT_ERROR : plplot_thin.adb:179 overflow check failed
> raised CONSTRAINT_ERROR : x18a.adb:156 overflow check failed
> raised CONSTRAINT_ERROR : x19a.adb:192 overflow check failed
> raised CONSTRAINT_ERROR : plplot_thin.adb:241 overflow check failed
> raised CONSTRAINT_ERROR : plplot_auxiliary.adb:40 overflow check failed
> raised CONSTRAINT_ERROR : xthick02a.adb:136 overflow check failed
> raised CONSTRAINT_ERROR : xthick03a.adb:92 overflow check failed
> raised CONSTRAINT_ERROR : xthick12a.adb:104 overflow check failed
> raised CONSTRAINT_ERROR : xthick13a.adb:73 overflow check failed
> raised CONSTRAINT_ERROR : xthick14a.adb:218 overflow check failed
> raised CONSTRAINT_ERROR : xthick18a.adb:155 overflow check failed
> raised CONSTRAINT_ERROR : xthick19a.adb:192 overflow check failed
>
Hi Orion,
This is puzzling. I can't see what could possibly be causing this. (By "this" I
mean the x02.adb example, as I haven't looked any of the others.) I have not
set ranges for any of the entities involved. (In Ada, you can specify an
allowed range for a variable. For instance, one could specify that r1 is
constrained between 0.0 and 1.0 and any attempt to assign a value outside that
range would raise an overflow (I think) exception.) So I don't see where there
is an opportunity to overflow either r1, a 64-bit float or r( ), a 32-bit
integer.
FWIW, GNAT does something a little controversial--it defaults to disabling
overflow checking. The controversy is that this compiler is then, by default,
not an Ada compiler. But I don't see how that is apropos to this situation.
Can you try running this program and report the results?
with Ada.Text_IO; use Ada.Text_IO;
procedure Test_Overflow is
r : Integer;
r1 : Long_Float := 0.3;
begin
Put_Line("Running....");
r := Integer((r1 * 255.001) - 0.499999999999999);
end Test_Overflow;
Compile and run:
$ gnatmake Test_Overflow.adb
$./test_overflow
I also tried it with overflow checking turned on:
$ gnatmake -gnato Test_Overflow.adb
$./test_overflow
It works either way on my system.
Jerry
------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnnow-d2d
_______________________________________________
Plplot-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/plplot-devel