mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-22 19:11:18 +08:00
re PR tree-optimization/21584 (ICE: verify_flow_sensitive_alias_info failed.)
PR 21584 PR 22219 * tree-ssa-alias.c (create_name_tags): Also process non-dereferenced pointers. Remove argument 'ai'. Update all callers. testsuite/ChangeLog PR 21584 PR 22219 * g++.dg/tree-ssa/pr21584-1.C: New test. * g++.dg/tree-ssa/pr21584-2.C: New test. From-SVN: r101498
This commit is contained in:
parent
8ce2456a6d
commit
a4f9129458
gcc
@ -1,3 +1,11 @@
|
||||
2005-06-30 Diego Novillo <dnovillo@redhat.com>
|
||||
|
||||
PR 21584
|
||||
PR 22219
|
||||
* tree-ssa-alias.c (create_name_tags): Also process
|
||||
non-dereferenced pointers.
|
||||
Remove argument 'ai'. Update all callers.
|
||||
|
||||
2005-06-30 Andrew Pinski <pinskia@physics.uc.edu>
|
||||
|
||||
* config/rs6000/darwin.h (STARTING_FRAME_OFFSET):
|
||||
|
@ -1,3 +1,10 @@
|
||||
2005-06-30 Diego Novillo <dnovillo@redhat.com>
|
||||
|
||||
PR 21584
|
||||
PR 22219
|
||||
* g++.dg/tree-ssa/pr21584-1.C: New test.
|
||||
* g++.dg/tree-ssa/pr21584-2.C: New test.
|
||||
|
||||
2005-06-30 Ziemowit Laski <zlaski@apple.com>
|
||||
|
||||
* obj-c++.dg/try-catch-11.mm: New.
|
||||
|
38
gcc/testsuite/g++.dg/tree-ssa/pr21584-1.C
Normal file
38
gcc/testsuite/g++.dg/tree-ssa/pr21584-1.C
Normal file
@ -0,0 +1,38 @@
|
||||
extern "C" {
|
||||
|
||||
extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
|
||||
throw () __attribute__ ((__nonnull__ (1, 2)));
|
||||
|
||||
extern char *foo (char *__restrict __s) throw ();
|
||||
}
|
||||
|
||||
class cset {
|
||||
public:
|
||||
cset();
|
||||
int operator()(unsigned char) const;
|
||||
private:
|
||||
char v[(127 * 2 + 1)+1];
|
||||
};
|
||||
|
||||
inline int cset::operator()(unsigned char c) const
|
||||
{
|
||||
return v[c];
|
||||
}
|
||||
|
||||
extern cset csspace;
|
||||
|
||||
void baz()
|
||||
{
|
||||
char *vec;
|
||||
char buf[512];
|
||||
|
||||
char *p = buf;
|
||||
while (csspace(*p))
|
||||
p++;
|
||||
|
||||
if (*p != '#' && (p = foo(buf)) != 0) {
|
||||
vec = new char[10+ 1];
|
||||
strcpy(vec, p);
|
||||
}
|
||||
}
|
||||
|
22
gcc/testsuite/g++.dg/tree-ssa/pr21584-2.C
Normal file
22
gcc/testsuite/g++.dg/tree-ssa/pr21584-2.C
Normal file
@ -0,0 +1,22 @@
|
||||
extern char *strcpy (char *__restrict __dest, __const char *__restrict __src);
|
||||
|
||||
extern char *foo (void);
|
||||
extern void *malloc(__SIZE_TYPE__) __attribute__((malloc));
|
||||
|
||||
char v[100];
|
||||
|
||||
void baz()
|
||||
{
|
||||
char *vec;
|
||||
char buf[512];
|
||||
|
||||
char *p = buf;
|
||||
while (v[(*p)])
|
||||
p++;
|
||||
|
||||
if (*p != '#' && (p = foo()) != 0) {
|
||||
strcpy ((char*)malloc(10), p);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -791,14 +791,21 @@ compute_points_to_and_addr_escape (struct alias_info *ai)
|
||||
are assigned the same name tag. */
|
||||
|
||||
static void
|
||||
create_name_tags (struct alias_info *ai)
|
||||
create_name_tags (void)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < VARRAY_ACTIVE_SIZE (ai->processed_ptrs); i++)
|
||||
for (i = 1; i < num_ssa_names; i++)
|
||||
{
|
||||
tree ptr = VARRAY_TREE (ai->processed_ptrs, i);
|
||||
struct ptr_info_def *pi = SSA_NAME_PTR_INFO (ptr);
|
||||
tree ptr = ssa_name (i);
|
||||
struct ptr_info_def *pi;
|
||||
|
||||
if (!ptr
|
||||
|| !POINTER_TYPE_P (TREE_TYPE (ptr))
|
||||
|| !SSA_NAME_PTR_INFO (ptr))
|
||||
continue;
|
||||
|
||||
pi = SSA_NAME_PTR_INFO (ptr);
|
||||
|
||||
if (pi->pt_anything || !pi->is_dereferenced)
|
||||
{
|
||||
@ -824,10 +831,15 @@ create_name_tags (struct alias_info *ai)
|
||||
problems if they both had different name tags because
|
||||
they would have different SSA version numbers (which
|
||||
would force us to take the name tags in and out of SSA). */
|
||||
for (j = 0; j < i; j++)
|
||||
for (j = 1; j < i; j++)
|
||||
{
|
||||
tree q = VARRAY_TREE (ai->processed_ptrs, j);
|
||||
struct ptr_info_def *qi = SSA_NAME_PTR_INFO (q);
|
||||
tree q = ssa_name (j);
|
||||
struct ptr_info_def *qi;
|
||||
|
||||
if (!q || !POINTER_TYPE_P (TREE_TYPE (q)))
|
||||
continue;
|
||||
|
||||
qi = SSA_NAME_PTR_INFO (q);
|
||||
|
||||
if (qi
|
||||
&& qi->pt_vars
|
||||
@ -896,7 +908,8 @@ compute_flow_sensitive_aliasing (struct alias_info *ai)
|
||||
find_what_p_points_to (ptr);
|
||||
}
|
||||
}
|
||||
create_name_tags (ai);
|
||||
|
||||
create_name_tags ();
|
||||
|
||||
for (i = 0; i < VARRAY_ACTIVE_SIZE (ai->processed_ptrs); i++)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user