Index: lib/AST/ASTImporter.cpp =================================================================== --- lib/AST/ASTImporter.cpp +++ lib/AST/ASTImporter.cpp @@ -3884,8 +3884,22 @@ Importer.Import(D->getInnerLocStart()), Loc, Name.getAsIdentifierInfo(), T, TInfo, D->getStorageClass(), - /*FIXME: Default argument*/nullptr); + /*DefaultArg*/ nullptr); + + // Set the default argument. ToParm->setHasInheritedDefaultArg(D->hasInheritedDefaultArg()); + ToParm->setKNRPromoted(D->isKNRPromoted()); + + if (D->hasUninstantiatedDefaultArg()) { + Expr *UDArg = D->getUninstantiatedDefaultArg(); + Expr *ToUDefArg = Importer.Import(UDArg); + ToParm->setUninstantiatedDefaultArg(ToUDefArg); + } else if (D->hasUnparsedDefaultArg()) { + ToParm->setUnparsedDefaultArg(); + } else if (Expr* FromDefaultArg = D->getDefaultArg()) { + Expr* ToDefArg = Importer.Import(FromDefaultArg); + ToParm->setDefaultArg(ToDefArg); + } if (D->isUsed()) ToParm->setIsUsed(); Index: test/ASTMerge/exprs-cpp/Inputs/exprs3.cpp =================================================================== --- test/ASTMerge/exprs-cpp/Inputs/exprs3.cpp +++ test/ASTMerge/exprs-cpp/Inputs/exprs3.cpp @@ -108,6 +108,10 @@ return a; } +int testDefaultArgExpr() { + return testDefaultArg(); +} + template // T has TemplateTypeParmType void testTemplateTypeParmType(int i); Index: test/ASTMerge/exprs-cpp/test.cpp =================================================================== --- test/ASTMerge/exprs-cpp/test.cpp +++ test/ASTMerge/exprs-cpp/test.cpp @@ -41,5 +41,7 @@ testScalarInit(42); testOffsetOf(); testDefaultArg(12); + testDefaultArg(); + testDefaultArgExpr(); useTemplateType(); }