[cfe-commits] r64533 - /cfe/trunk/lib/CodeGen/CGCall.cpp
Chris Lattner
clattner at apple.com
Sat Feb 14 17:47:24 PST 2009
On Feb 14, 2009, at 12:52 PM, Douglas Gregor wrote:
>
> On Feb 14, 2009, at 10:08 AM, Mike Stump wrote:
>
>> On Feb 13, 2009, at 6:45 PM, Daniel Dunbar wrote:
>>> x86_64 ABI: Need to use canonical types when comparing against
>>> ASTContext types.
>>
>> [ thinking out loud ] Does it make sense to encode this into the type
>> system so that we get compilation errors when people get it wrong?
>> I've not thought about it yet, but... we could even have a
>> conversion operator that can canonicalize a type, if it needed to be
>> canonical.
This is an awesome idea.
> We could certainly take away QualType::operator==/!= and instead force
> everyone to use ASTContext::hasSameType . It would probably simplify a
> bit of code, and eliminate some not-yet-uncovered bugs that would show
> up with gratuitous typedef'ing.
I think it is a little bit deeper than that. A more common sort of
bug is something like:
if (isa<FunctionType>(SomeType))
When SomeType is not known to be canonical. We currently use the -
>isFunctionType() methods to work around this.
> I've also considered doing the same thing with
> QualType::getCVRQualifiers, since this doesn't give you all of the
> cvr-
> qualifiers unless you already have the canonical type. I've come
> across a few places where we've made this mistake.
Right.
It would be very interesting to introduce new CanQualType class.
"getcanonicaltype" would take a QualType and return a CanQualType.
The "isa" methods would only work on CanQualType's, as would the CVR
qualifier query methods.
Clients that really did want to get the "pretty" structure of a
QualType could use isa<FunctionType>(Ty.getTypePtr()) for example.
QualType and CanQualType would both be simple wrappers around a
bitmangled pointer, so I don't think there would be any inherent
cost. Doing this would also expose a *lot* of subtle problems I'm
sure, which would be a great thing.
Do you see any potential problems with this?
-Chris
More information about the cfe-commits
mailing list