aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/sem_attr.adb
diff options
context:
space:
mode:
authorJavier Miranda <miranda@adacore.com>2016-10-13 12:12:18 +0000
committerArnaud Charlet <charlet@gcc.gnu.org>2016-10-13 14:12:18 +0200
commita946a5c38d46ae99653649aafadf8f020defaa5d (patch)
tree58bad2ff2cb86b921572595ff8d1a1dd40b814d5 /gcc/ada/sem_attr.adb
parentc877ae8dc867e29552b5ab4b2367479829b4de69 (diff)
downloadgcc-a946a5c38d46ae99653649aafadf8f020defaa5d.zip
gcc-a946a5c38d46ae99653649aafadf8f020defaa5d.tar.gz
gcc-a946a5c38d46ae99653649aafadf8f020defaa5d.tar.bz2
sem_prag.ads (Process_Compile_Time_Warning_Or_Error): New overloaded subprogram that factorizes code executed as part of the regular...
2016-10-13 Javier Miranda <miranda@adacore.com> * sem_prag.ads (Process_Compile_Time_Warning_Or_Error): New overloaded subprogram that factorizes code executed as part of the regular processing of these pragmas and as part of its validation after invoking the backend. * sem_prag.adb (Process_Compile_Time_Warning_Or_Error): New subprogram. (Process_Compile_Time_Warning_Or_Error): If the condition is known at compile time then invoke the new overloaded subprogram; otherwise register the pragma in a table to validate it after invoking the backend. * sem.ads, sem.adb (Unlock): New subprogram. * sem_attr.adb (Analyze_Attribute [Size]): If we are processing pragmas Compile_Time_Warning and Compile_Time_Errors after the backend has been called then evaluate this attribute if 'Size is known at compile time. * gnat1drv.adb (Post_Compilation_Validation_Checks): Validate compile time warnings and errors. * sem_ch13.ads, sem_ch13.adb (Validate_Compile_Time_Warning_Error): New subprogram. (Validate_Compile_Time_Warning_Errors): New subprogram. From-SVN: r241107
Diffstat (limited to 'gcc/ada/sem_attr.adb')
-rw-r--r--gcc/ada/sem_attr.adb16
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb
index b457aa4..0190bd7 100644
--- a/gcc/ada/sem_attr.adb
+++ b/gcc/ada/sem_attr.adb
@@ -5746,6 +5746,22 @@ package body Sem_Attr is
Check_Not_Incomplete_Type;
Check_Not_CPP_Type;
Set_Etype (N, Universal_Integer);
+
+ -- If we are processing pragmas Compile_Time_Warning and Compile_
+ -- Time_Errors after the backend has been called and this occurrence
+ -- of 'Size is known at compile time then it is safe to perform this
+ -- evaluation. Needed to perform the static evaluation of the full
+ -- boolean expression of these pragmas.
+
+ if In_Compile_Time_Warning_Or_Error
+ and then Is_Entity_Name (P)
+ and then (Is_Type (Entity (P))
+ or else Ekind (Entity (P)) = E_Enumeration_Literal)
+ and then Size_Known_At_Compile_Time (Entity (P))
+ then
+ Rewrite (N, Make_Integer_Literal (Sloc (N), Esize (Entity (P))));
+ Analyze (N);
+ end if;
end Size;
-----------