Some places (although not all), we use a pattern where InitializerElementNotConstant returns true, and its clients can just write 'return InitializerElementNotConstant'. This would simplify the code a bit more (assuming you like the pattern).<br>
<br> - Daniel<br><br><div class="gmail_quote">On Mon, Oct 27, 2008 at 4:34 AM, Steve Naroff <span dir="ltr"><<a href="mailto:snaroff@apple.com">snaroff@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Author: snaroff<br>
Date: Mon Oct 27 06:34:16 2008<br>
New Revision: 58242<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=58242&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=58242&view=rev</a><br>
Log:<br>
Replace common diagnostic with a convenience function.<br>
This simplifies debug of this particular diagnostic (and removes some code clutter).<br>
<br>
Modified:<br>
    cfe/trunk/lib/Sema/Sema.h<br>
    cfe/trunk/lib/Sema/SemaDecl.cpp<br>
<br>
Modified: cfe/trunk/lib/Sema/Sema.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Sema.h?rev=58242&r1=58241&r2=58242&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Sema.h?rev=58242&r1=58241&r2=58242&view=diff</a><br>

<br>
==============================================================================<br>
--- cfe/trunk/lib/Sema/Sema.h (original)<br>
+++ cfe/trunk/lib/Sema/Sema.h Mon Oct 27 06:34:16 2008<br>
@@ -1106,6 +1106,7 @@<br>
   bool CheckArithmeticConstantExpression(const Expr* e);<br>
   bool CheckAddressConstantExpression(const Expr* e);<br>
   bool CheckAddressConstantExpressionLValue(const Expr* e);<br>
+  void InitializerElementNotConstant(const Expr *e);<br>
<br>
   StringLiteral *IsStringLiteralInit(Expr *Init, QualType DeclType);<br>
   bool CheckStringLiteralInit(StringLiteral *strLiteral, QualType &DeclT);<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaDecl.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=58242&r1=58241&r2=58242&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=58242&r1=58241&r2=58242&view=diff</a><br>

<br>
==============================================================================<br>
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Mon Oct 27 06:34:16 2008<br>
@@ -957,11 +957,15 @@<br>
   return New;<br>
 }<br>
