diff options
author | Steve Baird <baird@adacore.com> | 2024-02-09 15:08:51 -0800 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2024-05-14 10:19:54 +0200 |
commit | 33541b880694fedb901cf8f38b2be77e4c429068 (patch) | |
tree | 7f1535c74c9e214f15d2c38df958683166de1e8b /gcc | |
parent | 416e572edb0cbc84081de5a1932be7a2138a529a (diff) | |
download | gcc-33541b880694fedb901cf8f38b2be77e4c429068.zip gcc-33541b880694fedb901cf8f38b2be77e4c429068.tar.gz gcc-33541b880694fedb901cf8f38b2be77e4c429068.tar.bz2 |
ada: Better error message for bad general case statements
If -gnatX0 is specified, we allow case statements with a selector
expression of a record or array type, but not of a private type.
If the selector expression is of a private type then we should generate
an appropriate error message instead of a bugbox.
gcc/ada/
* sem_ch5.adb (Analyze_Case_Statement): Emit a message and return
early in the case where general case statements are allowed but
the selector expression is of a private type. This is done to
avoid a bugbox.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/sem_ch5.adb | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb index 2677a2c..65370eb 100644 --- a/gcc/ada/sem_ch5.adb +++ b/gcc/ada/sem_ch5.adb @@ -1497,6 +1497,15 @@ package body Sem_Ch5 is Resolve (Exp, Etype (Exp)); Exp_Type := Etype (Exp); Is_General_Case_Statement := True; + if not (Is_Record_Type (Exp_Type) or Is_Array_Type (Exp_Type)) then + Error_Msg_N + ("selecting expression of general case statement " & + "must be a record or an array", + Exp); + + -- Avoid cascading errors + return; + end if; else Analyze_And_Resolve (Exp, Any_Discrete); Exp_Type := Etype (Exp); |