diff --git a/Parse/AttributeList.cpp b/Parse/AttributeList.cpp
index 63d07b3..4ceece8 100644
--- a/Parse/AttributeList.cpp
+++ b/Parse/AttributeList.cpp
@@ -49,7 +49,7 @@
     Str += 2;
     Len -= 4;
   }
-  
+
   switch (Len) {
   case 6: 
     if (!memcmp(Str, "packed", 6)) return AT_packed;
@@ -59,6 +59,7 @@
     break;
   case 8:
     if (!memcmp(Str, "annotate", 8)) return AT_annotate;
+    if (!memcmp(Str, "noreturn", 8)) return AT_noreturn;
     break;
   case 11:   
     if (!memcmp(Str, "vector_size", 11)) return AT_vector_size;
diff --git a/Sema/Sema.h b/Sema/Sema.h
index c2d249a..17ba542 100644
--- a/Sema/Sema.h
+++ b/Sema/Sema.h
@@ -272,6 +272,7 @@
   void HandleAlignedAttribute(Decl *d, AttributeList *rawAttr);
   void HandlePackedAttribute(Decl *d, AttributeList *rawAttr);
   void HandleAnnotateAttribute(Decl *d, AttributeList *rawAttr);
+  void HandleNoReturnAttribute(Decl *d, AttributeList *rawAttr);
   
   void WarnUndefinedMethod(SourceLocation ImpLoc, ObjCMethodDecl *method,
                            bool &IncompleteImpl);
diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp
index 1a0c3b2..e841787 100644
--- a/Sema/SemaDecl.cpp
+++ b/Sema/SemaDecl.cpp
@@ -1785,6 +1785,9 @@
   case AttributeList::AT_annotate:
     HandleAnnotateAttribute(New, Attr);
     break;
+  case AttributeList::AT_noreturn:
+    HandleNoReturnAttribute(New, Attr);
+    break;
   default:
     // FIXME: add other attributes...
     break;
@@ -1927,6 +1930,17 @@
          rawAttr->getName()->getName());
 }
 
+void Sema::HandleNoReturnAttribute(Decl *d, AttributeList *rawAttr) {
+  // check the attribute arguments.
+  if (rawAttr->getNumArgs() != 0) {
+    Diag(rawAttr->getLoc(), diag::err_attribute_wrong_number_arguments,
+         std::string("0"));
+    return;
+  }
+  
+  d->addAttr(new NoReturnAttr());
+}
+
 void Sema::HandleAnnotateAttribute(Decl *d, AttributeList *rawAttr) {
   // check the attribute arguments.
   if (rawAttr->getNumArgs() != 1) {
diff --git a/include/clang/AST/Attr.h b/include/clang/AST/Attr.h
index fea0b40..2517288 100644
--- a/include/clang/AST/Attr.h
+++ b/include/clang/AST/Attr.h
@@ -25,7 +25,8 @@
   enum Kind {
     Aligned,
     Packed,
-    Annotate
+    Annotate,
+    NoReturn
   };
     
 private:
@@ -95,6 +96,16 @@
   }
   static bool classof(const AnnotateAttr *A) { return true; }
 };
+  
+class NoReturnAttr : public Attr {
+public:
+  NoReturnAttr() : Attr(NoReturn) {}
+  
+  // Implement isa/cast/dyncast/etc.
+  
+  static bool classof(const Attr *A) { return A->getKind() == NoReturn; }  
+  static bool classof(const NoReturnAttr *A) { return true; }
+};
 
 }  // end namespace clang
 
diff --git a/include/clang/Parse/AttributeList.h b/include/clang/Parse/AttributeList.h
index d627f10..a6a699e 100644
--- a/include/clang/Parse/AttributeList.h
+++ b/include/clang/Parse/AttributeList.h
@@ -48,7 +48,8 @@
     AT_address_space,
     AT_aligned,
     AT_packed,
-    AT_annotate
+    AT_annotate,
+    AT_noreturn
   };
   
   IdentifierInfo *getName() const { return AttrName; }
