[ASTImporter] Support default argument initialization of ParmVarDecls

Patch by Peter Szecsi!

Differential Revision: https://reviews.llvm.org/D29612

llvm-svn: 295654
This commit is contained in:
Aleksei Sidorin 2017-02-20 11:57:12 +00:00
parent c0dc9a4913
commit 55a6350613
3 changed files with 26 additions and 1 deletions

View File

@ -3859,8 +3859,27 @@ Decl *ASTNodeImporter::VisitParmVarDecl(ParmVarDecl *D) {
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());
Expr *ToDefArg = nullptr;
Expr *FromDefArg = nullptr;
if (D->hasUninstantiatedDefaultArg()) {
FromDefArg = D->getUninstantiatedDefaultArg();
ToDefArg = Importer.Import(FromDefArg);
ToParm->setUninstantiatedDefaultArg(ToDefArg);
} else if (D->hasUnparsedDefaultArg()) {
ToParm->setUnparsedDefaultArg();
} else if (D->hasDefaultArg()) {
FromDefArg = D->getDefaultArg();
ToDefArg = Importer.Import(FromDefArg);
ToParm->setDefaultArg(ToDefArg);
}
if (FromDefArg && !ToDefArg)
return nullptr;
if (D->isUsed())
ToParm->setIsUsed();

View File

@ -108,6 +108,10 @@ int testDefaultArg(int a = 2*2) {
return a;
}
int testDefaultArgExpr() {
return testDefaultArg();
}
template <typename T> // T has TemplateTypeParmType
void testTemplateTypeParmType(int i);

View File

@ -41,5 +41,7 @@ void testImport(int *x, const S1 &cs1, S1 &s1) {
testScalarInit(42);
testOffsetOf();
testDefaultArg(12);
testDefaultArg();
testDefaultArgExpr();
useTemplateType();
}