CodeGen: __uuidof should work even with an incomplete _GUID type
authorDavid Majnemer <david.majnemer@gmail.com>
Thu, 15 Aug 2013 19:59:14 +0000 (19:59 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Thu, 15 Aug 2013 19:59:14 +0000 (19:59 +0000)
commitbbecd09658b7a19626f5a86a64428ca0b851c91f
tree0e27b19a57e48c5fdad6a942df9dc259814af0c7
parent313ae7009ea1575f385d830229db1c226da6ad52
CodeGen: __uuidof should work even with an incomplete _GUID type

Summary:
We would crash in CodeGen::CodeGenModule::EmitUuidofInitializer
because our attempt to enter CodeGen::CodeGenModule::EmitConstantValue
will be foiled: the type of the constant value is incomplete.

Instead, create an unnamed type with the proper layout on all platforms.
Punt the problem of wrongly defined struct _GUID types to the user.
(It's impossible because the TU may never get to see the type and thus
we can't verify that it is suitable.)

This fixes PR16856.

Reviewers: rsmith, rnk, thakis

Reviewed By: rnk

CC: cfe-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D1375

llvm-svn: 188481
clang/lib/CodeGen/CGExpr.cpp
clang/lib/CodeGen/CodeGenModule.cpp
clang/test/CodeGenCXX/microsoft-uuidof-unsupported-target.cpp [deleted file]
clang/test/CodeGenCXX/microsoft-uuidof.cpp