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?
next prev parent 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