@@ -633,7 +633,7 @@ static void printExplicitSpecifier(ExplicitSpecifier ES, llvm::raw_ostream &Out,
633633 Out << Proto;
634634}
635635
636- static void maybePrintTagKeywordIfSupressingScopes (PrintingPolicy &Policy,
636+ static void MaybePrintTagKeywordIfSupressingScopes (PrintingPolicy &Policy,
637637 QualType T,
638638 llvm::raw_ostream &Out) {
639639 StringRef prefix = T->isClassType () ? " class "
@@ -643,22 +643,6 @@ static void maybePrintTagKeywordIfSupressingScopes(PrintingPolicy &Policy,
643643 Out << prefix;
644644}
645645
646- // / Return the language of the linkage spec of `D`, if applicable.
647- // /
648- // / \Return - "C" if `D` has been declared with unbraced `extern "C"`
649- // / - "C++" if `D` has been declared with unbraced `extern "C++"`
650- // / - nullptr in any other case
651- static const char *tryGetUnbracedLinkageLanguage (const Decl *D) {
652- const auto *SD = dyn_cast<LinkageSpecDecl>(D->getDeclContext ());
653- if (!SD || SD->hasBraces ())
654- return nullptr ;
655- if (SD->getLanguage () == LinkageSpecLanguageIDs::C)
656- return " C" ;
657- assert (SD->getLanguage () == LinkageSpecLanguageIDs::CXX &&
658- " unknown language in linkage specification" );
659- return " C++" ;
660- }
661-
662646void DeclPrinter::VisitFunctionDecl (FunctionDecl *D) {
663647 if (!D->getDescribedFunctionTemplate () &&
664648 !D->isFunctionTemplateSpecialization ()) {
@@ -678,11 +662,6 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {
678662 CXXConversionDecl *ConversionDecl = dyn_cast<CXXConversionDecl>(D);
679663 CXXDeductionGuideDecl *GuideDecl = dyn_cast<CXXDeductionGuideDecl>(D);
680664 if (!Policy.SuppressSpecifiers ) {
681- if (const char *Lang = tryGetUnbracedLinkageLanguage (D)) {
682- // the "extern" specifier is implicit
683- assert (D->getStorageClass () == SC_None);
684- Out << " extern \" " << Lang << " \" " ;
685- }
686665 switch (D->getStorageClass ()) {
687666 case SC_None: break ;
688667 case SC_Extern: Out << " extern " ; break ;
@@ -828,7 +807,7 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {
828807 }
829808 if (!Policy.SuppressTagKeyword && Policy.SuppressScope &&
830809 !Policy.SuppressUnwrittenScope )
831- maybePrintTagKeywordIfSupressingScopes (Policy, AFT->getReturnType (),
810+ MaybePrintTagKeywordIfSupressingScopes (Policy, AFT->getReturnType (),
832811 Out);
833812 AFT->getReturnType ().print (Out, Policy, Proto);
834813 Proto.clear ();
@@ -953,11 +932,6 @@ void DeclPrinter::VisitVarDecl(VarDecl *D) {
953932 : D->getASTContext ().getUnqualifiedObjCPointerType (D->getType ());
954933
955934 if (!Policy.SuppressSpecifiers ) {
956- if (const char *Lang = tryGetUnbracedLinkageLanguage (D)) {
957- // the "extern" specifier is implicit
958- assert (D->getStorageClass () == SC_None);
959- Out << " extern \" " << Lang << " \" " ;
960- }
961935 StorageClass SC = D->getStorageClass ();
962936 if (SC != SC_None)
963937 Out << VarDecl::getStorageClassSpecifierString (SC) << " " ;
@@ -987,7 +961,7 @@ void DeclPrinter::VisitVarDecl(VarDecl *D) {
987961
988962 if (!Policy.SuppressTagKeyword && Policy.SuppressScope &&
989963 !Policy.SuppressUnwrittenScope )
990- maybePrintTagKeywordIfSupressingScopes (Policy, T, Out);
964+ MaybePrintTagKeywordIfSupressingScopes (Policy, T, Out);
991965
992966 printDeclType (T, (isa<ParmVarDecl>(D) && Policy.CleanUglifiedParameters &&
993967 D->getIdentifier ())
@@ -1090,8 +1064,6 @@ void DeclPrinter::VisitNamespaceAliasDecl(NamespaceAliasDecl *D) {
10901064
10911065void DeclPrinter::VisitEmptyDecl (EmptyDecl *D) {
10921066 prettyPrintAttributes (D);
1093- if (const char *Lang = tryGetUnbracedLinkageLanguage (D))
1094- Out << " extern \" " << Lang << " \" ;" ;
10951067}
10961068
10971069void DeclPrinter::VisitCXXRecordDecl (CXXRecordDecl *D) {
@@ -1164,21 +1136,22 @@ void DeclPrinter::VisitCXXRecordDecl(CXXRecordDecl *D) {
11641136}
11651137
11661138void DeclPrinter::VisitLinkageSpecDecl (LinkageSpecDecl *D) {
1167- if (!D->hasBraces ()) {
1168- VisitDeclContext (D);
1169- return ;
1170- }
1171- const char *L;
1139+ const char *l;
11721140 if (D->getLanguage () == LinkageSpecLanguageIDs::C)
1173- L = " C" ;
1141+ l = " C" ;
11741142 else {
11751143 assert (D->getLanguage () == LinkageSpecLanguageIDs::CXX &&
11761144 " unknown language in linkage specification" );
1177- L = " C++" ;
1145+ l = " C++" ;
11781146 }
1179- Out << " extern \" " << L << " \" {\n " ;
1180- VisitDeclContext (D);
1181- Indent () << " }" ;
1147+
1148+ Out << " extern \" " << l << " \" " ;
1149+ if (D->hasBraces ()) {
1150+ Out << " {\n " ;
1151+ VisitDeclContext (D);
1152+ Indent () << " }" ;
1153+ } else
1154+ Visit (*D->decls_begin ());
11821155}
11831156
11841157void DeclPrinter::printTemplateParameters (const TemplateParameterList *Params,
0 commit comments