Add noreturn as a type attribute, handle printing for them and handle
calls to noreturn function pointers when CFG building.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77089 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp
index c3bb29b..ef75b2b 100644
--- a/lib/AST/Type.cpp
+++ b/lib/AST/Type.cpp
@@ -904,7 +904,7 @@
                                 unsigned NumArgs, bool isVariadic,
                                 unsigned TypeQuals, bool hasExceptionSpec,
                                 bool anyExceptionSpec, unsigned NumExceptions,
-                                exception_iterator Exs) {
+                                exception_iterator Exs, bool NoReturn) {
   ID.AddPointer(Result.getAsOpaquePtr());
   for (unsigned i = 0; i != NumArgs; ++i)
     ID.AddPointer(ArgTys[i].getAsOpaquePtr());
@@ -916,12 +916,13 @@
     for(unsigned i = 0; i != NumExceptions; ++i)
       ID.AddPointer(Exs[i].getAsOpaquePtr());
   }
+  ID.AddInteger(NoReturn);
 }
 
 void FunctionProtoType::Profile(llvm::FoldingSetNodeID &ID) {
   Profile(ID, getResultType(), arg_type_begin(), NumArgs, isVariadic(),
           getTypeQuals(), hasExceptionSpec(), hasAnyExceptionSpec(),
-          getNumExceptions(), exception_begin());
+          getNumExceptions(), exception_begin(), getNoReturnAttr());
 }
 
 void ObjCObjectPointerType::Profile(llvm::FoldingSetNodeID &ID,
@@ -1082,7 +1083,7 @@
     if (EQT->getObjCGCAttr())
       GCAttrType = EQT->getObjCGCAttr();
     return EQT->getBaseType();
-  }else {
+  } else {
     // Use the sugared type unless desugaring found extra qualifiers.
     return (DT.getCVRQualifiers() ? DT.getTypePtr() : T);
   }
@@ -1413,6 +1414,8 @@
     S = "(" + S + ")";
   
   S += "()";
+  if (getNoReturnAttr())
+    S += " __attribute__((noreturn))";
   getResultType().getAsStringInternal(S, Policy);
 }
 
@@ -1442,6 +1445,8 @@
   }
   
   S += ")";
+  if (getNoReturnAttr())
+    S += " __attribute__((noreturn))";
   getResultType().getAsStringInternal(S, Policy);
 }