Unhandled win32 exception in P_Referenced_Decl [on some windows systems]
Nobody has claimed this yet.
- Dominant language
- Ada
- Stars
- 171
- Forks
- 48
- PR merge metrics
- No merged PRs in 30d
Description
Dear LibAdaLang developers,
The Dependency Graph Extractor has been moved to alire.
We practice what we preach so we want to determine our own dependency graph.
Libadalang is one of our dependencies.
We observed that libadalang chrashed while analysing itself
(C:\path\to\Dependency_Graph_Extractor-Ada\alire\cache\dependencies\libadalang_22.0.0_5f365aa4\src\libadalang-common.adb)
To reproduce this issue
- Install alire and git.
- Open alr powershell window
- go to
C:\path\to git clone https://github.com/TNO/Dependency_Graph_Extractor-Ada.git- go to
C:\path\to\Dependency_Graph_Extractor-Ada git checkout libadalang_issuealr buildalr run --args="-o dependency_graph_extractor.graphml -p C:\path\to\Dependency_Graph_Extractor-Ada dependency_graph_extractor.gpr"
This provides the following output: log.txt
before the program stops: 
Debugging yields not much more info: 
Looking at the log, we can clearly see that we are inside the function Get_Referenced_Decl.
function Get_Referenced_Decl (Name : LAL.Name'Class) return LAL.Basic_Decl
is
begin
Ada.Text_IO.Put_Line ("Get_Referenced_Decl");
declare
Referenced_Decl : constant LAL.Basic_Decl := Name.P_Referenced_Decl;
begin
Ada.Text_IO.Put_Line ("After P_Referenced_Decl");
if Referenced_Decl.Is_Null then
return Referenced_Decl;
end if;
-- In the case of a subprogram library unit use the specification and
-- not the body when (a) the specification exists and (b) Name does
-- not occur in the same unit as the body.
if Is_Subp_Body_Unit_With_Spec (Referenced_Decl)
and then Name.Unit.Root /= Referenced_Decl.Unit.Root
then
return Referenced_Decl.P_Previous_Part_For_Decl;
else
return Referenced_Decl;
end if;
end;
end Get_Referenced_Decl;
yet haven't passed the line Ada.Text_IO.Put_Line ("After P_Referenced_Decl");.
So the error must be triggered by the declaration
Referenced_Decl : constant LAL.Basic_Decl := Name.P_Referenced_Decl;
However, we noticed that the problem does not occur on all windows systems on which we tested this behaviour!
Failing Windows system
About windows

Passing Windows system
About windows

Alire
About alire [installed via https://github.com/alire-project/alire/releases/download/v1.1.2/alr-1.1.2-installer-x86_64-windows.exe]
PS C:\path\to> alr version
Alr version: 1.1.2
Alire Library version: 1.1.2
alr status is (valid) (0 releases indexed) (loaded in 0.892s)
config folder is C:\Users\laarpjljvd\.config\alire
source folder is C:\Users\laarpjljvd\.config\alire\alire
interaction flags are: force:FALSE not-interactive:FALSE
alr root is empty
alr root detection has settled on path: C:\path\to\Dependency_Graph_Extractor-Ada
alr is finding 1 GPR project files
alr session state is [OUTSIDE]
alr compiled on [2022-01-27 13:44:56] with GNAT version [Community 2021 (20210519-103)]
platform fingerprint: Windows Bits_64 Msys2
platform properties: MSYS2 WINDOWS NATIVE USER BITS_64
community index required branch: stable-1.1
On failing machine
PS C:\path\to> alr toolchain
CRATE VERSION STATUS NOTES
gprbuild 22.0.1 Default
gnat_native 11.2.3 Available
gnat_native 11.2.4 Default
On passing machine
PS C:\path\to> alr toolchain
Nothing installed in configuration prefix C:\Users\nx011987\.config\alire
(Twice option 2 was selected).
Git
About git (on failing machine)
PS C:\path\to> git version
git version 2.33.1.windows.1
About git (on passing machine)
PS C:\path\to> git version
git version 2.35.1.windows.2
Hope that you can reproduce and make libadalang even better!
Greetings,
Pierre
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the Windows crash using the listed Alire and Dependency_Graph_Extractor-Ada steps, then inspect libadalang-common.adb around Get_Referenced_Decl and the Name.P_Referenced_Decl call. Compare the failing and passing toolchain details and use log.txt to narrow the exception. Done means the dependency graph extractor completes without the win32 exception on the affected Windows setup.
Written by the indexing model from the issue text.
Assessment
- Domain
- compilers, operating-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100