Patchwork [Ada] Reject exponent of dimensioned operand that is unknown at compile-time

login
register
mail settings
Submitter Arnaud Charlet
Date Aug. 6, 2012, 8:48 a.m.
Message ID <20120806084839.GA5288@adacore.com>
Download mbox | patch
Permalink /patch/175300/
State New
Headers show

Comments

Arnaud Charlet - Aug. 6, 2012, 8:48 a.m.
The test presented below illustrates the current patch.

------------
-- Source --
------------

with System.Dim.Mks;    use System.Dim.Mks;
with System.Dim.Mks_IO; use System.Dim.Mks_IO;

procedure Main is
begin
   for N in -3 .. +3 loop
      Put (m**N , Aft => 2, Exp => 0);
   end loop;
end Main;

-----------------
-- Compilation --
-----------------

$ gcc -c -gnat12 main.adb
main.adb:7:13: exponent of dimensioned operand must be known at compile-time
compilation abandoned due to previous error

Tested on x86_64-pc-linux-gnu, committed on trunk

2012-08-06  Vincent Pucci  <pucci@adacore.com>

	* sem_dim.adb (Analyze_Dimension_Binary_Op): Issue an error message
	for unknown exponent at compile-time.

Patch

Index: sem_dim.adb
===================================================================
--- sem_dim.adb	(revision 190155)
+++ sem_dim.adb	(working copy)
@@ -1322,9 +1322,12 @@ 
                --  value of the exponent must be known compile time. Otherwise,
                --  the exponentiation evaluation will return an error message.
 
-               if L_Has_Dimensions
-                 and then Compile_Time_Known_Value (R)
-               then
+               if L_Has_Dimensions then
+                  if not Compile_Time_Known_Value (R) then
+                     Error_Msg_N ("exponent of dimensioned operand must be " &
+                                  "known at compile-time", N);
+                  end if;
+
                   declare
                      Exponent_Value : Rational := Zero;