Revert "P0035R4: Semantic analysis and code generation for C++17 overaligned allocation."

This reverts commit r283722. Breaks:
  Clang.SemaCUDA.device-var-init.cu
  Clang.CodeGenCUDA.device-var-init.cu

http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-expensive/884/

llvm-svn: 283750
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp
index e330e31..fec7df0 100644
--- a/clang/lib/AST/Decl.cpp
+++ b/clang/lib/AST/Decl.cpp
@@ -2596,7 +2596,7 @@
     return false;
 
   const auto *FPT = getType()->castAs<FunctionProtoType>();
-  if (FPT->getNumParams() == 0 || FPT->getNumParams() > 3 || FPT->isVariadic())
+  if (FPT->getNumParams() == 0 || FPT->getNumParams() > 2 || FPT->isVariadic())
     return false;
 
   // If this is a single-parameter function, it must be a replaceable global
@@ -2604,42 +2604,20 @@
   if (FPT->getNumParams() == 1)
     return true;
 
-  unsigned Params = 1;
-  QualType Ty = FPT->getParamType(Params);
+  // Otherwise, we're looking for a second parameter whose type is
+  // 'const std::nothrow_t &', or, in C++1y, 'std::size_t'.
+  QualType Ty = FPT->getParamType(1);
   ASTContext &Ctx = getASTContext();
-
-  auto Consume = [&] {
-    ++Params;
-    Ty = Params < FPT->getNumParams() ? FPT->getParamType(Params) : QualType();
-  };
-
-  // In C++14, the next parameter can be a 'std::size_t' for sized delete.
-  bool IsSizedDelete = false;
   if (Ctx.getLangOpts().SizedDeallocation &&
-      (getDeclName().getCXXOverloadedOperator() == OO_Delete ||
-       getDeclName().getCXXOverloadedOperator() == OO_Array_Delete) &&
-      Ctx.hasSameType(Ty, Ctx.getSizeType())) {
-    IsSizedDelete = true;
-    Consume();
-  }
-
-  // In C++17, the next parameter can be a 'std::align_val_t' for aligned
-  // new/delete.
-  if (Ctx.getLangOpts().AlignedAllocation && !Ty.isNull() && Ty->isAlignValT())
-    Consume();
-
-  // Finally, if this is not a sized delete, the final parameter can
-  // be a 'const std::nothrow_t&'.
-  if (!IsSizedDelete && !Ty.isNull() && Ty->isReferenceType()) {
-    Ty = Ty->getPointeeType();
-    if (Ty.getCVRQualifiers() != Qualifiers::Const)
-      return false;
-    const CXXRecordDecl *RD = Ty->getAsCXXRecordDecl();
-    if (RD && isNamed(RD, "nothrow_t") && RD->isInStdNamespace())
-      Consume();
-  }
-
-  return Params == FPT->getNumParams();
+      Ctx.hasSameType(Ty, Ctx.getSizeType()))
+    return true;
+  if (!Ty->isReferenceType())
+    return false;
+  Ty = Ty->getPointeeType();
+  if (Ty.getCVRQualifiers() != Qualifiers::Const)
+    return false;
+  const CXXRecordDecl *RD = Ty->getAsCXXRecordDecl();
+  return RD && isNamed(RD, "nothrow_t") && RD->isInStdNamespace();
 }
 
 LanguageLinkage FunctionDecl::getLanguageLinkage() const {