summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/AST/ASTImporter.cpp21
-rw-r--r--clang/test/ASTMerge/exprs-cpp/Inputs/exprs3.cpp4
-rw-r--r--clang/test/ASTMerge/exprs-cpp/test.cpp2
3 files changed, 26 insertions, 1 deletions
diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp
index 9ded89413e8..780d0bc7663 100644
--- a/clang/lib/AST/ASTImporter.cpp
+++ b/clang/lib/AST/ASTImporter.cpp
@@ -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();
diff --git a/clang/test/ASTMerge/exprs-cpp/Inputs/exprs3.cpp b/clang/test/ASTMerge/exprs-cpp/Inputs/exprs3.cpp
index 7ed8e338452..2a33c35d9ea 100644
--- a/clang/test/ASTMerge/exprs-cpp/Inputs/exprs3.cpp
+++ b/clang/test/ASTMerge/exprs-cpp/Inputs/exprs3.cpp
@@ -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);
diff --git a/clang/test/ASTMerge/exprs-cpp/test.cpp b/clang/test/ASTMerge/exprs-cpp/test.cpp
index ba1f18b2c90..0535aa85330 100644
--- a/clang/test/ASTMerge/exprs-cpp/test.cpp
+++ b/clang/test/ASTMerge/exprs-cpp/test.cpp
@@ -41,5 +41,7 @@ void testImport(int *x, const S1 &cs1, S1 &s1) {
testScalarInit(42);
testOffsetOf();
testDefaultArg(12);
+ testDefaultArg();
+ testDefaultArgExpr();
useTemplateType();
}
OpenPOWER on IntegriCloud