aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJavier Miranda <miranda@adacore.com>2020-04-21 09:22:28 -0400
committerPierre-Marie de Rodat <derodat@adacore.com>2020-06-18 05:08:18 -0400
commit02bf80a34e49498cfa886cfb4c906761b6218e27 (patch)
tree7672c527886b80073aa36c79f23335a25b871cf2
parent25a11453cae6975b7a10a7f30b2076e639713908 (diff)
downloadgcc-02bf80a34e49498cfa886cfb4c906761b6218e27.zip
gcc-02bf80a34e49498cfa886cfb4c906761b6218e27.tar.gz
gcc-02bf80a34e49498cfa886cfb4c906761b6218e27.tar.bz2
[Ada] Missing error on aspects Input and Output
2020-06-18 Javier Miranda <miranda@adacore.com> gcc/ada/ * sem_ch13.adb (Has_Good_Profile): Enforce strictness in the check. Required to detect wrong profiles for Input and Output. (Analyze_Stream_TSS_Definition): Minor enhancement in the text of the error for class-wide attributes.
-rw-r--r--gcc/ada/sem_ch13.adb33
1 files changed, 10 insertions, 23 deletions
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index 3a0a4b2..5318fc6 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -5019,33 +5019,14 @@ package body Sem_Ch13 is
Typ := Etype (F);
- -- If the attribute specification comes from an aspect
- -- specification for a class-wide stream, the parameter must be
- -- a class-wide type of the entity to which the aspect applies.
-
- if From_Aspect_Specification (N)
- and then Class_Present (Parent (N))
- and then Is_Class_Wide_Type (Typ)
- then
- Typ := Etype (Typ);
- end if;
-
else
Typ := Etype (Subp);
end if;
-- Verify that the prefix of the attribute and the local name for
- -- the type of the formal match, or one is the class-wide of the
- -- other, in the case of a class-wide stream operation.
-
- if Base_Type (Typ) = Base_Type (Ent)
- or else (Is_Class_Wide_Type (Typ)
- and then Typ = Class_Wide_Type (Base_Type (Ent)))
- or else (Is_Class_Wide_Type (Ent)
- and then Ent = Class_Wide_Type (Base_Type (Typ)))
- then
- null;
- else
+ -- the type of the formal match.
+
+ if Base_Type (Typ) /= Base_Type (Ent) then
return False;
end if;
@@ -5158,7 +5139,13 @@ package body Sem_Ch13 is
else
Error_Msg_Name_1 := Attr;
- Error_Msg_N ("incorrect expression for% attribute", Expr);
+
+ if Is_Class_Wide_Type (Base_Type (Ent)) then
+ Error_Msg_N
+ ("incorrect expression for class-wide% attribute", Expr);
+ else
+ Error_Msg_N ("incorrect expression for% attribute", Expr);
+ end if;
end if;
end Analyze_Stream_TSS_Definition;