From: Leandro Ribeiro <leandrobribeiro@gmail.com>
Subject: ALI Files Cross-References Inconsistency?
Date: Thu, 13 Aug 2020 08:24:45 -0700 (PDT) [thread overview]
Message-ID: <1ab5413e-ac60-4fb7-b3bd-930de3f0fe0do@googlegroups.com> (raw)
Hello, everyone
I recently started to take a better look into Ada.
I am currently analyzing .ali files.
In the code snippets below (.ads and .adb), I wrote "|" to show where the ALI file claims a given symbol is.
The (line X) just tells which line number the line had in my local text editor.
I would expect every reference to point to the beginning of the symbol, as it is the case with "3K9*excep2".
However, all other references to the symbols from excep2.ads are exactly 4 columns ahead of the "expected point".
And all the references to the symbols from excep2.adb are exactly 12 columns ahead of the "expected point".
Question:
Is this a bug?
Or did a miss any rule about adding offsets to the references?
======== excep2.ali
...
X 1 excep2.ads
3K9*excep2 13l5 13e11 2|3b14 22l5 22t11
6U19*excep 7>10 8>9 8>12 9<9 10<9 2|5b19 20l13 20t18
7a10 S{string} 2|6b10 10r30 11r28 13r31
8e9 C{character} 2|6b22 13r38
8e12 Delim{character} 2|6b25 11r35
9b9 Found{boolean} 2|6b44 9m17 15m33
10i9 Position{positive} 2|6b64 14m38
X 2 excep2.adb
10i25 J{integer} 11r30 13r33 14r50
...
======== excep2.ads
pragma SPARK_Mode;
package |excep2
is
(line 5)-- procedure finds first occurence of char C before char Delim
procedure exce|p
(S : |String;
C, D|eli|m : Character;
Foun|d: out Boolean;
(line10)Posi|tion : out Positive)
with Annotate => (GNATprove, Intentional,
"might not be initialized in", "reviewed by Leandro: If it can be used (Found=True), it is surely initialized");
end excep2;
======== excep2.adb
pragma SPARK_Mode;
package body excep2 is
-- procedure finds first occurence of char C before char Delim
(line 5)procedure excep
(S : String; C, Delim : Character; Found: out Boolean; Position : out Positive)
is
begin
Found := False;
(line 10) for J in S'Range| loop
if S(J) = Delim then
return;
elsif S(J) = C
then Position := J;
(line 15) Found := True;
return;
end if;
end loop;
return;
(line 20)end excep;
end excep2;
next reply other threads:[~2020-08-13 15:24 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-13 15:24 Leandro Ribeiro [this message]
2020-08-13 15:55 ` ALI Files Cross-References Inconsistency? Dennis Lee Bieber
2020-08-13 21:18 ` Simon Wright
2020-08-14 19:45 ` Dennis Lee Bieber
2020-08-13 17:17 ` Egil H H
2020-08-14 8:11 ` Leandro Ribeiro
2020-08-14 16:35 ` Per Sandberg
2020-08-14 17:23 ` Simon Wright
2020-08-15 7:56 ` J-P. Rosen
2020-08-14 19:47 ` Dennis Lee Bieber
2020-09-25 16:16 ` Stephen Leake
2020-09-25 19:35 ` Dmitry A. Kazakov
2020-09-25 22:33 ` Stephen Leake
2020-09-26 8:03 ` Dmitry A. Kazakov
2020-09-30 9:53 ` wj46633
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox