diff --git a/Driver/Backend.cpp b/Driver/Backend.cpp
index cf53f3c..e2633df 100644
--- a/Driver/Backend.cpp
+++ b/Driver/Backend.cpp
@@ -39,12 +39,13 @@
 using namespace llvm;
 
 namespace {
-  class VISIBILITY_HIDDEN BackendConsumer  : public ASTConsumer {
+  class VISIBILITY_HIDDEN BackendConsumer : public ASTConsumer {
     BackendAction Action;
     CompileOptions CompileOpts;
     const std::string &InputFile;
     std::string OutputFile;
     bool GenerateDebugInfo;
+    ASTContext *Context;
 
     Timer LLVMIRGeneration;
     Timer CodeGenerationTime;
@@ -78,8 +79,8 @@
   public:  
     BackendConsumer(BackendAction action, Diagnostic &Diags, 
                     const LangOptions &langopts, const CompileOptions &compopts,
-                    const std::string& infile, const std::string& outfile,
-                    bool debug)  :
+                    const std::string &infile, const std::string &outfile,
+                    bool debug) :
       Action(action), 
       CompileOpts(compopts),
       InputFile(infile), 
@@ -105,6 +106,7 @@
     }
 
     virtual void InitializeTU(TranslationUnit& TU) {
+      Context = &TU.getContext();
       
       if (CompileOpts.TimePasses)
         LLVMIRGeneration.startTimer();
@@ -121,6 +123,9 @@
     }
     
     virtual void HandleTopLevelDecl(Decl *D) {
+      PrettyStackTraceDecl CrashInfo(D, SourceLocation(),
+                                     Context->getSourceManager(),
+                                     "LLVM IR generation of declaration");
       if (CompileOpts.TimePasses)
         LLVMIRGeneration.startTimer();
       
@@ -131,15 +136,18 @@
     }
     
     virtual void HandleTranslationUnit(TranslationUnit& TU) {
-      if (CompileOpts.TimePasses)
-        LLVMIRGeneration.startTimer();
+      {
+        PrettyStackTraceString CrashInfo("per-file LLVM IR generation");
+        if (CompileOpts.TimePasses)
+          LLVMIRGeneration.startTimer();
 
-      Gen->HandleTranslationUnit(TU);
+        Gen->HandleTranslationUnit(TU);
 
-      if (CompileOpts.TimePasses)
-        LLVMIRGeneration.stopTimer();
+        if (CompileOpts.TimePasses)
+          LLVMIRGeneration.stopTimer();
+      }
 
-      // EmitAssembly times itself.
+      // EmitAssembly times and registers crash info itself.
       EmitAssembly();
       
       // Force a flush here in case we never get released.
@@ -148,6 +156,9 @@
     }
     
     virtual void HandleTagDeclDefinition(TagDecl *D) {
+      PrettyStackTraceDecl CrashInfo(D, SourceLocation(),
+                                     Context->getSourceManager(),
+                                     "LLVM IR generation of declaration");
       Gen->HandleTagDeclDefinition(D);
     }
   };  
@@ -359,7 +370,6 @@
     return;
   
   
-  
   TimeRegion Region(CompileOpts.TimePasses ? &CodeGenerationTime : 0);
 
   // Make sure IR generation is happy with the module. This is
@@ -388,6 +398,8 @@
   // would like to have the option of streaming code generation.
 
   if (PerFunctionPasses) {
+    PrettyStackTraceString CrashInfo("per-function optimization");
+    
     PerFunctionPasses->doInitialization();
     for (Module::iterator I = M->begin(), E = M->end(); I != E; ++I)
       if (!I->isDeclaration())
@@ -395,10 +407,13 @@
     PerFunctionPasses->doFinalization();
   }
   
-  if (PerModulePasses)
+  if (PerModulePasses) {
+    PrettyStackTraceString CrashInfo("per-module optimization passes");
     PerModulePasses->run(*M);
+  }
   
   if (CodeGenPasses) {
+    PrettyStackTraceString CrashInfo("code generation");
     CodeGenPasses->doInitialization();
     for (Module::iterator I = M->begin(), E = M->end(); I != E; ++I)
       if (!I->isDeclaration())
diff --git a/include/clang/AST/DeclBase.h b/include/clang/AST/DeclBase.h
index 7dee2a6..da9054f 100644
--- a/include/clang/AST/DeclBase.h
+++ b/include/clang/AST/DeclBase.h
@@ -18,6 +18,7 @@
 #include "clang/AST/Type.h"
 // FIXME: Layering violation
 #include "clang/Parse/AccessSpecifier.h"
+#include "llvm/Support/PrettyStackTrace.h"
 
 namespace clang {
 class DeclContext;
@@ -327,6 +328,22 @@
   }
 };
 
