On Wed, 2005-07-27 at 13:08 +0200, Richard Guenther wrote:
> Hi all!
> 
> I reduced my array aliasing libstdc++ failures to the following
> testcase:
> 
> struct iterator
> {
>     int* ptr;
>     iterator(int* _ptr) : ptr(_ptr) {}
> };
> 
> struct container {
>     int* first;
>     container(int* _first) : first(_first) {}
>     iterator begin() { return iterator(first); }
> };
> 
> bool includes(const iterator&);
> 
> bool test4()
> {
>     int array[] = {2, 4};
>     container con(array);
>     return includes(con.begin());
> }
> 
> the weird thing now is, that the alias1 dump contains
> 
>   #   SFT.2_19 = V_MAY_DEF <SFT.2_2>;
>   #   SFT.4_20 = V_MAY_DEF <SFT.4_15>;
>   D.1797_16 = includes (&D.1794);

We get this right, you are doing something wrong in the conversion:

PTA calculates the set to be (in alias2):
_ptr_8 = { array }


and in alias1:

_ptr_9 = { array }

Which is right.

It looks like you aren't converting your new subvars right, or
something.

--Dan


Reply via email to