Index: lib/Frontend/DependencyFile.cpp =================================================================== --- lib/Frontend/DependencyFile.cpp +++ lib/Frontend/DependencyFile.cpp @@ -163,6 +163,7 @@ bool SeenMissingHeader; bool IncludeModuleFiles; DependencyOutputFormat OutputFormat; + unsigned InputFileIndex; private: bool FileMatchesDepCriteria(const char *Filename, @@ -177,9 +178,11 @@ AddMissingHeaderDeps(Opts.AddMissingHeaderDeps), SeenMissingHeader(false), IncludeModuleFiles(Opts.IncludeModuleFiles), - OutputFormat(Opts.OutputFormat) { + OutputFormat(Opts.OutputFormat), + InputFileIndex(0) { for (const auto &ExtraDep : Opts.ExtraDeps) { - AddFilename(ExtraDep); + if (AddFilename(ExtraDep)) + ++InputFileIndex; } } @@ -201,7 +204,7 @@ OutputDependencyFile(); } - void AddFilename(StringRef Filename); + bool AddFilename(StringRef Filename); bool includeSystemHeaders() const { return IncludeSystemHeaders; } bool includeModuleFiles() const { return IncludeModuleFiles; } }; @@ -325,9 +328,12 @@ } } -void DFGImpl::AddFilename(StringRef Filename) { - if (FilesSet.insert(Filename).second) +bool DFGImpl::AddFilename(StringRef Filename) { + if (FilesSet.insert(Filename).second) { Files.push_back(Filename); + return true; + } + return false; } /// Print the filename, with escaping or quoting that accommodates the three @@ -463,8 +469,10 @@ // Create phony targets if requested. if (PhonyTarget && !Files.empty()) { - // Skip the first entry, this is always the input file itself. - for (auto I = Files.begin() + 1, E = Files.end(); I != E; ++I) { + unsigned Index = 0; + for (auto I = Files.begin(), E = Files.end(); I != E; ++I) { + if (Index++ == InputFileIndex) + continue; OS << '\n'; PrintFilename(OS, *I, OutputFormat); OS << ":\n"; Index: test/Frontend/dependency-gen-extradeps-phony.c =================================================================== --- test/Frontend/dependency-gen-extradeps-phony.c +++ test/Frontend/dependency-gen-extradeps-phony.c @@ -0,0 +1,10 @@ +// RUN: %clang -MM -MP -Xclang -fdepfile-entry=1.extra -Xclang -fdepfile-entry=2.extra -Xclang -fdepfile-entry=2.extra %s | \ +// RUN: FileCheck %s --implicit-check-not=.c: +// +// Verify that phony targets are only created for the extra dependency files, +// and not the input file. + +// CHECK: dependency-gen-extradeps-phony.o: 1.extra 2.extra \ +// CHECK-NEXT: dependency-gen-extradeps-phony.c +// CHECK: 1.extra: +// CHECK: 2.extra: