From 135b9c78b2e0da945e37dcd9e1206c6715854d44 Mon Sep 17 00:00:00 2001
From: Ian Lance Taylor <ian@airs.com>
Date: Tue, 23 Feb 2010 17:42:26 +0000
Subject: [PATCH] 	* gold.cc (queue_middle_tasks): If no input files were
 opened, 	exit. 	* workqueue.h (Task_function::Task_function): Assert
 that there is 	a blocker.

---
 gold/ChangeLog   | 8 ++++++++
 gold/gold.cc     | 9 +++++++++
 gold/workqueue.h | 2 +-
 3 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/gold/ChangeLog b/gold/ChangeLog
index 056a506c704..45017f229bc 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,11 @@
+2010-02-23  Viktor Kutuzov  <vkutuzov@accesssoftek.com>
+	    Ian Lance Taylor  <iant@google.com>
+
+	* gold.cc (queue_middle_tasks): If no input files were opened,
+	exit.
+	* workqueue.h (Task_function::Task_function): Assert that there is
+	a blocker.
+
 2010-02-22  Doug Kwan  <dougkwan@google.com>
 
 	* gold-threads.h (Once::~Once): Explicitly define virtual destructor.
diff --git a/gold/gold.cc b/gold/gold.cc
index 275d0f92e23..54505733423 100644
--- a/gold/gold.cc
+++ b/gold/gold.cc
@@ -532,6 +532,15 @@ queue_middle_tasks(const General_options& options,
         }
     }
 
+  // If we failed to open any input files, it's possible for
+  // THIS_BLOCKER to be NULL here.  There's no real point in
+  // continuing if that happens.
+  if (this_blocker == NULL)
+    {
+      gold_assert(parameters->errors()->error_count() > 0);
+      gold_exit(false);
+    }
+
   // When all those tasks are complete, we can start laying out the
   // output file.
   // TODO(csilvers): figure out a more principled way to get the target
diff --git a/gold/workqueue.h b/gold/workqueue.h
index 75452241d80..9121e10e14f 100644
--- a/gold/workqueue.h
+++ b/gold/workqueue.h
@@ -152,7 +152,7 @@ class Task_function : public Task
   Task_function(Task_function_runner* runner, Task_token* blocker,
 		const char* name)
     : runner_(runner), blocker_(blocker), name_(name)
-  { }
+  { gold_assert(blocker != NULL); }
 
   ~Task_function()
   {