On Thu, Apr 28, 2011 at 12:53 AM, John McCall <[email protected]> wrote: > > On Apr 27, 2011, at 9:39 PM, Francois Pichet wrote: > >> Author: fpichet >> Date: Wed Apr 27 23:39:50 2011 >> New Revision: 130381 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=130381&view=rev >> Log: >> Support &__uuidof(type) as a non type template argument. >> This idiom is used everywhere in MFC/COM code and as such this patch removes >> hundreds of errors when parsing MFC code with clang. >> >> Example: >> template <class T, const GUID* g = &__uuidof(T)> >> class ComTemplate { }; >> >> typedef ComTemplate<struct_with_uuid, &__uuidof(struct_with_uuid)> COM_TYPE; >> >> Of course this is just parsing support. Trying to use this in CodeGen will >> generate: >> error: cannot yet mangle expression type CXXUuidofExpr >> >> Modified: >> cfe/trunk/lib/Sema/SemaTemplate.cpp >> cfe/trunk/test/Parser/MicrosoftExtensions.cpp >> >> Modified: cfe/trunk/lib/Sema/SemaTemplate.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplate.cpp?rev=130381&r1=130380&r2=130381&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Sema/SemaTemplate.cpp (original) >> +++ cfe/trunk/lib/Sema/SemaTemplate.cpp Wed Apr 27 23:39:50 2011 >> @@ -3093,6 +3093,15 @@ >> bool AddressTaken = false; >> SourceLocation AddrOpLoc; >> if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(Arg)) { >> + >> + // Support &__uuidof(class_with_uuid) as a non-type template argument. >> + // Very common in Microsoft COM headers. >> + if (S.getLangOptions().Microsoft && >> + isa<CXXUuidofExpr>(UnOp->getSubExpr())) { >> + Converted = TemplateArgument(ArgIn); >> + return false; >> + } >> + > > You need to actually check for UO_AddrOf here. I assume most unary operators > don't work on the GUID type, but __extension__ does, and it's good to be > future-proof.
yes clearly... that's what i wanted to do. thank for catching this. > You should also make sure this works for reference template parameters; > maybe that never actually happens in the MFC headers, but it's good to get > this right. > ok i'll think about that tomorrow. now i need to go sleep. _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
