[cfe-commits] [PATCH] Fix for reinterpret_cast (bug 11747)
Eli Friedman
eli.friedman at gmail.com
Wed Jan 18 15:00:32 PST 2012
On Mon, Jan 16, 2012 at 8:38 PM, Aaron Ballman <aaron at aaronballman.com> wrote:
> On Sun, Jan 15, 2012 at 9:05 PM, Eli Friedman <eli.friedman at gmail.com> wrote:
>> On Sun, Jan 15, 2012 at 1:45 PM, Aaron Ballman <aaron at aaronballman.com> wrote:
>>> This is a patch for fixing 11747, allowing reinterpret_cast to "cast"
>>> where the source and destination types are the same as per
>>> [expr.reinterpret.cast]p2. The fix itself is fairly simple -- the
>>> code was already there, it just needed to be moved up slightly since
>>> the previous check was for source and dest being pointers.
>>
>> C++11 [expr.reinterpret.cast]p2 is as follows:
>>
>> The reinterpret_cast operator shall not cast away constness (5.2.11).
>> An expression of integral, enumeration, pointer, or pointer-to-member
>> type can be explicitly converted to its own type; such a cast yields
>> the value of its operand.
>
> Attached is a new patch to hopefully better address this, as well as
> some additional test cases.
+ // C++ 5.2.10p2 has a note that mentions that, subject to all other
+ // restrictions, a cast to the same type is allowed so long as it does not
+ // cast away constness. The intent is not entirely clear here, since all
+ // other paragraphs explicitly forbid casts to the same type.
+ //
+ // The only allowed types are: integral, enumeration, pointer, or
+ // pointer-to-member types.
This comment is really unclear... you should really explicitly state
that the C++98 version is unclear, and C++11 clarifies this case.
+ } else if (SrcType->isPointerType() ||
+ SrcType->isMemberPointerType()) {
The original code allowed "DestType->isAnyPointerType() ||
DestType->isBlockPointerType()". I don't see any reason to restrict
Objective-C or block pointers.
+ if (CastsAwayConstness(Self, SrcType, DestType, /*CheckCVR=*/!CStyle,
+ /*CheckObjCLifetime=*/CStyle)) {
How could a cast where the source and destination types are identical
cast away constness?
-Eli
More information about the cfe-commits
mailing list