81 lines
2.5 KiB
Diff
81 lines
2.5 KiB
Diff
|
|
diff -uprN a/gcc/testsuite/gcc.dg/affine-add-1.c b/gcc/testsuite/gcc.dg/affine-add-1.c
|
||
|
|
--- a/gcc/testsuite/gcc.dg/affine-add-1.c 1970-01-01 08:00:00.000000000 +0800
|
||
|
|
+++ b/gcc/testsuite/gcc.dg/affine-add-1.c 2021-03-18 19:41:21.308000000 +0800
|
||
|
|
@@ -0,0 +1,16 @@
|
||
|
|
+/* { dg-do compile } */
|
||
|
|
+/* { dg-options "-O2" } */
|
||
|
|
+
|
||
|
|
+extern unsigned char a[][13][23][15][11];
|
||
|
|
+short b;
|
||
|
|
+int c, d;
|
||
|
|
+void e(int f, int g[][3][4][3]) {
|
||
|
|
+ for (char h = 0;; h = 2)
|
||
|
|
+ for (; f;)
|
||
|
|
+ for (short i;; i = d)
|
||
|
|
+ for (char j; j; j = c)
|
||
|
|
+ for (char k = 0; k < 4; k = g[h][b][i][j])
|
||
|
|
+ a[h][b][i][j][k] = 0;
|
||
|
|
+}
|
||
|
|
+unsigned char a[3][13][23][15][11];
|
||
|
|
+int main() {}
|
||
|
|
diff -uprN a/gcc/testsuite/g++.dg/affine-add-1.C b/gcc/testsuite/g++.dg/affine-add-1.C
|
||
|
|
--- a/gcc/testsuite/g++.dg/affine-add-1.C 1970-01-01 08:00:00.000000000 +0800
|
||
|
|
+++ b/gcc/testsuite/g++.dg/affine-add-1.C 2021-03-18 19:40:28.432000000 +0800
|
||
|
|
@@ -0,0 +1,33 @@
|
||
|
|
+/* { dg-do compile } */
|
||
|
|
+/* { dg-options "-O3" } */
|
||
|
|
+
|
||
|
|
+#include <algorithm>
|
||
|
|
+
|
||
|
|
+extern int a[];
|
||
|
|
+extern unsigned char b[][151800];
|
||
|
|
+extern long long c[][20][23][22][11];
|
||
|
|
+char d, e;
|
||
|
|
+int f;
|
||
|
|
+unsigned g;
|
||
|
|
+long h;
|
||
|
|
+void i(unsigned long long s, unsigned short j) {
|
||
|
|
+ for (char k = 0; k < 12; k += 3)
|
||
|
|
+ for (short l = 0; l < 9; l = std::min(j, (unsigned short)4050683)) {
|
||
|
|
+ for (bool m(h); m < bool(~0); m = 1)
|
||
|
|
+ for (int t = 0; t < 4; t = std::min(s, (unsigned long long)40808803))
|
||
|
|
+ for (int n = 0; n < 9; n += e)
|
||
|
|
+ a[n] = 0;
|
||
|
|
+ for (char o = 0; o < g; o = 4)
|
||
|
|
+ for (bool p; p < f; p = d) {
|
||
|
|
+ for (long q(s); q < 4ULL; q += 1ULL)
|
||
|
|
+ b[k][o + q] = 0;
|
||
|
|
+ for (int r = 0; r < 11; r += ~0 || 0)
|
||
|
|
+ c[k][l][o][d][r] = 0;
|
||
|
|
+ }
|
||
|
|
+ }
|
||
|
|
+}
|
||
|
|
+int a[0];
|
||
|
|
+unsigned char b[3][151800];
|
||
|
|
+long long c[3][20][23][22][11];
|
||
|
|
+int main() {}
|
||
|
|
+
|
||
|
|
diff -uprN a/gcc/tree-affine.c b/gcc/tree-affine.c
|
||
|
|
--- a/gcc/tree-affine.c 2021-03-15 18:55:31.928000000 +0800
|
||
|
|
+++ b/gcc/tree-affine.c 2021-03-18 16:34:05.932000000 +0800
|
||
|
|
@@ -184,9 +184,16 @@ aff_combination_add_elt (aff_tree *comb,
|
||
|
|
if (scale == 1)
|
||
|
|
elt = fold_convert (type, elt);
|
||
|
|
else
|
||
|
|
- elt = fold_build2 (MULT_EXPR, type,
|
||
|
|
- fold_convert (type, elt),
|
||
|
|
- wide_int_to_tree (type, scale));
|
||
|
|
+ {
|
||
|
|
+ if (POINTER_TYPE_P (TREE_TYPE (elt)))
|
||
|
|
+ {
|
||
|
|
+ elt = copy_node (elt);
|
||
|
|
+ TREE_TYPE (elt) = sizetype;
|
||
|
|
+ }
|
||
|
|
+ elt = fold_build2 (MULT_EXPR, type,
|
||
|
|
+ fold_convert (type, elt),
|
||
|
|
+ wide_int_to_tree (type, scale));
|
||
|
|
+ }
|
||
|
|
|
||
|
|
if (comb->rest)
|
||
|
|
comb->rest = fold_build2 (PLUS_EXPR, type, comb->rest,
|