diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp --- a/clang/lib/AST/ASTImporter.cpp +++ b/clang/lib/AST/ASTImporter.cpp @@ -1358,7 +1358,8 @@ Expected ToDeclOrErr = import(T->getDecl()); if (!ToDeclOrErr) return ToDeclOrErr.takeError(); - ExpectedType ToUnderlyingTypeOrErr = import(T->desugar()); + ExpectedType ToUnderlyingTypeOrErr = + import(QualType(T, 0).getDesugaredType(T->getDecl()->getASTContext())); if (!ToUnderlyingTypeOrErr) return ToUnderlyingTypeOrErr.takeError(); diff --git a/clang/unittests/AST/ASTImporterTest.cpp b/clang/unittests/AST/ASTImporterTest.cpp --- a/clang/unittests/AST/ASTImporterTest.cpp +++ b/clang/unittests/AST/ASTImporterTest.cpp @@ -8075,6 +8075,34 @@ EXPECT_FALSE(SharedStatePtr->isNewDecl(ToBar)); } +TEST_P(ASTImporterOptionSpecificTestBase, isSugaredImport) { + Decl *FromTU = getTuDecl( + R"( + typedef __builtin_va_list va_list; + void dbgout(char* fmt, ...) + { + va_list va; + } + )", + Lang_C99); + Decl *ToTU = getToTuDecl( + R"( + typedef __builtin_va_list va_list; + void dbgout(char* fmt, ...); + void maindbgout(char* str) + { + dbgout((char*)str); + } + )", + Lang_C99); + auto *FromOther = FirstDeclMatcher().match( + FromTU, functionDecl(hasName("dbgout"))); + ASSERT_TRUE(FromOther); + + auto *ToOther = Import(FromOther, Lang_C99); + ASSERT_TRUE(ToOther); +} + INSTANTIATE_TEST_SUITE_P(ParameterizedTests, ASTImporterLookupTableTest, DefaultTestValuesForRunOptions);