comp.lang.ada
 help / color / mirror / Atom feed
From: Anh Vo <anhvofrcaus@gmail.com>
Subject: Re: Can anyone help with GNAT.Perfect_Hash_Generators ? (Possible memory corruption)
Date: Thu, 8 Sep 2016 09:00:35 -0700 (PDT)
Date: 2016-09-08T09:00:35-07:00	[thread overview]
Message-ID: <0b79fce9-b898-4a1c-91fb-ca41e87b4dd5@googlegroups.com> (raw)
In-Reply-To: <lyoa40rb84.fsf@pushface.org>

On Tuesday, September 6, 2016 at 2:04:43 PM UTC-7, Simon Wright wrote:
> Florian Weimer <fw@deneb.enyo.de> writes:
> 
> > * Natasha Kerensikova:
> 
> (BTW, phg4 failed badly with "too many tries" or some such)
> 
> >> So at this my conclusion is that GNAT.Perfect_Hash_Generators somehow
> >> works fine with 1-based string, but has trouble dealing with strings
> >> with larger indices.
> >
> > Yes, that's reasonable to assume.  It's a relatively common source of
> > bugs in Ada library code.
> >
> > One way to pin-point this further is to makea copy of the
> > g-pehage.ads, g-pehage.adb files, rename the package, and compile it
> > as part of your project, so that the usual Ada checks aren't
> > eliminated.
> 
> Yes. With phg2, under gdb, macOS, GNAT GPL 2016,
> 
> Catchpoint 1, CONSTRAINT_ERROR (perfect_hash_generators.adb:2268 index check failed) at 0x000000010000e03e in perfect_hash_generators.select_char_position.count_different_keys (
>     table=..., last=1, pos=1) at perfect_hash_generators.adb:2268
> 2268	               C := WT.Table (Reduced (K))(Pos);
> (gdb) l
> 2263	
> 2264	            --  Count the occurrences of the different characters
> 2265	
> 2266	            N := (others => 0);
> 2267	            for K in Table (S).First .. Table (S).Last loop
> 2268	               C := WT.Table (Reduced (K))(Pos);
> 2269	               N (C) := N (C) + 1;
> 2270	            end loop;
> 2271	
> 2272	            --  Update the number of different keys. Each character used
> (gdb) bt
> #0  <__gnat_debug_raise_exception> (e=0x100059440, message=...) at s-excdeb.adb:43
> #1  0x0000000100019e8c in ada.exceptions.complete_occurrence (x=0x100500af0)
>     at a-except.adb:925
> #2  0x0000000100019e9b in ada.exceptions.complete_and_propagate_occurrence (
>     x=0x100500af0) at a-except.adb:936
> #3  0x000000010001a2a6 in ada.exceptions.raise_with_location_and_msg (e=0x100059440, 
>     f=(system.address) 0x10003ca64, l=2268, c=0, m=(system.address) 0x10003e640)
>     at a-except.adb:1162
> #4  0x0000000100019e61 in <__gnat_raise_constraint_error_msg> (file=<optimized out>, 
>     line=<optimized out>, column=<optimized out>, msg=<optimized out>)
>     at a-except.adb:891
> #5  0x000000010001a390 in <__gnat_rcheck_CE_Index_Check> (file=<optimized out>, 
>     line=<optimized out>) at a-except.adb:1237
> #6  0x000000010000e03e in perfect_hash_generators.select_char_position.count_different_keys (table=..., last=1, pos=1) at perfect_hash_generators.adb:2268
> #7  0x000000010000ca72 in perfect_hash_generators.select_char_position ()
>     at perfect_hash_generators.adb:2326
> #8  0x000000010000354b in perfect_hash_generators.compute (position=...)
>     at perfect_hash_generators.adb:685
> #9  0x000000010000f466 in phg2 () at phg2.adb:52
> (gdb) p k
> $1 = 67
> (gdb) p pos
> $2 = 1
> (gdb) p reduced(k)
> $3 = 322
> (gdb) p table(s)
> $4 = (first => 0, last => 253)
> 
> ... gdb doesn't know what WT.Table is ... it's in an instantiation of
> gnat.table ..
> 
> 
> You were right about the strings, this
> 
> with Ada.Text_IO;
> procedure Str is
>    type A is access String;
>    S : String := "xxxhelloyyy";
>    P : A;
> begin
>    P := new String'(S (4 .. 8));
>    Ada.Text_IO.Put_Line
>      ("""" & P.all & """ has indices"
>         & P.all'First'Img & " .." & P.all'Last'Img);
> end Str;
> 
> gives
> 
> $ ./str
> "hello" has indices 4 .. 8

Then, what would be the proper fix?


  reply	other threads:[~2016-09-08 16:00 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-04 19:22 Can anyone help with GNAT.Perfect_Hash_Generators ? (Possible memory corruption) Natasha Kerensikova
2016-09-05 17:18 ` Stephen Leake
2016-09-06 19:24   ` Natasha Kerensikova
2016-09-06 19:52     ` Florian Weimer
2016-09-06 20:55       ` Jeffrey R. Carter
2016-09-06 21:04       ` Simon Wright
2016-09-08 16:00         ` Anh Vo [this message]
2016-09-08 17:04           ` Simon Wright
2016-09-08 18:03             ` Anh Vo
2016-09-08 18:10               ` Simon Wright
2016-09-08 19:08               ` Jeffrey R. Carter
2016-09-09  6:04                 ` Natasha Kerensikova
2016-09-09  6:15                   ` Jeffrey R. Carter
2016-09-09  8:25                   ` J-P. Rosen
2016-09-08 19:19       ` Florian Weimer
2016-09-06 19:44   ` Florian Weimer
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox