================
Comment at: test/CodeGenCXX/microsoft-uuidof.cpp:8
@@ +7,3 @@
+#ifdef WRONG_GUID
+    unsigned int SomethingWentWrong[4];
+#else
----------------
Reid Kleckner wrote:
> I was expecting a diagnostic.  :)
> 
> Previously clang would reject this code:
> struct __declspec(uuid("12345678-1234-1234-1234-1234567890aB")) S { };
> typedef struct _GUID { int x; int y; } GUID;
> GUID g = __uuidof(S);
> 
> cl.exe accepts and only copies the first 8 bytes, but I'd like to preserve 
> the original clang behavior.  Can we at least check that the sizeof() the 
> user's type is 16?
Are we going into the business of making sure system-types are well formed? It 
isn't really a user type, it starts with an underscore and a capital letter... 
We don't make sure the std::type_info type is proper.

That said, consider it done if you guys feel strongly about it.

================
Comment at: lib/CodeGen/CodeGenModule.cpp:1063
@@ -1074,3 +1062,3 @@
       /*isConstant=*/true, llvm::GlobalValue::ExternalLinkage, Init, Name);
   GV->setUnnamedAddr(true);
   return GV;
----------------
Richard Smith wrote:
> Is unnamed_addr really correct for these things?
That was there when I got here. ;)

LangRef makes it sound like appropriate for this case:
> Global variables can be marked with unnamed_addr which indicates that the 
> address is not significant, only the content. Constants marked like this can 
> be merged with other constants if they have the same initializer. Note that a 
> constant with significant address can be merged with a unnamed_addr constant, 
> the result being a constant whose address is significant."

What was your thinking?


http://llvm-reviews.chandlerc.com/D1375
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to