https://gcc.gnu.org/g:a6fc30b29f2e89057538500bb7cf2e233d4e5e41

commit r15-4150-ga6fc30b29f2e89057538500bb7cf2e233d4e5e41
Author: Ronan Desplanques <desplanq...@adacore.com>
Date:   Mon Sep 9 17:05:41 2024 +0200

    ada: Fix reproducer generation with child subprograms
    
    This patch fixes a corner case that was not handled correctly by
    Generate_Minimal_Reproducer.
    
    gcc/ada/ChangeLog:
            * generate_minimal_reproducer.adb (Generate_Minimal_Reproducer):
            Fix behavior on child subprograms without specs.

Diff:
---
 gcc/ada/generate_minimal_reproducer.adb | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/gcc/ada/generate_minimal_reproducer.adb 
b/gcc/ada/generate_minimal_reproducer.adb
index d9944f127090..ffef91be6906 100644
--- a/gcc/ada/generate_minimal_reproducer.adb
+++ b/gcc/ada/generate_minimal_reproducer.adb
@@ -29,6 +29,7 @@ with Lib;
 with Namet; use Namet;
 with Osint; use Osint;
 with Output; use Output;
+with Sinfo.Nodes;
 with System.CRTL;
 with System.OS_Lib; use System.OS_Lib;
 with Types; use Types;
@@ -126,8 +127,16 @@ begin
 
             File_Copy_Path : constant String :=
               Src_Dir_Path & Directory_Separator & Default_File_Name;
+
+            --  We may have synthesized units for child subprograms without
+            --  spec files. We need to filter out those units because we would
+            --  create bogus spec files that break compilation if we didn't.
+            Is_Synthetic_Subprogram_Spec : constant Boolean :=
+              not Sinfo.Nodes.Comes_From_Source (Lib.Cunit (J));
          begin
-            if not Lib.Is_Internal_Unit (J) then
+            if not Lib.Is_Internal_Unit (J)
+              and then not Is_Synthetic_Subprogram_Spec
+            then
                --  Mapped_Path_Name might have returned No_File. This has been
                --  observed for files with a Source_File_Name pragma.
                if Path = No_File then

Reply via email to