aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2020-05-30 11:14:12 +0200
committerPierre-Marie de Rodat <derodat@adacore.com>2020-07-10 05:16:23 -0400
commitdb6c298d166d22cdd33761d37a1dc94ec20b6969 (patch)
tree7262622fd43f9e34ed3436073b1aa22d27174113 /gcc
parent33502a3a8ce760840d3e71dfe0dab9910514327e (diff)
downloadgcc-db6c298d166d22cdd33761d37a1dc94ec20b6969.zip
gcc-db6c298d166d22cdd33761d37a1dc94ec20b6969.tar.gz
gcc-db6c298d166d22cdd33761d37a1dc94ec20b6969.tar.bz2
[Ada] Add warning for overlays changing scalar storage order
gcc/ada/ * sem_ch13.adb (Analyze_Attribute_Definition_Clause) <Address>: Issue an unconditional warning for an overlay that changes the scalar storage order.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/sem_ch13.adb10
1 files changed, 6 insertions, 4 deletions
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index bad6a96..4bdd2cf 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -6075,10 +6075,10 @@ package body Sem_Ch13 is
(N, U_Ent, No_Uint, O_Ent, Off);
end if;
- -- If the overlay changes the storage order, mark the
- -- entity as being volatile to block any optimization
- -- for it since the construct is not really supported
- -- by the back end.
+ -- If the overlay changes the storage order, warn since
+ -- the construct is not really supported by the back end.
+ -- Also mark the entity as being volatile to block the
+ -- optimizer, even if there is no warranty on the result.
if (Is_Record_Type (Etype (U_Ent))
or else Is_Array_Type (Etype (U_Ent)))
@@ -6087,6 +6087,8 @@ package body Sem_Ch13 is
and then Reverse_Storage_Order (Etype (U_Ent)) /=
Reverse_Storage_Order (Etype (O_Ent))
then
+ Error_Msg_N
+ ("??overlay changes scalar storage order", Expr);
Set_Treat_As_Volatile (U_Ent);
end if;