Index: clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp =================================================================== --- clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp +++ clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp @@ -73,6 +73,7 @@ T.getUnqualifiedType().getAsString(context.getPrintingPolicy()); DEBUG(llvm::dbgs() << "Query missing complete type '" << QueryString << "'"); + // Pass an empty range here since we don't add qualifier in this case. query(QueryString, "", tooling::Range()); return false; } @@ -360,9 +361,11 @@ if (AddQualifiers) { for (const auto &Info : Context.getQuerySymbolInfos()) { - CleanReplaces->insert({FilePath, Info.Range.getOffset(), - Info.Range.getLength(), - Context.getHeaderInfos().front().QualifiedName}); + // Ignore the empty range. + if (Info.Range.getLength() > 0) + CleanReplaces->insert({FilePath, Info.Range.getOffset(), + Info.Range.getLength(), + Context.getHeaderInfos().front().QualifiedName}); } } return formatReplacements(Code, *CleanReplaces, Style); Index: clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp =================================================================== --- clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp +++ clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp @@ -335,6 +335,11 @@ EXPECT_EQ(ExpectedCode, runIncludeFixer(TestCode)); } +TEST(IncludeFixer, DontAddQualifiersForMissingCompleteType) { + EXPECT_EQ("#include \"bar.h\"\nclass bar;\nvoid f() {\nbar* b;\nb->f();\n}", + runIncludeFixer("class bar;\nvoid f() {\nbar* b;\nb->f();\n}")); +} + } // namespace } // namespace include_fixer } // namespace clang