+/// PrettyStackTraceDecl - If a crash occurs, indicate that it happened when
+/// doing something to a specific decl.
+class PrettyStackTraceDecl : public llvm::PrettyStackTraceEntry {
+  Decl *TheDecl;
+  SourceLocation Loc;
+  SourceManager &SM;
+  const char *Message;
+public:
+  PrettyStackTraceDecl(Decl *theDecl, SourceLocation L,
+                       SourceManager &sm, const char *Msg)
+  : TheDecl(theDecl), Loc(L), SM(sm), Message(Msg) {}
+  
+  virtual void print(llvm::raw_ostream &OS) const;
+};  
+  
+
 /// DeclContext - This is used only as base class of specific decl types that
 /// can act as declaration contexts. These decls are (only the top classes
 /// that directly derive from DeclContext are mentioned, not their subclasses):
diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h
index 21ae8c0..87faf4c 100644
--- a/include/clang/Parse/Action.h
+++ b/include/clang/Parse/Action.h
@@ -1516,16 +1516,19 @@
                                            AttributeList *AttrList);
 };
 
-  
-class PrettyStackTraceDecl : public llvm::PrettyStackTraceEntry {
+/// PrettyStackTraceActionsDecl - If a crash occurs in the parser while parsing
+/// something related to a virtualized decl, include that virtualized decl in
+/// the stack trace.
+class PrettyStackTraceActionsDecl : public llvm::PrettyStackTraceEntry {
   Action::DeclTy *TheDecl;
   SourceLocation Loc;
   Action &Actions;
   SourceManager &SM;
   const char *Message;
 public:
-  PrettyStackTraceDecl(Action::DeclTy *Decl, SourceLocation L,
-                       Action &actions, SourceManager &sm, const char *Msg)
+  PrettyStackTraceActionsDecl(Action::DeclTy *Decl, SourceLocation L,
+                              Action &actions, SourceManager &sm,
+                              const char *Msg)
   : TheDecl(Decl), Loc(L), Actions(actions), SM(sm), Message(Msg) {}
   
   virtual void print(llvm::raw_ostream &OS) const;
diff --git a/lib/AST/DeclBase.cpp b/lib/AST/DeclBase.cpp
index 3e968c7..1e7ef54 100644
--- a/lib/AST/DeclBase.cpp
+++ b/lib/AST/DeclBase.cpp
@@ -19,6 +19,7 @@
 #include "clang/AST/ASTContext.h"
 #include "clang/AST/Type.h"
 #include "llvm/ADT/DenseMap.h"
+#include "llvm/Support/raw_ostream.h"
 #include <algorithm>
 #include <cstdio>
 #include <functional>
@@ -92,6 +93,27 @@
 }
 
 //===----------------------------------------------------------------------===//
+// PrettyStackTraceDecl Implementation
+//===----------------------------------------------------------------------===//
+  
+void PrettyStackTraceDecl::print(llvm::raw_ostream &OS) const {
+  SourceLocation TheLoc = Loc;
+  if (TheLoc.isInvalid() && TheDecl)
+    TheLoc = TheDecl->getLocation();
+  
+  if (TheLoc.isValid()) {
+    TheLoc.print(OS, SM);
+    OS << ": ";
+  }
+
+  OS << Message;
+
+  if (NamedDecl *DN = dyn_cast_or_null<NamedDecl>(TheDecl))
+    OS << " '" << DN->getQualifiedNameAsString() << '\'';
+  OS << '\n';
+}
+  
+//===----------------------------------------------------------------------===//
 // Decl Implementation
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/Parse/MinimalAction.cpp b/lib/Parse/MinimalAction.cpp
index 3b8694c..41ad36c 100644
--- a/lib/Parse/MinimalAction.cpp
+++ b/lib/Parse/MinimalAction.cpp
@@ -42,7 +42,7 @@
 }
 
 
