<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Charles, we have the same conceptual issue with our port of OpenVMS.<br>
    <br>
    Many of our legacy languages have 32-bit pointers builtin into them
    and<br>
    OpenVMS itself has many existing 32-bit interfaces but we generate<br>
    64-bit code, use ELF-64 containers, etc.  We provide dual-sized<br>
    pointers in our older C/C++ compilers.  For our legacy compilers,
    our IR<br>
    conversion code simply does a whole bunch of typecasts with the
    32-bit<br>
    pointers to turn them into 64-bit pointers, etc.  We're still not
    sure how to<br>
    properly describe this with pointer aliasing however.<br>
    <br>
    For clang (the cfe-dev list would give more info), we've already
    found that<br>
    clang provides address_space(4) for 32-bits addresses.  We're
    looking at<br>
    leveraging that to provide our dual-sized pointers and add code to
    convert<br>
    between the two (sign-extend the 32 into a 64-bit pointer and chop
    off the<br>
    top-half of a 64-bit pointer with an optional warning message - that
    is<br>
    what we do today on our current Alpha and Itanium systems).  That
    reminds<br>
    me to hop over to cfe-dev and float my issues as well since there
    might be<br>
    some overlap.<br>
    <br>
    John<br>
    <br>
  </body>
</html>