Revert "Pretty Printer: Fix printing of conversion operator decls and calls."

This reverts commit r202167.

It broke Analysis/auto-obj-dtors-cfg-output.cpp

llvm-svn: 202173
This commit is contained in:
Rafael Espindola 2014-02-25 17:39:16 +00:00
parent 50e3b7f759
commit 8e38871865
4 changed files with 5 additions and 38 deletions

View File

@ -385,7 +385,6 @@ void DeclPrinter::VisitEnumConstantDecl(EnumConstantDecl *D) {
void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) { void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {
CXXConstructorDecl *CDecl = dyn_cast<CXXConstructorDecl>(D); CXXConstructorDecl *CDecl = dyn_cast<CXXConstructorDecl>(D);
CXXConversionDecl *ConversionDecl = dyn_cast<CXXConversionDecl>(D);
if (!Policy.SuppressSpecifiers) { if (!Policy.SuppressSpecifiers) {
switch (D->getStorageClass()) { switch (D->getStorageClass()) {
case SC_None: break; case SC_None: break;
@ -399,8 +398,7 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {
if (D->isInlineSpecified()) Out << "inline "; if (D->isInlineSpecified()) Out << "inline ";
if (D->isVirtualAsWritten()) Out << "virtual "; if (D->isVirtualAsWritten()) Out << "virtual ";
if (D->isModulePrivate()) Out << "__module_private__ "; if (D->isModulePrivate()) Out << "__module_private__ ";
if ((CDecl && CDecl->isExplicitSpecified()) || if (CDecl && CDecl->isExplicitSpecified())
(ConversionDecl && ConversionDecl->isExplicit()))
Out << "explicit "; Out << "explicit ";
} }
@ -538,15 +536,15 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {
} }
Out << ")"; Out << ")";
} }
} else if (!ConversionDecl) { if (!Proto.empty())
Out << Proto;
} else {
if (FT && FT->hasTrailingReturn()) { if (FT && FT->hasTrailingReturn()) {
Out << "auto " << Proto << " -> "; Out << "auto " << Proto << " -> ";
Proto.clear(); Proto.clear();
} }
AFT->getReturnType().print(Out, Policy, Proto); AFT->getReturnType().print(Out, Policy, Proto);
Proto.clear();
} }
Out << Proto;
} else { } else {
Ty.print(Out, Policy, Proto); Ty.print(Out, Policy, Proto);
} }

View File

@ -191,7 +191,6 @@ raw_ostream &operator<<(raw_ostream &OS, DeclarationName N) {
return OS << *Rec->getDecl(); return OS << *Rec->getDecl();
LangOptions LO; LangOptions LO;
LO.CPlusPlus = true; LO.CPlusPlus = true;
LO.Bool = true;
return OS << Type.getAsString(PrintingPolicy(LO)); return OS << Type.getAsString(PrintingPolicy(LO));
} }
case DeclarationName::CXXUsingDirective: case DeclarationName::CXXUsingDirective:
@ -547,7 +546,6 @@ void DeclarationNameInfo::printName(raw_ostream &OS) const {
OS << "operator "; OS << "operator ";
LangOptions LO; LangOptions LO;
LO.CPlusPlus = true; LO.CPlusPlus = true;
LO.Bool = true;
OS << TInfo->getType().getAsString(PrintingPolicy(LO)); OS << TInfo->getType().getAsString(PrintingPolicy(LO));
} else } else
OS << Name; OS << Name;

View File

@ -1296,12 +1296,6 @@ void StmtPrinter::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *Node) {
} }
void StmtPrinter::VisitCXXMemberCallExpr(CXXMemberCallExpr *Node) { void StmtPrinter::VisitCXXMemberCallExpr(CXXMemberCallExpr *Node) {
// If we have a conversion operator call only print the argument.
CXXMethodDecl *MD = Node->getMethodDecl();
if (MD && isa<CXXConversionDecl>(MD)) {
PrintExpr(Node->getImplicitObjectArgument());
return;
}
VisitCallExpr(cast<CallExpr>(Node)); VisitCallExpr(cast<CallExpr>(Node));
} }

View File

@ -1,4 +1,4 @@
// RUN: %clang_cc1 -ast-print %s -std=gnu++11 | FileCheck %s // RUN: %clang_cc1 -ast-print %s | FileCheck %s
// CHECK: r; // CHECK: r;
// CHECK-NEXT: (r->method()); // CHECK-NEXT: (r->method());
@ -173,26 +173,3 @@ void test14() {
float test15() { float test15() {
return __builtin_asinf(1.0F); return __builtin_asinf(1.0F);
} }
namespace PR18776 {
struct A {
operator void *();
explicit operator bool();
A operator&(A);
};
// CHECK: struct A
// CHECK-NEXT: {{^[ ]*operator}} void *();
// CHECK-NEXT: {{^[ ]*explicit}} operator bool();
void bar(void *);
void foo() {
A a, b;
bar(a & b);
// CHECK: bar(a & b);
if (a & b)
// CHECK: if (a & b)
return;
}
};