-void PrettyStackTraceDecl::print(llvm::raw_ostream &OS) const {
+void PrettyStackTraceActionsDecl::print(llvm::raw_ostream &OS) const {
   if (Loc.isValid()) {
     Loc.print(OS, SM);
     OS << ": ";
diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp
index 6e0ffe5..50b6716 100644
--- a/lib/Parse/ParseDecl.cpp
+++ b/lib/Parse/ParseDecl.cpp
@@ -1096,9 +1096,9 @@
 ///
 void Parser::ParseStructUnionBody(SourceLocation RecordLoc,
                                   unsigned TagType, DeclTy *TagDecl) {
-  PrettyStackTraceDecl CrashInfo(TagDecl, RecordLoc, Actions,
-                                 PP.getSourceManager(),
-                                 "parsing struct/union body");
+  PrettyStackTraceActionsDecl CrashInfo(TagDecl, RecordLoc, Actions,
+                                        PP.getSourceManager(),
+                                        "parsing struct/union body");
   
   SourceLocation LBraceLoc = ConsumeBrace();
   
diff --git a/lib/Parse/ParseDeclCXX.cpp b/lib/Parse/ParseDeclCXX.cpp
index 538185a..ef57737 100644
--- a/lib/Parse/ParseDeclCXX.cpp
+++ b/lib/Parse/ParseDeclCXX.cpp
@@ -73,9 +73,9 @@
     DeclTy *NamespcDecl =
       Actions.ActOnStartNamespaceDef(CurScope, IdentLoc, Ident, LBrace);
 
-    PrettyStackTraceDecl CrashInfo(NamespcDecl, NamespaceLoc, Actions,
-                                   PP.getSourceManager(),
-                                   "parsing namespace");
+    PrettyStackTraceActionsDecl CrashInfo(NamespcDecl, NamespaceLoc, Actions,
+                                          PP.getSourceManager(),
+                                          "parsing namespace");
     
     while (Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof))
       ParseExternalDeclaration();
@@ -793,9 +793,9 @@
          TagType == DeclSpec::TST_union  ||
          TagType == DeclSpec::TST_class) && "Invalid TagType!");
 
-  PrettyStackTraceDecl CrashInfo(TagDecl, RecordLoc, Actions,
-                                 PP.getSourceManager(),
-                                 "parsing struct/union/class body");
+  PrettyStackTraceActionsDecl CrashInfo(TagDecl, RecordLoc, Actions,
+                                        PP.getSourceManager(),
+                                        "parsing struct/union/class body");
   
   SourceLocation LBraceLoc = ConsumeBrace();
 
diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp
index 981333d..e9bb3d7 100644
--- a/lib/Parse/ParseObjc.cpp
+++ b/lib/Parse/ParseObjc.cpp
@@ -1356,9 +1356,9 @@
 Parser::DeclTy *Parser::ParseObjCMethodDefinition() {
   DeclTy *MDecl = ParseObjCMethodPrototype(ObjCImpDecl);
   
-  PrettyStackTraceDecl CrashInfo(MDecl, Tok.getLocation(), Actions,
-                                 PP.getSourceManager(),
-                                 "parsing Objective-C method");
+  PrettyStackTraceActionsDecl CrashInfo(MDecl, Tok.getLocation(), Actions,
+                                        PP.getSourceManager(),
+                                        "parsing Objective-C method");
   
   // parse optional ';'
   if (Tok.is(tok::semi))
diff --git a/lib/Parse/ParseStmt.cpp b/lib/Parse/ParseStmt.cpp
index cb9bdc7..fe83247 100644
--- a/lib/Parse/ParseStmt.cpp
+++ b/lib/Parse/ParseStmt.cpp
@@ -1288,9 +1288,9 @@
   assert(Tok.is(tok::l_brace));
   SourceLocation LBraceLoc = Tok.getLocation();
          
-  PrettyStackTraceDecl CrashInfo(Decl, LBraceLoc, Actions,
-                                 PP.getSourceManager(),
-                                 "parsing function body");
+  PrettyStackTraceActionsDecl CrashInfo(Decl, LBraceLoc, Actions,
+                                        PP.getSourceManager(),
+                                        "parsing function body");
   
   // Do not enter a scope for the brace, as the arguments are in the same scope
   // (the function body) as the body itself.  Instead, just read the statement
