aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/gcc-interface/decl.c2
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/atomic9.adb29
4 files changed, 39 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 13a0c80..c95d1fc 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,8 @@
+2017-12-21 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Always take
+ into account the Esize if it is known.
+
2017-12-21 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c
index 20d35f3..ab5fb0e 100644
--- a/gcc/ada/gcc-interface/decl.c
+++ b/gcc/ada/gcc-interface/decl.c
@@ -723,7 +723,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
TYPE_ALIGN (gnu_type));
/* Likewise, if a size is specified, use it if valid. */
- if (Known_Esize (gnat_entity) && No (Address_Clause (gnat_entity)))
+ if (Known_Esize (gnat_entity))
gnu_size
= validate_size (Esize (gnat_entity), gnu_type, gnat_entity,
VAR_DECL, false, Has_Size_Clause (gnat_entity));
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3575257..a93c0dd 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2017-12-21 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/atomic9.adb: New test.
+
2017-12-21 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/80747
diff --git a/gcc/testsuite/gnat.dg/atomic9.adb b/gcc/testsuite/gnat.dg/atomic9.adb
new file mode 100644
index 0000000..1dab33c
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/atomic9.adb
@@ -0,0 +1,29 @@
+-- { dg-do compile }
+-- { dg-options "-fdump-tree-gimple" }
+
+with Interfaces;
+
+procedure Atomic9 is
+
+ Register : Interfaces.Unsigned_32;
+
+ type Interrupt_ID is range 0 .. 44;
+
+ procedure Trigger_Interrupt (IRQ : Interrupt_ID) is
+ NVIC_STIR : Interrupt_ID
+ with
+ Import,
+ Atomic,
+ Size => 32,
+ Address => Register'Address;
+
+ begin
+ NVIC_STIR := IRQ;
+ end Trigger_Interrupt;
+
+begin
+ Register := 16#ffff_ffff#;
+ Trigger_Interrupt (1);
+end;
+
+-- { dg-final { scan-tree-dump "atomic_store_4" "gimple" } }