Index: lib/AST/Decl.cpp
===================================================================
--- lib/AST/Decl.cpp	(revision 171973)
+++ lib/AST/Decl.cpp	(working copy)
@@ -1196,7 +1196,9 @@
 SourceRange VarDecl::getSourceRange() const {
   if (const Expr *Init = getInit()) {
     SourceLocation InitEnd = Init->getLocEnd();
-    if (InitEnd.isValid())
+    // If Init is implicit, use default code path to handle postfix declarator
+    // elements such as '[N]' etc.
+    if (InitEnd.isValid() && InitEnd != getLocation())
       return SourceRange(getOuterLocStart(), InitEnd);
   }
   return DeclaratorDecl::getSourceRange();
Index: test/SemaCXX/sourceranges.cpp
===================================================================
--- test/SemaCXX/sourceranges.cpp	(revision 171973)
+++ test/SemaCXX/sourceranges.cpp	(working copy)
@@ -7,11 +7,14 @@
 };
 
 namespace foo {
-class A {};
+class A { public: A() {} };
 enum B {};
 typedef int C;
 }
 
+// CHECK: VarDecl {{0x[0-9a-fA-F]+}} <line:16:1, col:36> ImplicitConstrArray 'foo::A [2]'
+static foo::A ImplicitConstrArray[2];
+
 int main() {
   // CHECK: CXXNewExpr {{0x[0-9a-fA-F]+}} <col:19, col:28> 'foo::A *'
   P<foo::A> p14 = new foo::A;
