浏览代码

QtAutogen: Don't modify target source files while iterating them.

Populate a separate vector of files and append them separately. This
was the pattern used prior to commit 035b6908 (Autogen: Split AutoRcc
handling into two methods, 2013-12-10), which was erroneously not
maintained in that refactoring.
Stephen Kelly 12 年之前
父节点
当前提交
870bd16f2c
共有 1 个文件被更改,包括 10 次插入1 次删除
  1. 10 1
      Source/cmQtAutoGenerators.cxx

+ 10 - 1
Source/cmQtAutoGenerators.cxx

@@ -810,6 +810,8 @@ void cmQtAutoGenerators::InitializeAutoRccTarget(cmTarget* target)
 
 
   const std::vector<cmSourceFile*>& srcFiles = target->GetSourceFiles();
   const std::vector<cmSourceFile*>& srcFiles = target->GetSourceFiles();
 
 
+  std::vector<cmSourceFile*> newFiles;
+
   for(std::vector<cmSourceFile*>::const_iterator fileIt = srcFiles.begin();
   for(std::vector<cmSourceFile*>::const_iterator fileIt = srcFiles.begin();
       fileIt != srcFiles.end();
       fileIt != srcFiles.end();
       ++fileIt)
       ++fileIt)
@@ -833,10 +835,17 @@ void cmQtAutoGenerators::InitializeAutoRccTarget(cmTarget* target)
                                 rcc_output_file.c_str(), false);
                                 rcc_output_file.c_str(), false);
         cmSourceFile* rccCppSource
         cmSourceFile* rccCppSource
                 = makefile->GetOrCreateSource(rcc_output_file.c_str(), true);
                 = makefile->GetOrCreateSource(rcc_output_file.c_str(), true);
-        target->AddSourceFile(rccCppSource);
+        newFiles.push_back(rccCppSource);
         }
         }
       }
       }
     }
     }
+
+  for(std::vector<cmSourceFile*>::const_iterator fileIt = newFiles.begin();
+      fileIt != newFiles.end();
+      ++fileIt)
+    {
+    target->AddSourceFile(*fileIt);
+    }
 }
 }
 
 
 void cmQtAutoGenerators::SetupAutoRccTarget(cmTarget const* target)
 void cmQtAutoGenerators::SetupAutoRccTarget(cmTarget const* target)