This is the mail archive of the gcc-patches@gcc.gnu.org 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, Cilk+] Fix for PR61962


Hi!

This patch fixes endless compilation for the case of array notation for an array which is a structure member

Ok for trunk/4.9 once testing finished?

Thanks,
Igor

Changelog:

gcc/c-family:

2014-07-31  Igor Zamyatin  <igor.zamyatin@intel.com>
 
	PR other/61962
	* array-notation-common.c (find_rank): Added handling for other
	types of references.


gcc/testsuite:

2014-07-31  Igor Zamyatin  <igor.zamyatin@intel.com>
 
	PR other/61962
	* c-c++-common/cilk-plus/AN/pr61962.c: New test.



diff --git a/gcc/c-family/array-notation-common.c b/gcc/c-family/array-notation-common.c
index c010039..5db14c6 100644
--- a/gcc/c-family/array-notation-common.c
+++ b/gcc/c-family/array-notation-common.c
@@ -221,7 +221,9 @@ find_rank (location_t loc, tree orig_expr, tree expr, bool ignore_builtin_fn,
              current_rank++;
              ii_tree = ARRAY_NOTATION_ARRAY (ii_tree);
            }
-         else if (TREE_CODE (ii_tree) == ARRAY_REF)
+         else if (TREE_CODE (ii_tree) == ARRAY_REF
+                  || TREE_CODE (ii_tree) == INDIRECT_REF
+                  || TREE_CODE (ii_tree) == COMPONENT_REF)
            ii_tree = TREE_OPERAND (ii_tree, 0);
          else if (TREE_CODE (ii_tree) == PARM_DECL
                   || TREE_CODE (ii_tree) == VAR_DECL)
diff --git a/gcc/testsuite/c-c++-common/cilk-plus/AN/pr61962.c b/gcc/testsuite/c-c++-common/cilk-plus/AN/pr61962.
new file mode 100644
index 0000000..08d4fe2
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/cilk-plus/AN/pr61962.c
@@ -0,0 +1,14 @@
+/* PR other/61962 */
+/* { dg-do compile } */
+/* { dg-options "-fcilkplus" } */
+
+struct FloatStruct
+{
+    float *f;
+};
+
+/* Either SRC or DST must be a struct, otherwise the bug does not occur.  */
+void f (struct FloatStruct* dst, float *src, unsigned int length)
+{
+    dst->f[0:length] = src[0:length];
+}


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