[cfe-commits] [patch] Add codegen support for __uuidof

Eli Friedman eli.friedman at gmail.com
Mon Oct 1 22:11:29 PDT 2012


On Sun, Sep 30, 2012 at 11:56 PM, Nico Weber <thakis at chromium.org> wrote:
> Hi,
>
> the attached patch adds codegen support for __uuidof. It's fairly
> similar to how the RTTI descriptor code works. What __uuidof does:
> Structs can be tagged with __declspec(uuid("some string with
> numbers")), and after that __uuidof(taggedstruct) returns a IID struct
> filled with the numbers from the uuid declspec attribute. See
> test/Parser/MicrosoftExtensions.cpp and the included test for more
> information.
>
> I moved GetUuidAttrOfType() out of Sema since codegen now needs it
> too. I couldn't find a great place for it -- it's a static function on
> CXXUuidofExpr. Since that expression isn't very useful without uuid
> attrs, it's a reasonable place for it I think.
>
> I'm not very familiar with visibilities. WeakAnyLinkage is mostly a
> guess, so please check that.
>
> The name of the symbol generated for __uuidof constants seems to be an
> implementation detail, so I just made up a mangling ("__uuid_"
> followed by the contents of the uuid, see GetAddrOfIIDDescriptor()).

If the linkage is weak, the name matters, because the symbol will be
merged with symbols from other compilation units.  You might want to
consider marking it internal/constant/unnamed_addr instead, if the
address doesn't actually matter; that way, the name is irrelevant, and
the compiler and/or linker can still merge them.

-Eli



More information about the cfe-commits mailing list