Using pointers of non-default mode via __attribute__ ((mode)) 
produces incorrect code in many cases as the tree optimizers
treat an __attribute__ ((mode) qualified pointer type as 
equivalent to the corresponding non-qualified type.
(This is a regression over 3.4 introduced by the tree-ssa merge.)

As an example, the follow code ICEs on s390x-ibm-linux,
because the tree optimizers have removed the required type
conversion as 'useless':

struct test;
typedef int * __attribute__ ((mode (SI))) test_ptr32;
typedef struct test *test_ptr64;

int
test (test_ptr32 *a, test_ptr64 *b)
{
  return *a == *b;
}

See the discussion at:
http://gcc.gnu.org/ml/gcc/2004-10/msg00775.html
for more details.

-- 
           Summary: Tree optimizers ignore pointer modes
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: uweigand at gcc dot gnu dot org
                CC: gcc-bugs at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18184

Reply via email to