This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH, PR 63375] Make SRA check references for volatility


at the moment, the only check in SRA for volatility is of the DECLs
themselves.  As PR 63375 shows, there can be volatile references to a
non-volatile declaration which must not be ignored, otherwise SRA can
loose the volatility of the reference.  Since the point of SRA is to
produce unaddressable scalars, I decided to simply ignore aggregates
accessed through volatile references, which is done by the patch

Note that the patch alone does not fix the PR as we happen to make
some sort of similar mistake later on in the pipeline (see comment 4
in bugzilla).

Bootstrapped and tested on x86_64-linux.  OK for trunk and for the
maintained release branches after re-testing there?



2014-09-26  Martin Jambor  <>

	PR tree-optimization/63375
	* tree-sra.c (build_access_from_expr_1): Disqualify volatile

diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 8259dba..fb24114 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -1064,6 +1064,11 @@ build_access_from_expr_1 (tree expr, gimple stmt, bool write)
       return NULL;
+  if (TREE_THIS_VOLATILE (expr))
+    {
+      disqualify_base_of_expr (expr, "part of a volatile reference.");
+      return NULL;
+    }
   switch (TREE_CODE (expr))

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]