Revert r301822 (and dependent r301825), which tried to improve the
authorDaniel Jasper <djasper@google.com>
Tue, 2 May 2017 19:21:42 +0000 (19:21 +0000)
committerDaniel Jasper <djasper@google.com>
Tue, 2 May 2017 19:21:42 +0000 (19:21 +0000)
commitffdee093504d8e4133ebc90855e13f87c94d82b1
tree7c95d85741a8d2d0d08b9050773b4fea7dcd1203
parentf9d8eee3db46db293afea65a50bf884580873627
Revert r301822 (and dependent r301825), which tried to improve the
handling of constexprs with unknown bounds.

This triggers a corner case of the language where it's not yet clear
whether this should be an error:

  struct A {
    static void *const a[];
    static void *const b[];
  };
  constexpr void *A::a[] = {&b[0]};
  constexpr void *A::b[] = {&a[0]};

When discovering the initializer for A::a, the bounds of A::b aren't known yet.
It is unclear whether warning about errors should be deferred until the end of
the translation unit, possibly resolving errors that can be resolved. In
practice, the compiler can know the bounds of all arrays in this example.

Credits for reproducers and explanation go to Richard Smith. Richard, please
add more info in case my explanation is wrong.

llvm-svn: 301963
clang/include/clang/Basic/DiagnosticASTKinds.td
clang/lib/AST/ExprConstant.cpp
clang/test/SemaCXX/constexpr-array-unknown-bound.cpp [deleted file]