<br>
+void Sema::InitializerElementNotConstant(const Expr *Init) {<br>
+  Diag(Init->getExprLoc(),<br>
+       diag::err_init_element_not_constant, Init->getSourceRange());<br>
+}<br>
+<br>
 bool Sema::CheckAddressConstantExpressionLValue(const Expr* Init) {<br>
   switch (Init->getStmtClass()) {<br>
   default:<br>
-    Diag(Init->getExprLoc(),<br>
-         diag::err_init_element_not_constant, Init->getSourceRange());<br>
+    InitializerElementNotConstant(Init);<br>
     return true;<br>
   case Expr::ParenExprClass: {<br>
     const ParenExpr* PE = cast<ParenExpr>(Init);<br>
@@ -974,14 +978,12 @@<br>
     if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {<br>
       if (VD->hasGlobalStorage())<br>
         return false;<br>
-      Diag(Init->getExprLoc(),<br>
-           diag::err_init_element_not_constant, Init->getSourceRange());<br>
+      InitializerElementNotConstant(Init);<br>
       return true;<br>
     }<br>
     if (isa<FunctionDecl>(D))<br>
       return false;<br>
-    Diag(Init->getExprLoc(),<br>
-         diag::err_init_element_not_constant, Init->getSourceRange());<br>
+    InitializerElementNotConstant(Init);<br>
     return true;<br>
   }<br>
   case Expr::MemberExprClass: {<br>
@@ -1006,8 +1008,7 @@<br>
     if (Exp->getOpcode() == UnaryOperator::Deref)<br>
       return CheckAddressConstantExpression(Exp->getSubExpr());<br>
<br>
-    Diag(Init->getExprLoc(),<br>
-         diag::err_init_element_not_constant, Init->getSourceRange());<br>
+    InitializerElementNotConstant(Init);<br>
     return true;<br>
   }<br>
   }<br>
@@ -1016,8 +1017,7 @@<br>
 bool Sema::CheckAddressConstantExpression(const Expr* Init) {<br>
   switch (Init->getStmtClass()) {<br>
   default:<br>
-    Diag(Init->getExprLoc(),<br>
-         diag::err_init_element_not_constant, Init->getSourceRange());<br>
+    InitializerElementNotConstant(Init);<br>
     return true;<br>
   case Expr::ParenExprClass:<br>
     return CheckAddressConstantExpression(cast<ParenExpr>(Init)->getSubExpr());<br>
@@ -1030,8 +1030,7 @@<br>
            Builtin::BI__builtin___CFStringMakeConstantString)<br>
       return false;<br>
<br>
-    Diag(Init->getExprLoc(),<br>
-         diag::err_init_element_not_constant, Init->getSourceRange());<br>
+    InitializerElementNotConstant(Init);<br>
     return true;<br>
<br>
   case Expr::UnaryOperatorClass: {<br>
@@ -1044,8 +1043,7 @@<br>
     if (Exp->getOpcode() == UnaryOperator::Extension)<br>
       return CheckAddressConstantExpression(Exp->getSubExpr());<br>
<br>
-    Diag(Init->getExprLoc(),<br>
-         diag::err_init_element_not_constant, Init->getSourceRange());<br>
+    InitializerElementNotConstant(Init);<br>
     return true;<br>
   }<br>
   case Expr::BinaryOperatorClass: {<br>
@@ -1093,16 +1091,14 @@<br>
       return CheckArithmeticConstantExpression(SubExpr);<br>
     }<br>
<br>
-    Diag(Init->getExprLoc(),<br>
-         diag::err_init_element_not_constant, Init->getSourceRange());<br>
+    InitializerElementNotConstant(Init);<br>
     return true;<br>
   }<br>
   case Expr::ConditionalOperatorClass: {<br>
     // FIXME: Should we pedwarn here?<br>
     const ConditionalOperator *Exp = cast<ConditionalOperator>(Init);<br>
     if (!Exp->getCond()->getType()->isArithmeticType()) {<br>
-      Diag(Init->getExprLoc(),<br>
-           diag::err_init_element_not_constant, Init->getSourceRange());<br>
+      InitializerElementNotConstant(Init);<br>
       return true;<br>
     }<br>
     if (CheckArithmeticConstantExpression(Exp->getCond()))<br>
@@ -1211,8 +1207,7 @@<br>
 bool Sema::CheckArithmeticConstantExpression(const Expr* Init) {<br>
   switch (Init->getStmtClass()) {<br>
   default:<br>
-    Diag(Init->getExprLoc(),<br>
-         diag::err_init_element_not_constant, Init->getSourceRange());<br>
+    InitializerElementNotConstant(Init);<br>
     return true;<br>
   case Expr::ParenExprClass: {<br>
     const ParenExpr* PE = cast<ParenExpr>(Init);<br>
@@ -1232,16 +1227,14 @@<br>
     if (CE->isBuiltinCall() && CE->isEvaluatable(Context))<br>
       return false;<br>
<br>
-    Diag(Init->getExprLoc(),<br>
-         diag::err_init_element_not_constant, Init->getSourceRange());<br>
+    InitializerElementNotConstant(Init);<br>
     return true;<br>
   }<br>
   case Expr::DeclRefExprClass: {<br>
     const Decl *D = cast<DeclRefExpr>(Init)->getDecl();<br>
     if (isa<EnumConstantDecl>(D))<br>
       return false;<br>
-    Diag(Init->getExprLoc(),<br>
-         diag::err_init_element_not_constant, Init->getSourceRange());<br>
+    InitializerElementNotConstant(Init);<br>
     return true;<br>
   }<br>
   case Expr::CompoundLiteralExprClass:<br>
@@ -1249,8 +1242,7 @@<br>
     // but vectors are allowed to be magic.<br>
     if (Init->getType()->isVectorType())<br>
       return false;<br>
-    Diag(Init->getExprLoc(),<br>
-         diag::err_init_element_not_constant, Init->getSourceRange());<br>
+    InitializerElementNotConstant(Init);<br>
     return true;<br>
   case Expr::UnaryOperatorClass: {<br>
     const UnaryOperator *Exp = cast<UnaryOperator>(Init);<br>
@@ -1259,8 +1251,7 @@<br>
     // Address, indirect, pre/post inc/dec, etc are not valid constant exprs.<br>
     // See C99 6.6p3.<br>
     default:<br>
-      Diag(Init->getExprLoc(),<br>
-           diag::err_init_element_not_constant, Init->getSourceRange());<br>
+      InitializerElementNotConstant(Init);<br>
       return true;<br>
     case UnaryOperator::SizeOf:<br>
     case UnaryOperator::AlignOf:<br>
@@ -1269,8 +1260,7 @@<br>
       // See C99 6.5.3.4p2 and 6.6p3.<br>
       if (Exp->getSubExpr()->getType()->isConstantSizeType())<br>
         return false;<br>
-      Diag(Init->getExprLoc(),<br>
-           diag::err_init_element_not_constant, Init->getSourceRange());<br>
+      InitializerElementNotConstant(Init);<br>
       return true;<br>
     case UnaryOperator::Extension:<br>
     case UnaryOperator::LNot:<br>
@@ -1288,8 +1278,7 @@<br>
     // alignof always evaluates to a constant.<br>
     // FIXME: is sizeof(int[3.0]) a constant expression?<br>
     if (Exp->isSizeOf() && !Exp->getArgumentType()->isConstantSizeType()) {<br>
-      Diag(Init->getExprLoc(),<br>
-           diag::err_init_element_not_constant, Init->getSourceRange());<br>
+      InitializerElementNotConstant(Init);<br>
       return true;<br>
     }<br>
     return false;<br>
@@ -1317,8 +1306,7 @@<br>
       }<br>
     }<br>
<br>
-    Diag(Init->getExprLoc(),<br>
-         diag::err_init_element_not_constant, Init->getSourceRange());<br>
+    InitializerElementNotConstant(Init);<br>
     return true;<br>
   }<br>
   case Expr::ImplicitCastExprClass:<br>
@@ -1334,8 +1322,7 @@<br>
         return CheckAddressConstantExpression(SubExpr);<br>
     }<br>
<br>
-    Diag(Init->getExprLoc(),<br>
-         diag::err_init_element_not_constant, Init->getSourceRange());<br>
+    InitializerElementNotConstant(Init);<br>
     return true;<br>
   }<br>
   case Expr::ConditionalOperatorClass: {<br>
@@ -1466,8 +1453,7 @@<br>
   if (Init->getType()->isBlockPointerType())<br>
     return false;<br>
<br>
-  Diag(Init->getExprLoc(), diag::err_init_element_not_constant,<br>
-       Init->getSourceRange());<br>
+  InitializerElementNotConstant(Init);<br>
   return true;<br>
 }<br>
<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br>