It's not necessary to do rounding for alloca operations when the requested
alignment is equal to the stack alignment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40004 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/FrontendAda/array_constructor.adb b/test/FrontendAda/array_constructor.adb
new file mode 100644
index 0000000..d75b8e0
--- /dev/null
+++ b/test/FrontendAda/array_constructor.adb
@@ -0,0 +1,6 @@
+-- RUN: %llvmgcc -c %s -o /dev/null
+procedure Array_Constructor is
+   A : array (Integer range <>) of Boolean := (True, False);
+begin
+   null;
+end;
diff --git a/test/FrontendAda/array_range_ref.adb b/test/FrontendAda/array_range_ref.adb
new file mode 100644
index 0000000..f7cba01
--- /dev/null
+++ b/test/FrontendAda/array_range_ref.adb
@@ -0,0 +1,7 @@
+-- RUN: %llvmgcc -c %s -o /dev/null
+procedure Array_Range_Ref is
+   A : String (1 .. 3);
+   B : String := A (A'RANGE)(1 .. 3);
+begin
+   null;
+end;
diff --git a/test/FrontendAda/array_ref.adb b/test/FrontendAda/array_ref.adb
new file mode 100644
index 0000000..093233a
--- /dev/null
+++ b/test/FrontendAda/array_ref.adb
@@ -0,0 +1,11 @@
+-- RUN: %llvmgcc -c %s -o /dev/null
+procedure Array_Ref is
+   type A is array (Natural range <>, Natural range <>) of Boolean;
+   type A_Access is access A;
+   function Get (X : A_Access) return Boolean is
+   begin
+      return X (0, 0);
+   end;
+begin
+   null;
+end;
diff --git a/test/FrontendAda/array_size.adb b/test/FrontendAda/array_size.adb
new file mode 100644
index 0000000..da4c589
--- /dev/null
+++ b/test/FrontendAda/array_size.adb
@@ -0,0 +1,10 @@
+-- RUN: %llvmgcc -c %s -o /dev/null
+procedure Array_Size is
+   subtype S is String (1 .. 2);
+   type R is record
+      A : S;
+   end record;
+   X : R;
+begin
+   null;
+end;
diff --git a/test/FrontendAda/asm.adb b/test/FrontendAda/asm.adb
new file mode 100644
index 0000000..bd1bc4c
--- /dev/null
+++ b/test/FrontendAda/asm.adb
@@ -0,0 +1,6 @@
+-- RUN: %llvmgcc -c %s -o /dev/null
+with System.Machine_Code;
+procedure Asm is
+begin
+   System.Machine_Code.Asm ("");
+end;
diff --git a/test/FrontendAda/debug_var_size.ads b/test/FrontendAda/debug_var_size.ads
new file mode 100644
index 0000000..818071d
--- /dev/null
+++ b/test/FrontendAda/debug_var_size.ads
@@ -0,0 +1,8 @@
+-- RUN: %llvmgcc -c -g %s -o /dev/null
+package Debug_Var_Size is
+   subtype Length_Type is Positive range 1 .. 64;
+   type T (Length : Length_Type := 1) is record
+      Varying_Length : String (1 .. Length);
+      Fixed_Length   : Boolean;
+   end record;
+end;
diff --git a/test/FrontendAda/dg.exp b/test/FrontendAda/dg.exp
new file mode 100644
index 0000000..2307c3f
--- /dev/null
+++ b/test/FrontendAda/dg.exp
@@ -0,0 +1,6 @@
+load_lib llvm.exp
+
+if [ llvm_gcc_supports ada ] then {
+    RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{adb,ads}]]
+}
+
diff --git a/test/FrontendAda/emit_var.ads b/test/FrontendAda/emit_var.ads
new file mode 100644
index 0000000..b8d5f8f
--- /dev/null
+++ b/test/FrontendAda/emit_var.ads
@@ -0,0 +1,5 @@
+-- RUN: %llvmgcc -c %s -o /dev/null
+with Ada.Finalization;
+package Emit_Var is
+   type Search_Type is new Ada.Finalization.Controlled with null record;
+end;
diff --git a/test/FrontendAda/fat_fields.adb b/test/FrontendAda/fat_fields.adb
new file mode 100644
index 0000000..906e34e
--- /dev/null
+++ b/test/FrontendAda/fat_fields.adb
@@ -0,0 +1,10 @@
+-- RUN: %llvmgcc -c %s -o /dev/null
+-- RUN: %llvmgcc -c %s -O2 -o /dev/null
+package body Fat_Fields is
+   procedure Proc is
+   begin
+      if P = null then
+         null;
+      end if;
+   end;
+end;
diff --git a/test/FrontendAda/fat_fields.ads b/test/FrontendAda/fat_fields.ads
new file mode 100644
index 0000000..d3eab3e
--- /dev/null
+++ b/test/FrontendAda/fat_fields.ads
@@ -0,0 +1,6 @@
+package Fat_Fields is
+   pragma Elaborate_Body;
+   type A is array (Positive range <>) of Boolean;
+   type A_Ptr is access A;
+   P : A_Ptr := null;
+end;
diff --git a/test/FrontendAda/global_constant.adb b/test/FrontendAda/global_constant.adb
new file mode 100644
index 0000000..4b64f10
--- /dev/null
+++ b/test/FrontendAda/global_constant.adb
@@ -0,0 +1,5 @@
+-- RUN: %llvmgcc -c %s -o /dev/null
+package body Global_Constant is
+begin
+   raise An_Error;
+end;
diff --git a/test/FrontendAda/global_constant.ads b/test/FrontendAda/global_constant.ads
new file mode 100644
index 0000000..cef4b11
--- /dev/null
+++ b/test/FrontendAda/global_constant.ads
@@ -0,0 +1,4 @@
+package Global_Constant is
+   pragma Elaborate_Body;
+   An_Error : exception;
+end;
diff --git a/test/FrontendAda/non_lvalue.adb b/test/FrontendAda/non_lvalue.adb
new file mode 100644
index 0000000..2a92e52
--- /dev/null
+++ b/test/FrontendAda/non_lvalue.adb
@@ -0,0 +1,7 @@
+-- RUN: %llvmgcc -c %s -o /dev/null
+package body Non_LValue is
+   function A (Y : U) return String is
+   begin
+      return Y.X.B;
+   end;
+end;
diff --git a/test/FrontendAda/non_lvalue.ads b/test/FrontendAda/non_lvalue.ads
new file mode 100644
index 0000000..7d4eeed
--- /dev/null
+++ b/test/FrontendAda/non_lvalue.ads
@@ -0,0 +1,11 @@
+package Non_LValue is
+   type T (Length : Natural) is record
+      A : String (1 .. Length);
+      B : String (1 .. Length);
+   end record;
+   type T_Ptr is access all T;
+   type U is record
+      X : T_Ptr;
+   end record;
+   function A (Y : U) return String;
+end;
diff --git a/test/FrontendAda/switch.adb b/test/FrontendAda/switch.adb
new file mode 100644
index 0000000..0eb20b2
--- /dev/null
+++ b/test/FrontendAda/switch.adb
@@ -0,0 +1,12 @@
+-- RUN: %llvmgcc -c %s -o /dev/null
+function Switch (N : Integer) return Integer is
+begin
+   case N is
+      when Integer'First .. -1 =>
+         return -1;
+      when 0 =>
+         return 0;
+      when others =>
+         return 1;
+   end case;
+end;
diff --git a/test/FrontendAda/unc_constructor.adb b/test/FrontendAda/unc_constructor.adb
new file mode 100644
index 0000000..e32c04a
--- /dev/null
+++ b/test/FrontendAda/unc_constructor.adb
@@ -0,0 +1,9 @@
+-- RUN: %llvmgcc -c %s -o /dev/null
+package body Unc_Constructor is
+   procedure P (X : A) is
+   begin
+      if X = A0 then
+         null;
+      end if;
+   end;
+end;
diff --git a/test/FrontendAda/unc_constructor.ads b/test/FrontendAda/unc_constructor.ads
new file mode 100644
index 0000000..d6f8db5
--- /dev/null
+++ b/test/FrontendAda/unc_constructor.ads
@@ -0,0 +1,8 @@
+package Unc_Constructor is
+   type C is null record;
+   type A is array (Positive range <>) of C;
+   A0 : constant A;
+   procedure P (X : A);
+private
+   A0 : aliased constant A := (1 .. 0 => (null record));
+end;
diff --git a/test/FrontendAda/var_size.adb b/test/FrontendAda/var_size.adb
new file mode 100644
index 0000000..2b4d499
--- /dev/null
+++ b/test/FrontendAda/var_size.adb
@@ -0,0 +1,7 @@
+-- RUN: %llvmgcc -c %s -o /dev/null
+package body Var_Size is
+   function A (X : T) return String is
+   begin
+      return X.A;
+   end;
+end;
diff --git a/test/FrontendAda/var_size.ads b/test/FrontendAda/var_size.ads
new file mode 100644
index 0000000..6a570cb
--- /dev/null
+++ b/test/FrontendAda/var_size.ads
@@ -0,0 +1,7 @@
+package Var_Size is
+   type T (Length : Natural) is record
+      A : String (1 .. Length);
+      B : String (1 .. Length);
+   end record;
+   function A (X : T) return String;
+end;
diff --git a/test/FrontendAda/vce.adb b/test/FrontendAda/vce.adb
new file mode 100644
index 0000000..3d783d0
--- /dev/null
+++ b/test/FrontendAda/vce.adb
@@ -0,0 +1,7 @@
+-- RUN: %llvmgcc -c %s -o /dev/null
+procedure VCE is
+  S : String (1 .. 2);
+  B : Character := 'B';
+begin
+  S := 'A' & B;
+end;
diff --git a/test/FrontendAda/vce_lv.adb b/test/FrontendAda/vce_lv.adb
new file mode 100644
index 0000000..5242b15
--- /dev/null
+++ b/test/FrontendAda/vce_lv.adb
@@ -0,0 +1,9 @@
+-- RUN: %llvmgcc -c %s -o /dev/null
+procedure VCE_LV is
+   type P is access String ;
+   type T is new P (5 .. 7);
+   subtype U is String (5 .. 7);
+   X : T := new U'(others => 'A');
+begin
+   null;
+end;