On Tue, Dec 10, 2013 at 11:58 AM, Hans Wennborg <hans at chromium.org> wrote:> It would be nice if we could make the TypePrinter not print the > calling convention if it's the default one for the ABI, but > TypePrinter doesn't have a lot of context.. no Sema, no ASTContext :/ >Does this patch fix any failures for you? It doesn't fix that test case, unfortunately. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131210/ffd7b891/attachment.html> -------------- next part -------------- diff --git a/lib/AST/TypePrinter.cpp b/lib/AST/TypePrinter.cpp index 082d027..cdfc90b 100644 --- a/lib/AST/TypePrinter.cpp +++ b/lib/AST/TypePrinter.cpp @@ -399,10 +399,16 @@ void TypePrinter::printMemberPointerBefore(const MemberPointerType *T, raw_ostream &OS) { IncludeStrongLifetimeRAII Strong(Policy); SaveAndRestore<bool> NonEmptyPH(HasEmptyPlaceHolder, false); - printBefore(T->getPointeeType(), OS); + + // Suppress the printing of implied calling conventions. + QualType Pointee = T->getPointeeType(); + if (const AdjustedType *AT = dyn_cast<AdjustedType>(Pointee)) + Pointee = AT->getOriginalType(); + + printBefore(Pointee, OS); // Handle things like 'int (Cls::*A)[4];' correctly. // FIXME: this should include vectors, but vectors use attributes I guess. - if (isa<ArrayType>(T->getPointeeType())) + if (isa<ArrayType>(Pointee)) OS << '('; PrintingPolicy InnerPolicy(Policy); @@ -415,11 +421,17 @@ void TypePrinter::printMemberPointerAfter(const MemberPointerType *T, raw_ostream &OS) { IncludeStrongLifetimeRAII Strong(Policy); SaveAndRestore<bool> NonEmptyPH(HasEmptyPlaceHolder, false); + + // Suppress the printing of implied calling conventions. + QualType Pointee = T->getPointeeType(); + if (const AdjustedType *AT = dyn_cast<AdjustedType>(Pointee)) + Pointee = AT->getOriginalType(); + // Handle things like 'int (Cls::*A)[4];' correctly. // FIXME: this should include vectors, but vectors use attributes I guess. - if (isa<ArrayType>(T->getPointeeType())) + if (isa<ArrayType>(Pointee)) OS << ')'; - printAfter(T->getPointeeType(), OS); + printAfter(Pointee, OS); } void TypePrinter::printConstantArrayBefore(const ConstantArrayType *T,
On Tue, Dec 10, 2013 at 3:57 PM, Reid Kleckner <rnk at google.com> wrote:> On Tue, Dec 10, 2013 at 11:58 AM, Hans Wennborg <hans at chromium.org> wrote: >> >> It would be nice if we could make the TypePrinter not print the >> calling convention if it's the default one for the ABI, but >> TypePrinter doesn't have a lot of context.. no Sema, no ASTContext :/ > > > Does this patch fix any failures for you? It doesn't fix that test case, > unfortunately.Unfortunately, no, I still see the same failures. These are the TypePrinter related failures I see: Clang :: CXX/class.access/p6.cpp Clang :: CXX/expr/expr.const/p3-0x.cpp Clang :: CXX/expr/expr.mptr.oper/p5.cpp Clang :: CXX/expr/expr.mptr.oper/p6-0x.cpp Clang :: CXX/expr/expr.unary/expr.unary.op/p4.cpp Clang :: CXX/temp/temp.arg/temp.arg.nontype/p5.cpp Clang :: SemaCXX/addr-of-overloaded-function.cpp Clang :: SemaCXX/const-cast.cpp Clang :: SemaCXX/cstyle-cast.cpp Clang :: SemaCXX/functional-cast.cpp Clang :: SemaCXX/reinterpret-cast.cpp Clang :: SemaCXX/static-cast.cpp Printing thiscall attribute on member function pointer type. Clang :: CXX/dcl.dcl/dcl.spec/dcl.constexpr/p1.cpp Clang :: SemaTemplate/explicit-instantiation.cpp Clang :: SemaTemplate/instantiate-method.cpp Clang :: SemaTemplate/temp_arg_nontype.cpp Printing thiscall attribute for function type after explicit specialization function match failure. - Hans
I think we need to relax the test cases. MSVC usually prints the calling convention, and it's often useful information. Maybe we can make the diagnostic text smaller by using the __thiscall, __cdecl, __stdcall, etc keywords when printing types with LangOpts.MicrosoftExt, but it will require moving the attribute from after the identifier to before, which is exciting. On Tue, Dec 10, 2013 at 4:20 PM, Hans Wennborg <hans at chromium.org> wrote:> On Tue, Dec 10, 2013 at 3:57 PM, Reid Kleckner <rnk at google.com> wrote: > > On Tue, Dec 10, 2013 at 11:58 AM, Hans Wennborg <hans at chromium.org> > wrote: > >> > >> It would be nice if we could make the TypePrinter not print the > >> calling convention if it's the default one for the ABI, but > >> TypePrinter doesn't have a lot of context.. no Sema, no ASTContext :/ > > > > > > Does this patch fix any failures for you? It doesn't fix that test case, > > unfortunately. > > Unfortunately, no, I still see the same failures. These are the > TypePrinter related failures I see: > > Clang :: CXX/class.access/p6.cpp > Clang :: CXX/expr/expr.const/p3-0x.cpp > Clang :: CXX/expr/expr.mptr.oper/p5.cpp > Clang :: CXX/expr/expr.mptr.oper/p6-0x.cpp > Clang :: CXX/expr/expr.unary/expr.unary.op/p4.cpp > Clang :: CXX/temp/temp.arg/temp.arg.nontype/p5.cpp > Clang :: SemaCXX/addr-of-overloaded-function.cpp > Clang :: SemaCXX/const-cast.cpp > Clang :: SemaCXX/cstyle-cast.cpp > Clang :: SemaCXX/functional-cast.cpp > Clang :: SemaCXX/reinterpret-cast.cpp > Clang :: SemaCXX/static-cast.cpp > Printing thiscall attribute on member function pointer type. > > Clang :: CXX/dcl.dcl/dcl.spec/dcl.constexpr/p1.cpp > Clang :: SemaTemplate/explicit-instantiation.cpp > Clang :: SemaTemplate/instantiate-method.cpp > Clang :: SemaTemplate/temp_arg_nontype.cpp > Printing thiscall attribute for function type after explicit > specialization function match failure. > > - Hans >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131210/950d1b04/attachment.html>