forked from OSchip/llvm-project
[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:
parent
c0dc9a4913
commit
55a6350613
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -41,5 +41,7 @@ void testImport(int *x, const S1 &cs1, S1 &s1) {
|
|||
testScalarInit(42);
|
||||
testOffsetOf();
|
||||
testDefaultArg(12);
|
||||
testDefaultArg();
|
||||
testDefaultArgExpr();
|
||||
useTemplateType();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue