Index: lib/AST/ASTContext.cpp
===================================================================
--- lib/AST/ASTContext.cpp	(revision 160569)
+++ lib/AST/ASTContext.cpp	(working copy)
@@ -1046,8 +1046,6 @@
 
     std::pair<uint64_t, unsigned> EltInfo = getTypeInfo(CAT->getElementType());
     uint64_t Size = CAT->getSize().getZExtValue();
-    assert((Size == 0 || EltInfo.first <= (uint64_t)(-1)/Size) && 
-           "Overflow in array type bit size evaluation");
     Width = EltInfo.first*Size;
     Align = EltInfo.second;
     Width = llvm::RoundUpToAlignment(Width, Align);
Index: test/Sema/array-size-64.c
===================================================================
--- test/Sema/array-size-64.c	(revision 160569)
+++ test/Sema/array-size-64.c	(working copy)
@@ -4,4 +4,9 @@
   int a[2147483647U][2147483647U]; // expected-error{{array is too large}}
   int b[1073741825U - 1U][2147483647U];
   int c[18446744073709551615U/sizeof(int)/2];
+  const unsigned long Size = -1;
+  struct S {
+    char P[Size];  // expected-error {{array is too large}}
+  };
+  int M[sizeof(S)];  // expected-error {{use of undeclared identifier 'S'}}
 }
