[cfe-dev] Preliminary reinterpret_cast Sema patch

Argiris Kirtzidis akyrtzi at gmail.com
Sun Oct 19 04:48:23 PDT 2008


Hi Sebastian,

Some comments about the tests:

>   // G++ doesn't like the first two. I disagree with that. /2 allows 
> casting
>   // an expression to its own type, subject to all other restrictions. 
> The only
>   // restriction mentioned, however, is that casting away constness is 
> invalid.
>   // It should therefore be valid to cast a non-pointer type to its 
> own type,
>   // no matter how useless that is.
>   int i = 0;
>   i = reinterpret_cast<int>(i);
>   structure s;
>   s = reinterpret_cast<structure>(s);

These are errors for MSVC and Comeau too. I think the "Subject to the 
restrictions in this section" refers to the whole 5.2.10 section, not 
the paragraph.
See here for another related perspective:
http://www.archivum.info/comp.std.c++/2006-06/msg00080.html

>   float *fp = reinterpret_cast<float*>(l);
>   // Note: should fail on 64-bit, but LLVM is target-agnostic. Is it 
> possible
>   // to annotate the bytecode to make this fail in native codegen?
>   int i = reinterpret_cast<int>(fp);

LLVM IR produced by C/C++ cannot be target-agnostic. See: 
http://llvm.org/docs/tutorial/LangImpl8.html#targetindep
You can use TargetInfo to check whether the above conversion is legal.

>   fnptr2 fp2 = reinterpret_cast<fnptr2>(fp);
>   // Should fail in C++03 without extensions, succeed with exts or in 
> 0x mode.
>   void *vp = reinterpret_cast<void*>(fp2);

All three compilers accept this; I think Clang should accept it too, 
programmers will be unpleasantly surprised if they find this is not allowed.

-Argiris


Sebastian Redl wrote:
> Hi,
>
> For people who want to write test cases, or otherwise play with this, 
> here's my preliminary patch for semantic analysis of reinterpret_cast. 
> The patch also includes my previous work on const_cast, slightly updated.
>
> The patch doesn't include reinterpret_cast test cases yet, but I've 
> attached another file containing a number of commented (but not 
> -verify-ready) test cases I wrote last night.
>
> Sebastian
> ------------------------------------------------------------------------
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev



More information about the cfe-dev mailing list