From: Tom de Vries Date: Tue, 22 Sep 2015 08:15:32 +0000 (+0000) Subject: Handle single restrict pointer in struct in create_variable_info_for_1 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=50b4b446bb3894b6b8a830554009bd9cbdb8009a;p=gcc.git Handle single restrict pointer in struct in create_variable_info_for_1 2015-09-22 Tom de Vries PR tree-optimization/67666 * tree-ssa-structalias.c (create_variable_info_for_1): Handle struct with single field non-conservative. * g++.dg/pr67666.C: New test. From-SVN: r227996 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8ffb990dd28..3dd8a1d6d8a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-09-22 Tom de Vries + + PR tree-optimization/67666 + * tree-ssa-structalias.c (create_variable_info_for_1): Handle struct + with single field non-conservative. + 2015-09-21 David S. Miller PR/67622 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8e642a852a9..0f5d39c3586 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-09-22 Tom de Vries + + PR tree-optimization/67666 + * g++.dg/pr67666.C: New test. + 2015-09-21 Steven G. Kargl PR fortran/67615 diff --git a/gcc/testsuite/g++.dg/pr67666.C b/gcc/testsuite/g++.dg/pr67666.C new file mode 100644 index 00000000000..ad162f4bb10 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr67666.C @@ -0,0 +1,17 @@ +// { dg-do compile } +// { dg-options "-O2 -fdump-tree-ealias-all" } + +struct ps +{ + int *__restrict__ p; +}; + +void +f (struct ps &__restrict__ ps1) +{ + *(ps1.p) = 1; +} + +// { dg-final { scan-tree-dump-times "clique 1 base 1" 1 "ealias" } } +// { dg-final { scan-tree-dump-times "clique 1 base 2" 1 "ealias" } } +// { dg-final { scan-tree-dump-times "(?n)clique .* base .*" 2 "ealias" } } diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index cf2b2f45de5..66772cdfd5f 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -5675,7 +5675,7 @@ create_variable_info_for_1 (tree decl, const char *name) /* If we didn't end up collecting sub-variables create a full variable for the decl. */ - if (fieldstack.length () <= 1 + if (fieldstack.length () == 0 || fieldstack.length () > MAX_FIELDS_FOR_FIELD_SENSITIVE) { vi = new_var_info (decl, name); @@ -5694,19 +5694,26 @@ create_variable_info_for_1 (tree decl, const char *name) fieldstack.iterate (i, &fo); ++i, newvi = vi_next (newvi)) { - const char *newname = "NULL"; + const char *newname = NULL; char *tempname; if (dump_file) { - tempname - = xasprintf ("%s." HOST_WIDE_INT_PRINT_DEC - "+" HOST_WIDE_INT_PRINT_DEC, name, - fo->offset, fo->size); - newname = ggc_strdup (tempname); - free (tempname); + if (fieldstack.length () != 1) + { + tempname + = xasprintf ("%s." HOST_WIDE_INT_PRINT_DEC + "+" HOST_WIDE_INT_PRINT_DEC, name, + fo->offset, fo->size); + newname = ggc_strdup (tempname); + free (tempname); + } } - newvi->name = newname; + else + newname = "NULL"; + + if (newname) + newvi->name = newname; newvi->offset = fo->offset; newvi->size = fo->size; newvi->fullsize = vi->fullsize;