[cfe-dev] checking for virtual members

John Thompson john.thompson.jtsoftware at gmail.com
Mon Nov 15 14:51:14 PST 2010


Doug,

I forgot to mention that the vecreturn attribute is probably mainly to be
used for classes wrapping an AltiVec vector (at least that's my assuption).
My main interest at this point is just that my game compiles don't error
when this attribute is seen.  The enclosed change seems to fix the current
handler code (which I wrote), which produces errors for me because it
erroneously checks for a POD class, which thus rules out most C++ class.
May I check it in as is, unless there is some other function I should be
calling?
-John
On Tue, Nov 9, 2010 at 10:09 PM, John Thompson <
john.thompson.jtsoftware at gmail.com> wrote:

> Doug,
>
> I'm afraid I don't know the appropriate compiler terms to explain it most
> correctly.  Basically, the main idea for the attribute is to optimize a
> class that has one data member, which must be a vector, such that the whole
> object can be stored in a vector register, thus avoiding referencing
> memory.  Therefore, anything that would add extra storage, such as a vtable
> pointer would have to be detected.  I don't know that that would preclude
> multiple inheritance, but I would imagine it wouldn't make sense to have
> multiple base classes that don't add data members or virtual functions.  I
> was thinking that just checking for a vtable and only one member which must
> be a vector would be sufficient.
>
> Regarding the one data member restriction, if the class inherits from a
> base class, would those members directly appear in the CXXRecordDecl too?
> The current iterator look check I put in there assumes that, but I haven't
> verified it yet.
> Thanks.
>
> -John
>   On Mon, Nov 8, 2010 at 6:54 PM, Douglas Gregor <dgregor at apple.com>wrote:
>
>>
>>  On Nov 2, 2010, at 6:17 PM, John Thompson wrote:
>>
>>  I have no idea.  Bascially, I just need something that tells me that
>> there won't be any other stuff in the actual object, since vecreturn wants
>> to return the object in a vector register.  Could you tell me which
>> functions or function I should call?
>>
>>
>> Not without knowing what the semantics are. Please try to nail down
>> exactly what kinds of classes are/aren't allowed with vecreturn, and we can
>> find the right predicate to implement that in Clang. Unless GCC is doing
>> something silly, we should follow their behavior.
>>
>> - Doug
>>
>>  Thanks.
>>
>> -John
>> On Tue, Nov 2, 2010 at 1:28 PM, Douglas Gregor <dgregor at apple.com> wrote:
>>
>>>
>>>  On Nov 2, 2010, at 12:04 PM, John Thompson wrote:
>>>
>>>  >Why? Is this what GCC does?
>>>
>>> Yes.  The class example I enclosed previously will build with our gcc,
>>> whereas Clang would not, as Clang only allows a strict POD class or struct
>>> in the original code.  I just posted a patch on cfe-commits to fix this.
>>>
>>>
>>> Okay. This patch uses isDynamicClass(), which means that we still permit
>>> classes that involve multiple inheritance. Is that intended? Does it make
>>> sense?
>>>
>>> It seems to me that the right language idea might be the C++0x
>>> standard-layout class, rather than the idea of a non-dynamic class.
>>> - Doug
>>>
>>>  -John
>>>
>>> On Tue, Nov 2, 2010 at 11:54 AM, Douglas Gregor <dgregor at apple.com>wrote:
>>>
>>>>
>>>> On Nov 1, 2010, at 5:05 PM, John Thompson wrote:
>>>>
>>>> > I need a way easily check to make sure a function has no virtual
>>>> functions, or other stuff that would inject extra stuff into an object or
>>>> structure, as part of the validation for the vecreturn attribute.  How do I
>>>> do it?
>>>> >
>>>> > Checking the CXXRecordDecl::PlainOldData flag with isPOD doesn't work,
>>>> because the the strict definition of POD goes too far for this case.
>>>>
>>>> Why? Is this what GCC does?
>>>>
>>>>        - Doug
>>>
>>>
>>>
>>>
>>> --
>>> John Thompson
>>> John.Thompson.JTSoftware at gmail.com
>>>
>>> _______________________________________________
>>> cfe-dev mailing list
>>> cfe-dev at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>>
>>>
>>>
>>
>>
>> --
>> John Thompson
>> John.Thompson.JTSoftware at gmail.com
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>
>>
>>
>
>
> --
> John Thompson
> John.Thompson.JTSoftware at gmail.com
>
>


-- 
John Thompson
John.Thompson.JTSoftware at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20101115/2f40540c/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: vecreturn6.patch
Type: application/octet-stream
Size: 2665 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20101115/2f40540c/attachment.obj>


More information about the cfe-dev mailing list