diff -urNad synopsis-0.8.0~/Synopsis/Parsers/C/ParserImpl.cc synopsis-0.8.0/Synopsis/Parsers/C/ParserImpl.cc
--- synopsis-0.8.0~/Synopsis/Parsers/C/ParserImpl.cc	2005-06-02 17:09:10.000000000 +0200
+++ synopsis-0.8.0/Synopsis/Parsers/C/ParserImpl.cc	2006-12-10 11:36:47.000000000 +0100
@@ -74,16 +74,18 @@
     Parser parser(lexer, symbols);
     PTree::Node *ptree = parser.parse();
     const Parser::ErrorList &errors = parser.errors();
-    if (!errors.size())
-    {
-      ASTTranslator translator(src, base_path, main_file_only, ast, verbose, debug);
-      translator.translate(ptree, buffer);
-    }
-    else
-    {
-      for (Parser::ErrorList::const_iterator i = errors.begin(); i != errors.end(); ++i)
-	(*i)->write(std::cerr);
-      throw std::runtime_error("The input contains errors.");
+    if (ptree != 0) {
+      if (!errors.size())
+      {
+        ASTTranslator translator(src, base_path, main_file_only, ast, verbose, debug);
+        translator.translate(ptree, buffer);
+      }
+      else
+      {
+        for (Parser::ErrorList::const_iterator i = errors.begin(); i != errors.end(); ++i)
+          (*i)->write(std::cerr);
+        throw std::runtime_error("The input contains errors.");
+      }
     }
   }
   catch (std::exception const &e)
