@@ -749,6 +749,8 @@ class CGNode : public CGNodeBase {
749749 CGNode (const NodeKind K) : Kind(K) {}
750750 CGNode (const CGNode &) = delete ;
751751 CGNode (CGNode &&) = delete ;
752+ CGNode &operator =(const CGNode &) = delete ;
753+ CGNode &operator =(CGNode &&) = delete ;
752754 virtual ~CGNode () = 0 ;
753755
754756 NodeKind getKind () const { return Kind; }
@@ -893,6 +895,10 @@ class CGEdge : public CGEdgeBase {
893895 };
894896
895897 CGEdge (CGNode &N, EdgeKind K) : CGEdgeBase(N), Kind(K) {}
898+ CGEdge (const CGEdge &) = delete ;
899+ CGEdge &operator =(const CGEdge &) = delete ;
900+ CGEdge (CGEdge &&) = delete ;
901+ CGEdge &operator =(CGEdge &&) = delete ;
896902
897903 EdgeKind getKind () const { return Kind; }
898904
@@ -909,7 +915,10 @@ class CompilationGraph : public CGBase {
909915public:
910916 CompilationGraph () = default ;
911917 CompilationGraph (const CompilationGraph &) = delete ;
918+ CompilationGraph &operator =(const CompilationGraph &) = delete ;
912919 CompilationGraph (CompilationGraph &&G) = default ;
920+ CompilationGraph &operator =(CompilationGraph &&) = default ;
921+ ~CompilationGraph () = default ;
913922
914923 CGNode &getRoot () const {
915924 assert (Root && " Root node has not yet been created!" );
@@ -1496,6 +1505,19 @@ static void createAndConnectRoot(CompilationGraph &Graph) {
14961505 }
14971506}
14981507
1508+ // / Moves jobs from \p Graph into \p C in the graph's topological order.
1509+ static void feedJobsBackIntoCompilation (Compilation &C,
1510+ CompilationGraph &&Graph) {
1511+ llvm::ReversePostOrderTraversal<CompilationGraph *> TopologicallySortedNodes (
1512+ &Graph);
1513+ assert (isa<RootNode>(*TopologicallySortedNodes.begin ()) &&
1514+ " First node in topological order must be the root!" );
1515+ auto TopologicallySortedJobNodes = llvm::map_range (
1516+ llvm::drop_begin (TopologicallySortedNodes), llvm::CastTo<JobNode>);
1517+ for (auto *JN : TopologicallySortedJobNodes)
1518+ C.addCommand (std::move (JN->Job ));
1519+ }
1520+
14991521void driver::modules::runModulesDriver (
15001522 Compilation &C, ArrayRef<StdModuleManifest::Module> ManifestEntries) {
15011523 llvm::PrettyStackTraceString CrashInfo (" Running modules driver." );
@@ -1554,12 +1576,5 @@ void driver::modules::runModulesDriver(
15541576
15551577 // TODO: Fix-up command-lines for named module imports.
15561578
1557- llvm::ReversePostOrderTraversal<CompilationGraph *> TopologicallySortedNodes (
1558- &Graph);
1559- assert (isa<RootNode>(*TopologicallySortedNodes.begin ()) &&
1560- " First node in topological order must be the root!" );
1561- auto TopologicallySortedJobNodes = llvm::map_range (
1562- llvm::drop_begin (TopologicallySortedNodes), llvm::CastTo<JobNode>);
1563- for (auto *JN : TopologicallySortedJobNodes)
1564- C.addCommand (std::move (JN->Job ));
1579+ feedJobsBackIntoCompilation (C, std::move (Graph));
15651580}
0 commit comments