[Ada] Crash on incorrect frontend inlining in GNATprove mode
authorYannick Moy <moy@adacore.com>
Mon, 21 May 2018 14:50:49 +0000 (14:50 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 21 May 2018 14:50:49 +0000 (14:50 +0000)
In some cases, the inlining performed in GNATprove mode leads to a crash,
when inlining a call where a return statement of the inlined function
returns a string literal. Now fixed.

2018-05-21  Yannick Moy  <moy@adacore.com>

gcc/ada/

* sem_eval.adb (Static_Length): Take into account case of variable of
subtype string literal.

From-SVN: r260452

gcc/ada/ChangeLog
gcc/ada/sem_eval.adb

index faa11548eadbaba619cf7b5eb2d35ef9edcf039c..d8e644ee2dbe6c412ab7300b99c570adb182c8fb 100644 (file)
@@ -1,3 +1,8 @@
+2018-04-04  Yannick Moy  <moy@adacore.com>
+
+       * sem_eval.adb (Static_Length): Take into account case of variable of
+       subtype string literal.
+
 2018-04-04  Olivier Hainque  <hainque@adacore.com>
 
        * libgnat/s-objrea.ads (Get_Memory_Bounds): Rename as Get_Xcode_Bounds.
index 93536cbacdadf2ff7160a0e009142a3c8945dafb..ca516262c36a5ec158b1c8e9ac976fff48bf18ee 100644 (file)
@@ -3403,6 +3403,13 @@ package body Sem_Eval is
          if Nkind (Expr) = N_String_Literal then
             return UI_From_Int (String_Length (Strval (Expr)));
 
+         --  With frontend inlining as performed in GNATprove mode, a variable
+         --  may be inserted that has a string literal subtype. Deal with this
+         --  specially as for the previous case.
+
+         elsif Ekind (Etype (Expr)) = E_String_Literal_Subtype then
+            return String_Literal_Length (Etype (Expr));
+
          --  Second easy case, not constrained subtype, so no length
 
          elsif not Is_Constrained (Etype (Expr)) then