From 52cc0897f3fb03a69f03dbf57bd25af0b9755df3 Mon Sep 17 00:00:00 2001 From: John McCall Date: Sat, 6 Feb 2010 01:07:37 +0000 Subject: Per discussion, remove the explicit restriction on static const data members with out-of-line initializers as integer constant expressions. Fixes PR6206. llvm-svn: 95463 --- clang/lib/AST/Expr.cpp | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) (limited to 'clang/lib/AST/Expr.cpp') diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index 50ddc9156a9..4e6cdcab004 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -1665,16 +1665,9 @@ static ICEDiag CheckICE(const Expr* E, ASTContext &Ctx) { return ICEDiag(2, cast(E)->getLocation()); } - // C++ [class.static.data]p4: - // If a static data member is of const integral or const - // enumeration type, its declaration in the class definition can - // specify a constant-initializer which shall be an integral - // constant expression (5.19). In that case, the member can appear - // in integral constant expressions. - if (ID->isOutOfLine()) { - Dcl->setInitKnownICE(false); - return ICEDiag(2, cast(E)->getLocation()); - } + // It's an ICE whether or not the definition we found is + // out-of-line. See DR 721 and the discussion in Clang PR + // 6206 for details. if (Dcl->isCheckingICE()) { return ICEDiag(2, cast(E)->getLocation()); -- cgit v1.2.3