diff options
author | Richard Guenther <rguenther@suse.de> | 2010-04-30 13:37:02 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-04-30 13:37:02 +0000 |
commit | 47d8a9035d8f06abf06094071b500d54ed8ef17c (patch) | |
tree | 602dfa85a9ddcf6e4cf3951be72e481f89d4f78b /gcc/tree-ssa-structalias.c | |
parent | b6050cb77f23aaeedb3f4e223dbebe33143ff774 (diff) | |
download | gcc-47d8a9035d8f06abf06094071b500d54ed8ef17c.zip gcc-47d8a9035d8f06abf06094071b500d54ed8ef17c.tar.gz gcc-47d8a9035d8f06abf06094071b500d54ed8ef17c.tar.bz2 |
tree-ssa-structalias.c (get_constraint_for_1): Generate constraints for CONSTRUCTOR.
2010-04-30 Richard Guenther <rguenther@suse.de>
* tree-ssa-structalias.c (get_constraint_for_1): Generate
constraints for CONSTRUCTOR.
From-SVN: r158936
Diffstat (limited to 'gcc/tree-ssa-structalias.c')
-rw-r--r-- | gcc/tree-ssa-structalias.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index 88fa372..28bb0bb 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -3351,6 +3351,26 @@ get_constraint_for_1 (tree t, VEC (ce_s, heap) **results, bool address_p) get_constraint_for_ssa_var (t, results, address_p); return; } + case CONSTRUCTOR: + { + unsigned int i; + tree val; + VEC (ce_s, heap) *tmp = NULL; + FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t), i, val) + { + struct constraint_expr *rhsp; + unsigned j; + get_constraint_for_1 (val, &tmp, address_p); + for (j = 0; VEC_iterate (ce_s, tmp, j, rhsp); ++j) + VEC_safe_push (ce_s, heap, *results, rhsp); + VEC_truncate (ce_s, tmp, 0); + } + VEC_free (ce_s, heap, tmp); + /* We do not know whether the constructor was complete, + so technically we have to add &NOTHING or &ANYTHING + like we do for an empty constructor as well. */ + return; + } default:; } break; |