aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-05-30 05:39:39 +0000
committerDouglas Gregor <dgregor@apple.com>2009-05-30 05:39:39 +0000
commit6620a628b0a02c78741b8f31790d4c1186aa4038 (patch)
treedffbf8cc24daaeaf9389186aee46d9d9bf6bfd17
parent6e1a345838c8feb500ba8887b3ba5a1c1d0b33dc (diff)
Never suppress specifiers when printing the parameters of a function
declaration. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72613 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/AST/DeclPrinter.cpp9
-rw-r--r--test/Coverage/c-language-features.inc2
2 files changed, 8 insertions, 3 deletions
diff --git a/lib/AST/DeclPrinter.cpp b/lib/AST/DeclPrinter.cpp
index 72f97035ef..6412f750ae 100644
--- a/lib/AST/DeclPrinter.cpp
+++ b/lib/AST/DeclPrinter.cpp
@@ -296,6 +296,8 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {
if (D->isVirtualAsWritten()) Out << "virtual ";
}
+ PrintingPolicy SubPolicy(Policy);
+ SubPolicy.SuppressSpecifiers = false;
std::string Proto = D->getNameAsString();
if (isa<FunctionType>(D->getType().getTypePtr())) {
const FunctionType *AFT = D->getType()->getAsFunctionType();
@@ -307,7 +309,7 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {
Proto += "(";
if (FT) {
llvm::raw_string_ostream POut(Proto);
- DeclPrinter ParamPrinter(POut, Context, Policy, Indentation);
+ DeclPrinter ParamPrinter(POut, Context, SubPolicy, Indentation);
for (unsigned i = 0, e = D->getNumParams(); i != e; ++i) {
if (i) POut << ", ";
ParamPrinter.VisitParmVarDecl(D->getParamDecl(i));
@@ -342,17 +344,18 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {
// This is a K&R function definition, so we need to print the
// parameters.
Out << '\n';
+ DeclPrinter ParamPrinter(Out, Context, SubPolicy, Indentation);
Indentation += Policy.Indentation;
for (unsigned i = 0, e = D->getNumParams(); i != e; ++i) {
Indent();
- VisitParmVarDecl(D->getParamDecl(i));
+ ParamPrinter.VisitParmVarDecl(D->getParamDecl(i));
Out << ";\n";
}
Indentation -= Policy.Indentation;
} else
Out << ' ';
- D->getBody(Context)->printPretty(Out, Context, 0, Policy, Indentation);
+ D->getBody(Context)->printPretty(Out, Context, 0, SubPolicy, Indentation);
Out << '\n';
}
}
diff --git a/test/Coverage/c-language-features.inc b/test/Coverage/c-language-features.inc
index 27fae62d3e..5258040cc1 100644
--- a/test/Coverage/c-language-features.inc
+++ b/test/Coverage/c-language-features.inc
@@ -138,6 +138,8 @@ void f4(int a0, int a1, int a2, va_list ap) {
_Complex float t32_a, t32_b;
int t32_cond;
int t32 = __real (t32_cond ? t32_a : t32_b);
+
+ struct { int x, y; } t33, *t34, t35[12], t36(int, float);
}
// Extended vectors