From ba89624e938a9309a0a8a672b2753159cf0a8a78 Mon Sep 17 00:00:00 2001 From: Yannick Moy Date: Fri, 1 Apr 2022 16:58:19 +0200 Subject: [PATCH] [Ada] Spurious error on freezing of tagged types in SPARK SPARK RM 7.7(8) mandates that the freezing point of a tagged type must occur within the so-called early call region of all its primitives. This check may lead to spurious errors due to generated constructs being considered in the search for the start of the early call region. gcc/ada/ * sem_elab.adb (Is_Suitable_Construct): Fix for generated constructs. --- gcc/ada/sem_elab.adb | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/gcc/ada/sem_elab.adb b/gcc/ada/sem_elab.adb index caebb174577..068402aec13 100644 --- a/gcc/ada/sem_elab.adb +++ b/gcc/ada/sem_elab.adb @@ -7346,7 +7346,7 @@ package body Sem_Elab is -- is a byproduct of the parser. Such a null statement should be -- excluded from the early call region because it carries the -- source location of the "end" keyword, and may lead to confusing - -- diagnistics. + -- diagnostics. if Nkind (N) = N_Null_Statement and then not Comes_From_Source (N) @@ -7354,6 +7354,16 @@ package body Sem_Elab is and then Nkind (Context) = N_Handled_Sequence_Of_Statements then return False; + + -- Similarly, internally-generated objects and types may have + -- out-of-order source locations that confuse diagnostics, e.g. + -- source locations in the body for objects/types generated in + -- the spec. + + elsif Nkind (N) in N_Full_Type_Declaration | N_Object_Declaration + and then not Comes_From_Source (N) + then + return False; end if; -- Otherwise only constructs which correspond to pure Ada -- 2.47.2