aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTerry Guo <terry.guo@arm.com>2014-04-01 10:01:45 +0000
committerTerry Guo <terry.guo@arm.com>2014-04-01 10:01:45 +0000
commite666fc3c21353f86918bd1ffd43c9fff09e19d33 (patch)
treeb2242d07771b978f62b3c80c5079a93e7f7b2d2c
parentaf9d14f67db3f1b1ad313a235bf5d09374254e31 (diff)
parentff7174ee1e476bf4b669420720ea357aa0bc8c3c (diff)
Sync with upstream 4.7 branchARM/embedded-4_7-branch
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/ARM/embedded-4_7-branch@208982 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/ada/ChangeLog14
-rw-r--r--gcc/ada/system-linux-alpha.ads8
-rw-r--r--gcc/ada/system-linux-mips.ads1
-rw-r--r--gcc/ada/system-linux-mips64el.ads1
-rw-r--r--gcc/ada/system-linux-mipsel.ads1
-rw-r--r--gcc/ada/system-linux-s390.ads8
-rw-r--r--gcc/ada/system-linux-s390x.ads8
-rw-r--r--gcc/ada/system-linux-sparc.ads8
-rw-r--r--gcc/ada/system-linux-sparcv9.ads10
-rw-r--r--gcc/ada/system-rtems.ads8
-rw-r--r--gcc/ada/system-vxworks-arm.ads8
-rw-r--r--gcc/doc/invoke.texi5
-rw-r--r--gcc/fortran/ChangeLog12
-rw-r--r--gcc/fortran/frontend-passes.c27
-rw-r--r--gcc/fortran/trans-intrinsic.c2
-rw-r--r--gcc/gimple.h3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/where_4.f9018
20 files changed, 128 insertions, 30 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 36ec2a5eb9b..93121803569 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2014-04-01 Richard Biener <rguenther@suse.de>
+
+ * gimple.h (struct gimple_statement_base): Align subcode to
+ 16 bits.
+
+2014-04-01 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * doc/invoke.texi (mapp-regs): Clarify.
+
2014-03-23 Eric Botcazou <ebotcazou@adacore.com>
PR rtl-optimization/60601
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index b572c86cd9e..a7cffcf326d 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20140328
+20140401
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 25cf0ddbed3..3259967be50 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,17 @@
+2014-03-30 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR ada/60703
+ * system-linux-alpha.ads: Adjust for Ada 2005.
+ * system-linux-mips.ads: Likewise.
+ * system-linux-mips64el.ads: Likewise.
+ * system-linux-mipsel.ads: Likewise.
+ * system-linux-s390.ads: Likewise.
+ * system-linux-s390x.ads: Likewise.
+ * system-linux-sparc.ads: Likewise.
+ * system-linux-sparcv9.ads: Likewise.
+ * system-rtems.ads: Likewise.
+ * system-vxworks-arm.ads: Likewise.
+
2014-03-13 Eric Botcazou <ebotcazou@adacore.com>
PR ada/51483
diff --git a/gcc/ada/system-linux-alpha.ads b/gcc/ada/system-linux-alpha.ads
index 154c01bf6c5..f5aa9506ff9 100644
--- a/gcc/ada/system-linux-alpha.ads
+++ b/gcc/ada/system-linux-alpha.ads
@@ -35,9 +35,10 @@
------------------------------------------------------------------------------
package System is
-pragma Pure (System);
--- Note that we take advantage of the implementation permission to
--- make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ pragma Pure;
+ -- Note that we take advantage of the implementation permission to make
+ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
+ -- 2005, this is Pure in any case (AI-362).
type Name is (SYSTEM_NAME_GNAT);
System_Name : constant Name := SYSTEM_NAME_GNAT;
@@ -61,6 +62,7 @@ pragma Pure (System);
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := 8;
diff --git a/gcc/ada/system-linux-mips.ads b/gcc/ada/system-linux-mips.ads
index 885995c076c..8f5713fed3a 100644
--- a/gcc/ada/system-linux-mips.ads
+++ b/gcc/ada/system-linux-mips.ads
@@ -62,6 +62,7 @@ package System is
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := 8;
diff --git a/gcc/ada/system-linux-mips64el.ads b/gcc/ada/system-linux-mips64el.ads
index de3215b3ec4..ad94841c980 100644
--- a/gcc/ada/system-linux-mips64el.ads
+++ b/gcc/ada/system-linux-mips64el.ads
@@ -62,6 +62,7 @@ package System is
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := 8;
diff --git a/gcc/ada/system-linux-mipsel.ads b/gcc/ada/system-linux-mipsel.ads
index a25642a153c..5c2e0a54835 100644
--- a/gcc/ada/system-linux-mipsel.ads
+++ b/gcc/ada/system-linux-mipsel.ads
@@ -62,6 +62,7 @@ package System is
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := 8;
diff --git a/gcc/ada/system-linux-s390.ads b/gcc/ada/system-linux-s390.ads
index 19ad00025ad..7864db845af 100644
--- a/gcc/ada/system-linux-s390.ads
+++ b/gcc/ada/system-linux-s390.ads
@@ -35,9 +35,10 @@
------------------------------------------------------------------------------
package System is
-pragma Pure (System);
--- Note that we take advantage of the implementation permission to
--- make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ pragma Pure;
+ -- Note that we take advantage of the implementation permission to make
+ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
+ -- 2005, this is Pure in any case (AI-362).
type Name is (SYSTEM_NAME_GNAT);
System_Name : constant Name := SYSTEM_NAME_GNAT;
@@ -61,6 +62,7 @@ pragma Pure (System);
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := 8;
diff --git a/gcc/ada/system-linux-s390x.ads b/gcc/ada/system-linux-s390x.ads
index 6ed5749aafd..7a28cccf1c3 100644
--- a/gcc/ada/system-linux-s390x.ads
+++ b/gcc/ada/system-linux-s390x.ads
@@ -35,9 +35,10 @@
------------------------------------------------------------------------------
package System is
-pragma Pure (System);
--- Note that we take advantage of the implementation permission to
--- make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ pragma Pure;
+ -- Note that we take advantage of the implementation permission to make
+ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
+ -- 2005, this is Pure in any case (AI-362).
type Name is (SYSTEM_NAME_GNAT);
System_Name : constant Name := SYSTEM_NAME_GNAT;
@@ -61,6 +62,7 @@ pragma Pure (System);
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := 8;
diff --git a/gcc/ada/system-linux-sparc.ads b/gcc/ada/system-linux-sparc.ads
index 1f4f2207d45..ab8591675a7 100644
--- a/gcc/ada/system-linux-sparc.ads
+++ b/gcc/ada/system-linux-sparc.ads
@@ -35,9 +35,10 @@
------------------------------------------------------------------------------
package System is
-pragma Pure (System);
--- Note that we take advantage of the implementation permission to
--- make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ pragma Pure;
+ -- Note that we take advantage of the implementation permission to make
+ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
+ -- 2005, this is Pure in any case (AI-362).
type Name is (SYSTEM_NAME_GNAT);
System_Name : constant Name := SYSTEM_NAME_GNAT;
@@ -61,6 +62,7 @@ pragma Pure (System);
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := 8;
diff --git a/gcc/ada/system-linux-sparcv9.ads b/gcc/ada/system-linux-sparcv9.ads
index 14d89f929b2..5b7598f3e43 100644
--- a/gcc/ada/system-linux-sparcv9.ads
+++ b/gcc/ada/system-linux-sparcv9.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (GNU/Linux-SPARCV9 Version) --
-- --
--- Copyright (C) 1992-2011, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -35,9 +35,10 @@
------------------------------------------------------------------------------
package System is
-pragma Pure (System);
--- Note that we take advantage of the implementation permission to
--- make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ pragma Pure;
+ -- Note that we take advantage of the implementation permission to make
+ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
+ -- 2005, this is Pure in any case (AI-362).
type Name is (SYSTEM_NAME_GNAT);
System_Name : constant Name := SYSTEM_NAME_GNAT;
@@ -61,6 +62,7 @@ pragma Pure (System);
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := 8;
diff --git a/gcc/ada/system-rtems.ads b/gcc/ada/system-rtems.ads
index 3cab22abfe4..50bf7ac6402 100644
--- a/gcc/ada/system-rtems.ads
+++ b/gcc/ada/system-rtems.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (Compiler Version) --
-- --
--- Copyright (C) 1992-2011 Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2014 Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -34,9 +34,8 @@
-- --
------------------------------------------------------------------------------
--- This version of System is a RTEMS version that is used in building
--- the compiler. This is based as closely as possible on the generic
--- version with the following exceptions:
+-- This version is for RTEMS. It is based as closely as possible on the
+-- generic version with the following exceptions:
-- + priority definitions
package System is
@@ -67,6 +66,7 @@ package System is
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := Standard'Storage_Unit;
diff --git a/gcc/ada/system-vxworks-arm.ads b/gcc/ada/system-vxworks-arm.ads
index 484d40d95c7..265066aab33 100644
--- a/gcc/ada/system-vxworks-arm.ads
+++ b/gcc/ada/system-vxworks-arm.ads
@@ -35,10 +35,10 @@
------------------------------------------------------------------------------
package System is
-pragma Pure (System);
--- Note that we take advantage of the implementation permission to make this
--- unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada 2005, this is
--- Pure in any case (AI-362).
+ pragma Pure;
+ -- Note that we take advantage of the implementation permission to make
+ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
+ -- 2005, this is Pure in any case (AI-362).
type Name is (SYSTEM_NAME_GNAT);
System_Name : constant Name := SYSTEM_NAME_GNAT;
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 2f551a27081..23e80601b6f 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -18318,8 +18318,9 @@ These @samp{-m} options are supported on the SPARC:
@opindex mno-app-regs
@opindex mapp-regs
Specify @option{-mapp-regs} to generate output using the global registers
-2 through 4, which the SPARC SVR4 ABI reserves for applications. This
-is the default.
+2 through 4, which the SPARC SVR4 ABI reserves for applications. Like the
+global register 1, each global register 2 through 4 is then treated as an
+allocable register that is clobbered by function calls. This is the default.
To be fully SVR4 ABI compliant at the cost of some performance loss,
specify @option{-mno-app-regs}. You should compile libraries and system
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index a56f12043b7..11cbdde933b 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,15 @@
+2014-03-29 Mikael Morin <mikael@gcc.gnu.org>
+
+ PR fortran/60677
+ * trans-intrinsic.c (gfc_conv_intrinsic_ichar): Enlarge argument
+ list buffer.
+
+2014-03-29 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/60522
+ * frontend-passes.c (cfe_code): Do not walk subtrees
+ for WHERE.
+
2014-03-20 Tobias Burnus <burnus@net-b.de>
PR fortran/60543
diff --git a/gcc/fortran/frontend-passes.c b/gcc/fortran/frontend-passes.c
index acfb14d069f..05ecd20a874 100644
--- a/gcc/fortran/frontend-passes.c
+++ b/gcc/fortran/frontend-passes.c
@@ -442,12 +442,35 @@ cfe_expr_0 (gfc_expr **e, int *walk_subtrees,
to insert statements as needed. */
static int
-cfe_code (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED,
- void *data ATTRIBUTE_UNUSED)
+cfe_code (gfc_code **c, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
{
current_code = c;
inserted_block = NULL;
changed_statement = NULL;
+
+ /* Do not do anything inside a WHERE statement; scalar assignments, BLOCKs
+ and allocation on assigment are prohibited inside WHERE, and finally
+ masking an expression would lead to wrong-code when replacing
+
+ WHERE (a>0)
+ b = sum(foo(a) + foo(a))
+ END WHERE
+
+ with
+
+ WHERE (a > 0)
+ tmp = foo(a)
+ b = sum(tmp + tmp)
+ END WHERE
+*/
+
+ if ((*c)->op == EXEC_WHERE)
+ {
+ *walk_subtrees = 0;
+ return 0;
+ }
+
+
return 0;
}
diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c
index 89dbb012f86..b8752995fca 100644
--- a/gcc/fortran/trans-intrinsic.c
+++ b/gcc/fortran/trans-intrinsic.c
@@ -4664,7 +4664,7 @@ gfc_conv_intrinsic_index_scan_verify (gfc_se * se, gfc_expr * expr,
static void
gfc_conv_intrinsic_ichar (gfc_se * se, gfc_expr * expr)
{
- tree args[2], type, pchartype;
+ tree args[3], type, pchartype;
int nargs;
nargs = gfc_intrinsic_argument_list_length (expr);
diff --git a/gcc/gimple.h b/gcc/gimple.h
index 97eec59fcb0..4a168207144 100644
--- a/gcc/gimple.h
+++ b/gcc/gimple.h
@@ -305,6 +305,9 @@ struct GTY(()) gimple_statement_base {
/* Nonzero if this statement contains volatile operands. */
unsigned has_volatile_ops : 1;
+ /* Padding to get subcode to 16 bit alignment. */
+ unsigned pad : 1;
+
/* The SUBCODE field can be used for tuple-specific flags for tuples
that do not require subcodes. Note that SUBCODE should be at
least as wide as tree codes, as several tuples store tree codes
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7e77479ca2f..e6f2832f45a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-04-29 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/60522
+ * gfortran.dg/where_4.f90: New test case.
+
2014-03-20 Tobias Burnus <burnus@net-b.de>
PR fortran/60543
diff --git a/gcc/testsuite/gfortran.dg/where_4.f90 b/gcc/testsuite/gfortran.dg/where_4.f90
new file mode 100644
index 00000000000..1ff2e4ca31a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/where_4.f90
@@ -0,0 +1,18 @@
+! { dg-do compile }
+! PR 60522 - this used to ICE.
+! Original test case Roger Ferrer Ibanez
+subroutine foo(a, b)
+ implicit none
+ integer, dimension(:), intent(inout) :: a
+ integer, dimension(:), intent(in) :: b
+
+ where (b(:) > 0)
+ where (b(:) > 100)
+ a(lbound(a, 1):ubound(a, 1)) = b(lbound(b, 1):ubound(b, 1)) * b(lbound(b, 1):ubound(b, 1)) - 100
+ elsewhere
+ a(lbound(a, 1):ubound(a, 1)) = b(lbound(b, 1):ubound(b, 1)) * b(lbound(b, 1):ubound(b, 1))
+ end where
+ elsewhere
+ a(lbound(a, 1):ubound(a, 1)) = - b(lbound(b, 1):ubound(b, 1)) * b(lbound(b, 1):ubound(b, 1))
+ end where
+end subroutine foo