]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/clang/lib/Sema/SemaStmt.cpp
Add flex 2.5.37 from flex.sourceforge.net to contrib.
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / clang / lib / Sema / SemaStmt.cpp
1 //===--- SemaStmt.cpp - Semantic Analysis for Statements ------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 //  This file implements semantic analysis for statements.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "clang/Sema/SemaInternal.h"
15 #include "clang/AST/ASTContext.h"
16 #include "clang/AST/ASTDiagnostic.h"
17 #include "clang/AST/CharUnits.h"
18 #include "clang/AST/DeclObjC.h"
19 #include "clang/AST/EvaluatedExprVisitor.h"
20 #include "clang/AST/ExprCXX.h"
21 #include "clang/AST/ExprObjC.h"
22 #include "clang/AST/StmtCXX.h"
23 #include "clang/AST/StmtObjC.h"
24 #include "clang/AST/TypeLoc.h"
25 #include "clang/Basic/TargetInfo.h"
26 #include "clang/Lex/Preprocessor.h"
27 #include "clang/Sema/Initialization.h"
28 #include "clang/Sema/Lookup.h"
29 #include "clang/Sema/Scope.h"
30 #include "clang/Sema/ScopeInfo.h"
31 #include "llvm/ADT/ArrayRef.h"
32 #include "llvm/ADT/STLExtras.h"
33 #include "llvm/ADT/SmallPtrSet.h"
34 #include "llvm/ADT/SmallString.h"
35 #include "llvm/ADT/SmallVector.h"
36 using namespace clang;
37 using namespace sema;
38
39 StmtResult Sema::ActOnExprStmt(ExprResult FE) {
40   if (FE.isInvalid())
41     return StmtError();
42
43   FE = ActOnFinishFullExpr(FE.get(), FE.get()->getExprLoc(),
44                            /*DiscardedValue*/ true);
45   if (FE.isInvalid())
46     return StmtError();
47
48   // C99 6.8.3p2: The expression in an expression statement is evaluated as a
49   // void expression for its side effects.  Conversion to void allows any
50   // operand, even incomplete types.
51
52   // Same thing in for stmt first clause (when expr) and third clause.
53   return Owned(static_cast<Stmt*>(FE.take()));
54 }
55
56
57 StmtResult Sema::ActOnExprStmtError() {
58   DiscardCleanupsInEvaluationContext();
59   return StmtError();
60 }
61
62 StmtResult Sema::ActOnNullStmt(SourceLocation SemiLoc,
63                                bool HasLeadingEmptyMacro) {
64   return Owned(new (Context) NullStmt(SemiLoc, HasLeadingEmptyMacro));
65 }
66
67 StmtResult Sema::ActOnDeclStmt(DeclGroupPtrTy dg, SourceLocation StartLoc,
68                                SourceLocation EndLoc) {
69   DeclGroupRef DG = dg.getAsVal<DeclGroupRef>();
70
71   // If we have an invalid decl, just return an error.
72   if (DG.isNull()) return StmtError();
73
74   return Owned(new (Context) DeclStmt(DG, StartLoc, EndLoc));
75 }
76
77 void Sema::ActOnForEachDeclStmt(DeclGroupPtrTy dg) {
78   DeclGroupRef DG = dg.getAsVal<DeclGroupRef>();
79
80   // If we have an invalid decl, just return.
81   if (DG.isNull() || !DG.isSingleDecl()) return;
82   VarDecl *var = cast<VarDecl>(DG.getSingleDecl());
83
84   // suppress any potential 'unused variable' warning.
85   var->setUsed();
86
87   // foreach variables are never actually initialized in the way that
88   // the parser came up with.
89   var->setInit(0);
90
91   // In ARC, we don't need to retain the iteration variable of a fast
92   // enumeration loop.  Rather than actually trying to catch that
93   // during declaration processing, we remove the consequences here.
94   if (getLangOpts().ObjCAutoRefCount) {
95     QualType type = var->getType();
96
97     // Only do this if we inferred the lifetime.  Inferred lifetime
98     // will show up as a local qualifier because explicit lifetime
99     // should have shown up as an AttributedType instead.
100     if (type.getLocalQualifiers().getObjCLifetime() == Qualifiers::OCL_Strong) {
101       // Add 'const' and mark the variable as pseudo-strong.
102       var->setType(type.withConst());
103       var->setARCPseudoStrong(true);
104     }
105   }
106 }
107
108 /// \brief Diagnose unused '==' and '!=' as likely typos for '=' or '|='.
109 ///
110 /// Adding a cast to void (or other expression wrappers) will prevent the
111 /// warning from firing.
112 static bool DiagnoseUnusedComparison(Sema &S, const Expr *E) {
113   SourceLocation Loc;
114   bool IsNotEqual, CanAssign;
115
116   if (const BinaryOperator *Op = dyn_cast<BinaryOperator>(E)) {
117     if (Op->getOpcode() != BO_EQ && Op->getOpcode() != BO_NE)
118       return false;
119
120     Loc = Op->getOperatorLoc();
121     IsNotEqual = Op->getOpcode() == BO_NE;
122     CanAssign = Op->getLHS()->IgnoreParenImpCasts()->isLValue();
123   } else if (const CXXOperatorCallExpr *Op = dyn_cast<CXXOperatorCallExpr>(E)) {
124     if (Op->getOperator() != OO_EqualEqual &&
125         Op->getOperator() != OO_ExclaimEqual)
126       return false;
127
128     Loc = Op->getOperatorLoc();
129     IsNotEqual = Op->getOperator() == OO_ExclaimEqual;
130     CanAssign = Op->getArg(0)->IgnoreParenImpCasts()->isLValue();
131   } else {
132     // Not a typo-prone comparison.
133     return false;
134   }
135
136   // Suppress warnings when the operator, suspicious as it may be, comes from
137   // a macro expansion.
138   if (S.SourceMgr.isMacroBodyExpansion(Loc))
139     return false;
140
141   S.Diag(Loc, diag::warn_unused_comparison)
142     << (unsigned)IsNotEqual << E->getSourceRange();
143
144   // If the LHS is a plausible entity to assign to, provide a fixit hint to
145   // correct common typos.
146   if (CanAssign) {
147     if (IsNotEqual)
148       S.Diag(Loc, diag::note_inequality_comparison_to_or_assign)
149         << FixItHint::CreateReplacement(Loc, "|=");
150     else
151       S.Diag(Loc, diag::note_equality_comparison_to_assign)
152         << FixItHint::CreateReplacement(Loc, "=");
153   }
154
155   return true;
156 }
157
158 void Sema::DiagnoseUnusedExprResult(const Stmt *S) {
159   if (const LabelStmt *Label = dyn_cast_or_null<LabelStmt>(S))
160     return DiagnoseUnusedExprResult(Label->getSubStmt());
161
162   const Expr *E = dyn_cast_or_null<Expr>(S);
163   if (!E)
164     return;
165   SourceLocation ExprLoc = E->IgnoreParens()->getExprLoc();
166   // In most cases, we don't want to warn if the expression is written in a
167   // macro body, or if the macro comes from a system header. If the offending
168   // expression is a call to a function with the warn_unused_result attribute,
169   // we warn no matter the location. Because of the order in which the various
170   // checks need to happen, we factor out the macro-related test here.
171   bool ShouldSuppress = 
172       SourceMgr.isMacroBodyExpansion(ExprLoc) ||
173       SourceMgr.isInSystemMacro(ExprLoc);
174
175   const Expr *WarnExpr;
176   SourceLocation Loc;
177   SourceRange R1, R2;
178   if (!E->isUnusedResultAWarning(WarnExpr, Loc, R1, R2, Context))
179     return;
180
181   // If this is a GNU statement expression expanded from a macro, it is probably
182   // unused because it is a function-like macro that can be used as either an
183   // expression or statement.  Don't warn, because it is almost certainly a
184   // false positive.
185   if (isa<StmtExpr>(E) && Loc.isMacroID())
186     return;
187
188   // Okay, we have an unused result.  Depending on what the base expression is,
189   // we might want to make a more specific diagnostic.  Check for one of these
190   // cases now.
191   unsigned DiagID = diag::warn_unused_expr;
192   if (const ExprWithCleanups *Temps = dyn_cast<ExprWithCleanups>(E))
193     E = Temps->getSubExpr();
194   if (const CXXBindTemporaryExpr *TempExpr = dyn_cast<CXXBindTemporaryExpr>(E))
195     E = TempExpr->getSubExpr();
196
197   if (DiagnoseUnusedComparison(*this, E))
198     return;
199
200   E = WarnExpr;
201   if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {
202     if (E->getType()->isVoidType())
203       return;
204
205     // If the callee has attribute pure, const, or warn_unused_result, warn with
206     // a more specific message to make it clear what is happening. If the call
207     // is written in a macro body, only warn if it has the warn_unused_result
208     // attribute.
209     if (const Decl *FD = CE->getCalleeDecl()) {
210       if (FD->getAttr<WarnUnusedResultAttr>()) {
211         Diag(Loc, diag::warn_unused_result) << R1 << R2;
212         return;
213       }
214       if (ShouldSuppress)
215         return;
216       if (FD->getAttr<PureAttr>()) {
217         Diag(Loc, diag::warn_unused_call) << R1 << R2 << "pure";
218         return;
219       }
220       if (FD->getAttr<ConstAttr>()) {
221         Diag(Loc, diag::warn_unused_call) << R1 << R2 << "const";
222         return;
223       }
224     }
225   } else if (ShouldSuppress)
226     return;
227
228   if (const ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(E)) {
229     if (getLangOpts().ObjCAutoRefCount && ME->isDelegateInitCall()) {
230       Diag(Loc, diag::err_arc_unused_init_message) << R1;
231       return;
232     }
233     const ObjCMethodDecl *MD = ME->getMethodDecl();
234     if (MD && MD->getAttr<WarnUnusedResultAttr>()) {
235       Diag(Loc, diag::warn_unused_result) << R1 << R2;
236       return;
237     }
238   } else if (const PseudoObjectExpr *POE = dyn_cast<PseudoObjectExpr>(E)) {
239     const Expr *Source = POE->getSyntacticForm();
240     if (isa<ObjCSubscriptRefExpr>(Source))
241       DiagID = diag::warn_unused_container_subscript_expr;
242     else
243       DiagID = diag::warn_unused_property_expr;
244   } else if (const CXXFunctionalCastExpr *FC
245                                        = dyn_cast<CXXFunctionalCastExpr>(E)) {
246     if (isa<CXXConstructExpr>(FC->getSubExpr()) ||
247         isa<CXXTemporaryObjectExpr>(FC->getSubExpr()))
248       return;
249   }
250   // Diagnose "(void*) blah" as a typo for "(void) blah".
251   else if (const CStyleCastExpr *CE = dyn_cast<CStyleCastExpr>(E)) {
252     TypeSourceInfo *TI = CE->getTypeInfoAsWritten();
253     QualType T = TI->getType();
254
255     // We really do want to use the non-canonical type here.
256     if (T == Context.VoidPtrTy) {
257       PointerTypeLoc TL = TI->getTypeLoc().castAs<PointerTypeLoc>();
258
259       Diag(Loc, diag::warn_unused_voidptr)
260         << FixItHint::CreateRemoval(TL.getStarLoc());
261       return;
262     }
263   }
264
265   if (E->isGLValue() && E->getType().isVolatileQualified()) {
266     Diag(Loc, diag::warn_unused_volatile) << R1 << R2;
267     return;
268   }
269
270   DiagRuntimeBehavior(Loc, 0, PDiag(DiagID) << R1 << R2);
271 }
272
273 void Sema::ActOnStartOfCompoundStmt() {
274   PushCompoundScope();
275 }
276
277 void Sema::ActOnFinishOfCompoundStmt() {
278   PopCompoundScope();
279 }
280
281 sema::CompoundScopeInfo &Sema::getCurCompoundScope() const {
282   return getCurFunction()->CompoundScopes.back();
283 }
284
285 StmtResult
286 Sema::ActOnCompoundStmt(SourceLocation L, SourceLocation R,
287                         MultiStmtArg elts, bool isStmtExpr) {
288   unsigned NumElts = elts.size();
289   Stmt **Elts = elts.data();
290   // If we're in C89 mode, check that we don't have any decls after stmts.  If
291   // so, emit an extension diagnostic.
292   if (!getLangOpts().C99 && !getLangOpts().CPlusPlus) {
293     // Note that __extension__ can be around a decl.
294     unsigned i = 0;
295     // Skip over all declarations.
296     for (; i != NumElts && isa<DeclStmt>(Elts[i]); ++i)
297       /*empty*/;
298
299     // We found the end of the list or a statement.  Scan for another declstmt.
300     for (; i != NumElts && !isa<DeclStmt>(Elts[i]); ++i)
301       /*empty*/;
302
303     if (i != NumElts) {
304       Decl *D = *cast<DeclStmt>(Elts[i])->decl_begin();
305       Diag(D->getLocation(), diag::ext_mixed_decls_code);
306     }
307   }
308   // Warn about unused expressions in statements.
309   for (unsigned i = 0; i != NumElts; ++i) {
310     // Ignore statements that are last in a statement expression.
311     if (isStmtExpr && i == NumElts - 1)
312       continue;
313
314     DiagnoseUnusedExprResult(Elts[i]);
315   }
316
317   // Check for suspicious empty body (null statement) in `for' and `while'
318   // statements.  Don't do anything for template instantiations, this just adds
319   // noise.
320   if (NumElts != 0 && !CurrentInstantiationScope &&
321       getCurCompoundScope().HasEmptyLoopBodies) {
322     for (unsigned i = 0; i != NumElts - 1; ++i)
323       DiagnoseEmptyLoopBody(Elts[i], Elts[i + 1]);
324   }
325
326   return Owned(new (Context) CompoundStmt(Context,
327                                           llvm::makeArrayRef(Elts, NumElts),
328                                           L, R));
329 }
330
331 StmtResult
332 Sema::ActOnCaseStmt(SourceLocation CaseLoc, Expr *LHSVal,
333                     SourceLocation DotDotDotLoc, Expr *RHSVal,
334                     SourceLocation ColonLoc) {
335   assert((LHSVal != 0) && "missing expression in case statement");
336
337   if (getCurFunction()->SwitchStack.empty()) {
338     Diag(CaseLoc, diag::err_case_not_in_switch);
339     return StmtError();
340   }
341
342   if (!getLangOpts().CPlusPlus11) {
343     // C99 6.8.4.2p3: The expression shall be an integer constant.
344     // However, GCC allows any evaluatable integer expression.
345     if (!LHSVal->isTypeDependent() && !LHSVal->isValueDependent()) {
346       LHSVal = VerifyIntegerConstantExpression(LHSVal).take();
347       if (!LHSVal)
348         return StmtError();
349     }
350
351     // GCC extension: The expression shall be an integer constant.
352
353     if (RHSVal && !RHSVal->isTypeDependent() && !RHSVal->isValueDependent()) {
354       RHSVal = VerifyIntegerConstantExpression(RHSVal).take();
355       // Recover from an error by just forgetting about it.
356     }
357   }
358   
359   LHSVal = ActOnFinishFullExpr(LHSVal, LHSVal->getExprLoc(), false,
360                                getLangOpts().CPlusPlus11).take();
361   if (RHSVal)
362     RHSVal = ActOnFinishFullExpr(RHSVal, RHSVal->getExprLoc(), false,
363                                  getLangOpts().CPlusPlus11).take();
364
365   CaseStmt *CS = new (Context) CaseStmt(LHSVal, RHSVal, CaseLoc, DotDotDotLoc,
366                                         ColonLoc);
367   getCurFunction()->SwitchStack.back()->addSwitchCase(CS);
368   return Owned(CS);
369 }
370
371 /// ActOnCaseStmtBody - This installs a statement as the body of a case.
372 void Sema::ActOnCaseStmtBody(Stmt *caseStmt, Stmt *SubStmt) {
373   DiagnoseUnusedExprResult(SubStmt);
374
375   CaseStmt *CS = static_cast<CaseStmt*>(caseStmt);
376   CS->setSubStmt(SubStmt);
377 }
378
379 StmtResult
380 Sema::ActOnDefaultStmt(SourceLocation DefaultLoc, SourceLocation ColonLoc,
381                        Stmt *SubStmt, Scope *CurScope) {
382   DiagnoseUnusedExprResult(SubStmt);
383
384   if (getCurFunction()->SwitchStack.empty()) {
385     Diag(DefaultLoc, diag::err_default_not_in_switch);
386     return Owned(SubStmt);
387   }
388
389   DefaultStmt *DS = new (Context) DefaultStmt(DefaultLoc, ColonLoc, SubStmt);
390   getCurFunction()->SwitchStack.back()->addSwitchCase(DS);
391   return Owned(DS);
392 }
393
394 StmtResult
395 Sema::ActOnLabelStmt(SourceLocation IdentLoc, LabelDecl *TheDecl,
396                      SourceLocation ColonLoc, Stmt *SubStmt) {
397   // If the label was multiply defined, reject it now.
398   if (TheDecl->getStmt()) {
399     Diag(IdentLoc, diag::err_redefinition_of_label) << TheDecl->getDeclName();
400     Diag(TheDecl->getLocation(), diag::note_previous_definition);
401     return Owned(SubStmt);
402   }
403
404   // Otherwise, things are good.  Fill in the declaration and return it.
405   LabelStmt *LS = new (Context) LabelStmt(IdentLoc, TheDecl, SubStmt);
406   TheDecl->setStmt(LS);
407   if (!TheDecl->isGnuLocal()) {
408     TheDecl->setLocStart(IdentLoc);
409     TheDecl->setLocation(IdentLoc);
410   }
411   return Owned(LS);
412 }
413
414 StmtResult Sema::ActOnAttributedStmt(SourceLocation AttrLoc,
415                                      ArrayRef<const Attr*> Attrs,
416                                      Stmt *SubStmt) {
417   // Fill in the declaration and return it.
418   AttributedStmt *LS = AttributedStmt::Create(Context, AttrLoc, Attrs, SubStmt);
419   return Owned(LS);
420 }
421
422 StmtResult
423 Sema::ActOnIfStmt(SourceLocation IfLoc, FullExprArg CondVal, Decl *CondVar,
424                   Stmt *thenStmt, SourceLocation ElseLoc,
425                   Stmt *elseStmt) {
426   // If the condition was invalid, discard the if statement.  We could recover
427   // better by replacing it with a valid expr, but don't do that yet.
428   if (!CondVal.get() && !CondVar) {
429     getCurFunction()->setHasDroppedStmt();
430     return StmtError();
431   }
432
433   ExprResult CondResult(CondVal.release());
434
435   VarDecl *ConditionVar = 0;
436   if (CondVar) {
437     ConditionVar = cast<VarDecl>(CondVar);
438     CondResult = CheckConditionVariable(ConditionVar, IfLoc, true);
439     if (CondResult.isInvalid())
440       return StmtError();
441   }
442   Expr *ConditionExpr = CondResult.takeAs<Expr>();
443   if (!ConditionExpr)
444     return StmtError();
445
446   DiagnoseUnusedExprResult(thenStmt);
447
448   if (!elseStmt) {
449     DiagnoseEmptyStmtBody(ConditionExpr->getLocEnd(), thenStmt,
450                           diag::warn_empty_if_body);
451   }
452
453   DiagnoseUnusedExprResult(elseStmt);
454
455   return Owned(new (Context) IfStmt(Context, IfLoc, ConditionVar, ConditionExpr,
456                                     thenStmt, ElseLoc, elseStmt));
457 }
458
459 /// ConvertIntegerToTypeWarnOnOverflow - Convert the specified APInt to have
460 /// the specified width and sign.  If an overflow occurs, detect it and emit
461 /// the specified diagnostic.
462 void Sema::ConvertIntegerToTypeWarnOnOverflow(llvm::APSInt &Val,
463                                               unsigned NewWidth, bool NewSign,
464                                               SourceLocation Loc,
465                                               unsigned DiagID) {
466   // Perform a conversion to the promoted condition type if needed.
467   if (NewWidth > Val.getBitWidth()) {
468     // If this is an extension, just do it.
469     Val = Val.extend(NewWidth);
470     Val.setIsSigned(NewSign);
471
472     // If the input was signed and negative and the output is
473     // unsigned, don't bother to warn: this is implementation-defined
474     // behavior.
475     // FIXME: Introduce a second, default-ignored warning for this case?
476   } else if (NewWidth < Val.getBitWidth()) {
477     // If this is a truncation, check for overflow.
478     llvm::APSInt ConvVal(Val);
479     ConvVal = ConvVal.trunc(NewWidth);
480     ConvVal.setIsSigned(NewSign);
481     ConvVal = ConvVal.extend(Val.getBitWidth());
482     ConvVal.setIsSigned(Val.isSigned());
483     if (ConvVal != Val)
484       Diag(Loc, DiagID) << Val.toString(10) << ConvVal.toString(10);
485
486     // Regardless of whether a diagnostic was emitted, really do the
487     // truncation.
488     Val = Val.trunc(NewWidth);
489     Val.setIsSigned(NewSign);
490   } else if (NewSign != Val.isSigned()) {
491     // Convert the sign to match the sign of the condition.  This can cause
492     // overflow as well: unsigned(INTMIN)
493     // We don't diagnose this overflow, because it is implementation-defined
494     // behavior.
495     // FIXME: Introduce a second, default-ignored warning for this case?
496     llvm::APSInt OldVal(Val);
497     Val.setIsSigned(NewSign);
498   }
499 }
500
501 namespace {
502   struct CaseCompareFunctor {
503     bool operator()(const std::pair<llvm::APSInt, CaseStmt*> &LHS,
504                     const llvm::APSInt &RHS) {
505       return LHS.first < RHS;
506     }
507     bool operator()(const std::pair<llvm::APSInt, CaseStmt*> &LHS,
508                     const std::pair<llvm::APSInt, CaseStmt*> &RHS) {
509       return LHS.first < RHS.first;
510     }
511     bool operator()(const llvm::APSInt &LHS,
512                     const std::pair<llvm::APSInt, CaseStmt*> &RHS) {
513       return LHS < RHS.first;
514     }
515   };
516 }
517
518 /// CmpCaseVals - Comparison predicate for sorting case values.
519 ///
520 static bool CmpCaseVals(const std::pair<llvm::APSInt, CaseStmt*>& lhs,
521                         const std::pair<llvm::APSInt, CaseStmt*>& rhs) {
522   if (lhs.first < rhs.first)
523     return true;
524
525   if (lhs.first == rhs.first &&
526       lhs.second->getCaseLoc().getRawEncoding()
527        < rhs.second->getCaseLoc().getRawEncoding())
528     return true;
529   return false;
530 }
531
532 /// CmpEnumVals - Comparison predicate for sorting enumeration values.
533 ///
534 static bool CmpEnumVals(const std::pair<llvm::APSInt, EnumConstantDecl*>& lhs,
535                         const std::pair<llvm::APSInt, EnumConstantDecl*>& rhs)
536 {
537   return lhs.first < rhs.first;
538 }
539
540 /// EqEnumVals - Comparison preficate for uniqing enumeration values.
541 ///
542 static bool EqEnumVals(const std::pair<llvm::APSInt, EnumConstantDecl*>& lhs,
543                        const std::pair<llvm::APSInt, EnumConstantDecl*>& rhs)
544 {
545   return lhs.first == rhs.first;
546 }
547
548 /// GetTypeBeforeIntegralPromotion - Returns the pre-promotion type of
549 /// potentially integral-promoted expression @p expr.
550 static QualType GetTypeBeforeIntegralPromotion(Expr *&expr) {
551   if (ExprWithCleanups *cleanups = dyn_cast<ExprWithCleanups>(expr))
552     expr = cleanups->getSubExpr();
553   while (ImplicitCastExpr *impcast = dyn_cast<ImplicitCastExpr>(expr)) {
554     if (impcast->getCastKind() != CK_IntegralCast) break;
555     expr = impcast->getSubExpr();
556   }
557   return expr->getType();
558 }
559
560 StmtResult
561 Sema::ActOnStartOfSwitchStmt(SourceLocation SwitchLoc, Expr *Cond,
562                              Decl *CondVar) {
563   ExprResult CondResult;
564
565   VarDecl *ConditionVar = 0;
566   if (CondVar) {
567     ConditionVar = cast<VarDecl>(CondVar);
568     CondResult = CheckConditionVariable(ConditionVar, SourceLocation(), false);
569     if (CondResult.isInvalid())
570       return StmtError();
571
572     Cond = CondResult.release();
573   }
574
575   if (!Cond)
576     return StmtError();
577
578   class SwitchConvertDiagnoser : public ICEConvertDiagnoser {
579     Expr *Cond;
580
581   public:
582     SwitchConvertDiagnoser(Expr *Cond)
583       : ICEConvertDiagnoser(false, true), Cond(Cond) { }
584
585     virtual DiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc,
586                                              QualType T) {
587       return S.Diag(Loc, diag::err_typecheck_statement_requires_integer) << T;
588     }
589
590     virtual DiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc,
591                                                  QualType T) {
592       return S.Diag(Loc, diag::err_switch_incomplete_class_type)
593                << T << Cond->getSourceRange();
594     }
595
596     virtual DiagnosticBuilder diagnoseExplicitConv(Sema &S, SourceLocation Loc,
597                                                    QualType T,
598                                                    QualType ConvTy) {
599       return S.Diag(Loc, diag::err_switch_explicit_conversion) << T << ConvTy;
600     }
601
602     virtual DiagnosticBuilder noteExplicitConv(Sema &S, CXXConversionDecl *Conv,
603                                                QualType ConvTy) {
604       return S.Diag(Conv->getLocation(), diag::note_switch_conversion)
605         << ConvTy->isEnumeralType() << ConvTy;
606     }
607
608     virtual DiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc,
609                                                 QualType T) {
610       return S.Diag(Loc, diag::err_switch_multiple_conversions) << T;
611     }
612
613     virtual DiagnosticBuilder noteAmbiguous(Sema &S, CXXConversionDecl *Conv,
614                                             QualType ConvTy) {
615       return S.Diag(Conv->getLocation(), diag::note_switch_conversion)
616       << ConvTy->isEnumeralType() << ConvTy;
617     }
618
619     virtual DiagnosticBuilder diagnoseConversion(Sema &S, SourceLocation Loc,
620                                                  QualType T,
621                                                  QualType ConvTy) {
622       return DiagnosticBuilder::getEmpty();
623     }
624   } SwitchDiagnoser(Cond);
625
626   CondResult
627     = ConvertToIntegralOrEnumerationType(SwitchLoc, Cond, SwitchDiagnoser,
628                                          /*AllowScopedEnumerations*/ true);
629   if (CondResult.isInvalid()) return StmtError();
630   Cond = CondResult.take();
631
632   // C99 6.8.4.2p5 - Integer promotions are performed on the controlling expr.
633   CondResult = UsualUnaryConversions(Cond);
634   if (CondResult.isInvalid()) return StmtError();
635   Cond = CondResult.take();
636
637   if (!CondVar) {
638     CondResult = ActOnFinishFullExpr(Cond, SwitchLoc);
639     if (CondResult.isInvalid())
640       return StmtError();
641     Cond = CondResult.take();
642   }
643
644   getCurFunction()->setHasBranchIntoScope();
645
646   SwitchStmt *SS = new (Context) SwitchStmt(Context, ConditionVar, Cond);
647   getCurFunction()->SwitchStack.push_back(SS);
648   return Owned(SS);
649 }
650
651 static void AdjustAPSInt(llvm::APSInt &Val, unsigned BitWidth, bool IsSigned) {
652   if (Val.getBitWidth() < BitWidth)
653     Val = Val.extend(BitWidth);
654   else if (Val.getBitWidth() > BitWidth)
655     Val = Val.trunc(BitWidth);
656   Val.setIsSigned(IsSigned);
657 }
658
659 StmtResult
660 Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch,
661                             Stmt *BodyStmt) {
662   SwitchStmt *SS = cast<SwitchStmt>(Switch);
663   assert(SS == getCurFunction()->SwitchStack.back() &&
664          "switch stack missing push/pop!");
665
666   SS->setBody(BodyStmt, SwitchLoc);
667   getCurFunction()->SwitchStack.pop_back();
668
669   Expr *CondExpr = SS->getCond();
670   if (!CondExpr) return StmtError();
671
672   QualType CondType = CondExpr->getType();
673
674   Expr *CondExprBeforePromotion = CondExpr;
675   QualType CondTypeBeforePromotion =
676       GetTypeBeforeIntegralPromotion(CondExprBeforePromotion);
677
678   // C++ 6.4.2.p2:
679   // Integral promotions are performed (on the switch condition).
680   //
681   // A case value unrepresentable by the original switch condition
682   // type (before the promotion) doesn't make sense, even when it can
683   // be represented by the promoted type.  Therefore we need to find
684   // the pre-promotion type of the switch condition.
685   if (!CondExpr->isTypeDependent()) {
686     // We have already converted the expression to an integral or enumeration
687     // type, when we started the switch statement. If we don't have an
688     // appropriate type now, just return an error.
689     if (!CondType->isIntegralOrEnumerationType())
690       return StmtError();
691
692     if (CondExpr->isKnownToHaveBooleanValue()) {
693       // switch(bool_expr) {...} is often a programmer error, e.g.
694       //   switch(n && mask) { ... }  // Doh - should be "n & mask".
695       // One can always use an if statement instead of switch(bool_expr).
696       Diag(SwitchLoc, diag::warn_bool_switch_condition)
697           << CondExpr->getSourceRange();
698     }
699   }
700
701   // Get the bitwidth of the switched-on value before promotions.  We must
702   // convert the integer case values to this width before comparison.
703   bool HasDependentValue
704     = CondExpr->isTypeDependent() || CondExpr->isValueDependent();
705   unsigned CondWidth
706     = HasDependentValue ? 0 : Context.getIntWidth(CondTypeBeforePromotion);
707   bool CondIsSigned
708     = CondTypeBeforePromotion->isSignedIntegerOrEnumerationType();
709
710   // Accumulate all of the case values in a vector so that we can sort them
711   // and detect duplicates.  This vector contains the APInt for the case after
712   // it has been converted to the condition type.
713   typedef SmallVector<std::pair<llvm::APSInt, CaseStmt*>, 64> CaseValsTy;
714   CaseValsTy CaseVals;
715
716   // Keep track of any GNU case ranges we see.  The APSInt is the low value.
717   typedef std::vector<std::pair<llvm::APSInt, CaseStmt*> > CaseRangesTy;
718   CaseRangesTy CaseRanges;
719
720   DefaultStmt *TheDefaultStmt = 0;
721
722   bool CaseListIsErroneous = false;
723
724   for (SwitchCase *SC = SS->getSwitchCaseList(); SC && !HasDependentValue;
725        SC = SC->getNextSwitchCase()) {
726
727     if (DefaultStmt *DS = dyn_cast<DefaultStmt>(SC)) {
728       if (TheDefaultStmt) {
729         Diag(DS->getDefaultLoc(), diag::err_multiple_default_labels_defined);
730         Diag(TheDefaultStmt->getDefaultLoc(), diag::note_duplicate_case_prev);
731
732         // FIXME: Remove the default statement from the switch block so that
733         // we'll return a valid AST.  This requires recursing down the AST and
734         // finding it, not something we are set up to do right now.  For now,
735         // just lop the entire switch stmt out of the AST.
736         CaseListIsErroneous = true;
737       }
738       TheDefaultStmt = DS;
739
740     } else {
741       CaseStmt *CS = cast<CaseStmt>(SC);
742
743       Expr *Lo = CS->getLHS();
744
745       if (Lo->isTypeDependent() || Lo->isValueDependent()) {
746         HasDependentValue = true;
747         break;
748       }
749
750       llvm::APSInt LoVal;
751
752       if (getLangOpts().CPlusPlus11) {
753         // C++11 [stmt.switch]p2: the constant-expression shall be a converted
754         // constant expression of the promoted type of the switch condition.
755         ExprResult ConvLo =
756           CheckConvertedConstantExpression(Lo, CondType, LoVal, CCEK_CaseValue);
757         if (ConvLo.isInvalid()) {
758           CaseListIsErroneous = true;
759           continue;
760         }
761         Lo = ConvLo.take();
762       } else {
763         // We already verified that the expression has a i-c-e value (C99
764         // 6.8.4.2p3) - get that value now.
765         LoVal = Lo->EvaluateKnownConstInt(Context);
766
767         // If the LHS is not the same type as the condition, insert an implicit
768         // cast.
769         Lo = DefaultLvalueConversion(Lo).take();
770         Lo = ImpCastExprToType(Lo, CondType, CK_IntegralCast).take();
771       }
772
773       // Convert the value to the same width/sign as the condition had prior to
774       // integral promotions.
775       //
776       // FIXME: This causes us to reject valid code:
777       //   switch ((char)c) { case 256: case 0: return 0; }
778       // Here we claim there is a duplicated condition value, but there is not.
779       ConvertIntegerToTypeWarnOnOverflow(LoVal, CondWidth, CondIsSigned,
780                                          Lo->getLocStart(),
781                                          diag::warn_case_value_overflow);
782
783       CS->setLHS(Lo);
784
785       // If this is a case range, remember it in CaseRanges, otherwise CaseVals.
786       if (CS->getRHS()) {
787         if (CS->getRHS()->isTypeDependent() ||
788             CS->getRHS()->isValueDependent()) {
789           HasDependentValue = true;
790           break;
791         }
792         CaseRanges.push_back(std::make_pair(LoVal, CS));
793       } else
794         CaseVals.push_back(std::make_pair(LoVal, CS));
795     }
796   }
797
798   if (!HasDependentValue) {
799     // If we don't have a default statement, check whether the
800     // condition is constant.
801     llvm::APSInt ConstantCondValue;
802     bool HasConstantCond = false;
803     if (!HasDependentValue && !TheDefaultStmt) {
804       HasConstantCond
805         = CondExprBeforePromotion->EvaluateAsInt(ConstantCondValue, Context,
806                                                  Expr::SE_AllowSideEffects);
807       assert(!HasConstantCond ||
808              (ConstantCondValue.getBitWidth() == CondWidth &&
809               ConstantCondValue.isSigned() == CondIsSigned));
810     }
811     bool ShouldCheckConstantCond = HasConstantCond;
812
813     // Sort all the scalar case values so we can easily detect duplicates.
814     std::stable_sort(CaseVals.begin(), CaseVals.end(), CmpCaseVals);
815
816     if (!CaseVals.empty()) {
817       for (unsigned i = 0, e = CaseVals.size(); i != e; ++i) {
818         if (ShouldCheckConstantCond &&
819             CaseVals[i].first == ConstantCondValue)
820           ShouldCheckConstantCond = false;
821
822         if (i != 0 && CaseVals[i].first == CaseVals[i-1].first) {
823           // If we have a duplicate, report it.
824           // First, determine if either case value has a name
825           StringRef PrevString, CurrString;
826           Expr *PrevCase = CaseVals[i-1].second->getLHS()->IgnoreParenCasts();
827           Expr *CurrCase = CaseVals[i].second->getLHS()->IgnoreParenCasts();
828           if (DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(PrevCase)) {
829             PrevString = DeclRef->getDecl()->getName();
830           }
831           if (DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(CurrCase)) {
832             CurrString = DeclRef->getDecl()->getName();
833           }
834           SmallString<16> CaseValStr;
835           CaseVals[i-1].first.toString(CaseValStr);
836
837           if (PrevString == CurrString)
838             Diag(CaseVals[i].second->getLHS()->getLocStart(),
839                  diag::err_duplicate_case) <<
840                  (PrevString.empty() ? CaseValStr.str() : PrevString);
841           else
842             Diag(CaseVals[i].second->getLHS()->getLocStart(),
843                  diag::err_duplicate_case_differing_expr) <<
844                  (PrevString.empty() ? CaseValStr.str() : PrevString) <<
845                  (CurrString.empty() ? CaseValStr.str() : CurrString) <<
846                  CaseValStr;
847
848           Diag(CaseVals[i-1].second->getLHS()->getLocStart(),
849                diag::note_duplicate_case_prev);
850           // FIXME: We really want to remove the bogus case stmt from the
851           // substmt, but we have no way to do this right now.
852           CaseListIsErroneous = true;
853         }
854       }
855     }
856
857     // Detect duplicate case ranges, which usually don't exist at all in
858     // the first place.
859     if (!CaseRanges.empty()) {
860       // Sort all the case ranges by their low value so we can easily detect
861       // overlaps between ranges.
862       std::stable_sort(CaseRanges.begin(), CaseRanges.end());
863
864       // Scan the ranges, computing the high values and removing empty ranges.
865       std::vector<llvm::APSInt> HiVals;
866       for (unsigned i = 0, e = CaseRanges.size(); i != e; ++i) {
867         llvm::APSInt &LoVal = CaseRanges[i].first;
868         CaseStmt *CR = CaseRanges[i].second;
869         Expr *Hi = CR->getRHS();
870         llvm::APSInt HiVal;
871
872         if (getLangOpts().CPlusPlus11) {
873           // C++11 [stmt.switch]p2: the constant-expression shall be a converted
874           // constant expression of the promoted type of the switch condition.
875           ExprResult ConvHi =
876             CheckConvertedConstantExpression(Hi, CondType, HiVal,
877                                              CCEK_CaseValue);
878           if (ConvHi.isInvalid()) {
879             CaseListIsErroneous = true;
880             continue;
881           }
882           Hi = ConvHi.take();
883         } else {
884           HiVal = Hi->EvaluateKnownConstInt(Context);
885
886           // If the RHS is not the same type as the condition, insert an
887           // implicit cast.
888           Hi = DefaultLvalueConversion(Hi).take();
889           Hi = ImpCastExprToType(Hi, CondType, CK_IntegralCast).take();
890         }
891
892         // Convert the value to the same width/sign as the condition.
893         ConvertIntegerToTypeWarnOnOverflow(HiVal, CondWidth, CondIsSigned,
894                                            Hi->getLocStart(),
895                                            diag::warn_case_value_overflow);
896
897         CR->setRHS(Hi);
898
899         // If the low value is bigger than the high value, the case is empty.
900         if (LoVal > HiVal) {
901           Diag(CR->getLHS()->getLocStart(), diag::warn_case_empty_range)
902             << SourceRange(CR->getLHS()->getLocStart(),
903                            Hi->getLocEnd());
904           CaseRanges.erase(CaseRanges.begin()+i);
905           --i, --e;
906           continue;
907         }
908
909         if (ShouldCheckConstantCond &&
910             LoVal <= ConstantCondValue &&
911             ConstantCondValue <= HiVal)
912           ShouldCheckConstantCond = false;
913
914         HiVals.push_back(HiVal);
915       }
916
917       // Rescan the ranges, looking for overlap with singleton values and other
918       // ranges.  Since the range list is sorted, we only need to compare case
919       // ranges with their neighbors.
920       for (unsigned i = 0, e = CaseRanges.size(); i != e; ++i) {
921         llvm::APSInt &CRLo = CaseRanges[i].first;
922         llvm::APSInt &CRHi = HiVals[i];
923         CaseStmt *CR = CaseRanges[i].second;
924
925         // Check to see whether the case range overlaps with any
926         // singleton cases.
927         CaseStmt *OverlapStmt = 0;
928         llvm::APSInt OverlapVal(32);
929
930         // Find the smallest value >= the lower bound.  If I is in the
931         // case range, then we have overlap.
932         CaseValsTy::iterator I = std::lower_bound(CaseVals.begin(),
933                                                   CaseVals.end(), CRLo,
934                                                   CaseCompareFunctor());
935         if (I != CaseVals.end() && I->first < CRHi) {
936           OverlapVal  = I->first;   // Found overlap with scalar.
937           OverlapStmt = I->second;
938         }
939
940         // Find the smallest value bigger than the upper bound.
941         I = std::upper_bound(I, CaseVals.end(), CRHi, CaseCompareFunctor());
942         if (I != CaseVals.begin() && (I-1)->first >= CRLo) {
943           OverlapVal  = (I-1)->first;      // Found overlap with scalar.
944           OverlapStmt = (I-1)->second;
945         }
946
947         // Check to see if this case stmt overlaps with the subsequent
948         // case range.
949         if (i && CRLo <= HiVals[i-1]) {
950           OverlapVal  = HiVals[i-1];       // Found overlap with range.
951           OverlapStmt = CaseRanges[i-1].second;
952         }
953
954         if (OverlapStmt) {
955           // If we have a duplicate, report it.
956           Diag(CR->getLHS()->getLocStart(), diag::err_duplicate_case)
957             << OverlapVal.toString(10);
958           Diag(OverlapStmt->getLHS()->getLocStart(),
959                diag::note_duplicate_case_prev);
960           // FIXME: We really want to remove the bogus case stmt from the
961           // substmt, but we have no way to do this right now.
962           CaseListIsErroneous = true;
963         }
964       }
965     }
966
967     // Complain if we have a constant condition and we didn't find a match.
968     if (!CaseListIsErroneous && ShouldCheckConstantCond) {
969       // TODO: it would be nice if we printed enums as enums, chars as
970       // chars, etc.
971       Diag(CondExpr->getExprLoc(), diag::warn_missing_case_for_condition)
972         << ConstantCondValue.toString(10)
973         << CondExpr->getSourceRange();
974     }
975
976     // Check to see if switch is over an Enum and handles all of its
977     // values.  We only issue a warning if there is not 'default:', but
978     // we still do the analysis to preserve this information in the AST
979     // (which can be used by flow-based analyes).
980     //
981     const EnumType *ET = CondTypeBeforePromotion->getAs<EnumType>();
982
983     // If switch has default case, then ignore it.
984     if (!CaseListIsErroneous  && !HasConstantCond && ET) {
985       const EnumDecl *ED = ET->getDecl();
986       typedef SmallVector<std::pair<llvm::APSInt, EnumConstantDecl*>, 64>
987         EnumValsTy;
988       EnumValsTy EnumVals;
989
990       // Gather all enum values, set their type and sort them,
991       // allowing easier comparison with CaseVals.
992       for (EnumDecl::enumerator_iterator EDI = ED->enumerator_begin();
993            EDI != ED->enumerator_end(); ++EDI) {
994         llvm::APSInt Val = EDI->getInitVal();
995         AdjustAPSInt(Val, CondWidth, CondIsSigned);
996         EnumVals.push_back(std::make_pair(Val, *EDI));
997       }
998       std::stable_sort(EnumVals.begin(), EnumVals.end(), CmpEnumVals);
999       EnumValsTy::iterator EIend =
1000         std::unique(EnumVals.begin(), EnumVals.end(), EqEnumVals);
1001
1002       // See which case values aren't in enum.
1003       EnumValsTy::const_iterator EI = EnumVals.begin();
1004       for (CaseValsTy::const_iterator CI = CaseVals.begin();
1005            CI != CaseVals.end(); CI++) {
1006         while (EI != EIend && EI->first < CI->first)
1007           EI++;
1008         if (EI == EIend || EI->first > CI->first)
1009           Diag(CI->second->getLHS()->getExprLoc(), diag::warn_not_in_enum)
1010             << CondTypeBeforePromotion;
1011       }
1012       // See which of case ranges aren't in enum
1013       EI = EnumVals.begin();
1014       for (CaseRangesTy::const_iterator RI = CaseRanges.begin();
1015            RI != CaseRanges.end() && EI != EIend; RI++) {
1016         while (EI != EIend && EI->first < RI->first)
1017           EI++;
1018
1019         if (EI == EIend || EI->first != RI->first) {
1020           Diag(RI->second->getLHS()->getExprLoc(), diag::warn_not_in_enum)
1021             << CondTypeBeforePromotion;
1022         }
1023
1024         llvm::APSInt Hi =
1025           RI->second->getRHS()->EvaluateKnownConstInt(Context);
1026         AdjustAPSInt(Hi, CondWidth, CondIsSigned);
1027         while (EI != EIend && EI->first < Hi)
1028           EI++;
1029         if (EI == EIend || EI->first != Hi)
1030           Diag(RI->second->getRHS()->getExprLoc(), diag::warn_not_in_enum)
1031             << CondTypeBeforePromotion;
1032       }
1033
1034       // Check which enum vals aren't in switch
1035       CaseValsTy::const_iterator CI = CaseVals.begin();
1036       CaseRangesTy::const_iterator RI = CaseRanges.begin();
1037       bool hasCasesNotInSwitch = false;
1038
1039       SmallVector<DeclarationName,8> UnhandledNames;
1040
1041       for (EI = EnumVals.begin(); EI != EIend; EI++){
1042         // Drop unneeded case values
1043         llvm::APSInt CIVal;
1044         while (CI != CaseVals.end() && CI->first < EI->first)
1045           CI++;
1046
1047         if (CI != CaseVals.end() && CI->first == EI->first)
1048           continue;
1049
1050         // Drop unneeded case ranges
1051         for (; RI != CaseRanges.end(); RI++) {
1052           llvm::APSInt Hi =
1053             RI->second->getRHS()->EvaluateKnownConstInt(Context);
1054           AdjustAPSInt(Hi, CondWidth, CondIsSigned);
1055           if (EI->first <= Hi)
1056             break;
1057         }
1058
1059         if (RI == CaseRanges.end() || EI->first < RI->first) {
1060           hasCasesNotInSwitch = true;
1061           UnhandledNames.push_back(EI->second->getDeclName());
1062         }
1063       }
1064
1065       if (TheDefaultStmt && UnhandledNames.empty())
1066         Diag(TheDefaultStmt->getDefaultLoc(), diag::warn_unreachable_default);
1067
1068       // Produce a nice diagnostic if multiple values aren't handled.
1069       switch (UnhandledNames.size()) {
1070       case 0: break;
1071       case 1:
1072         Diag(CondExpr->getExprLoc(), TheDefaultStmt
1073           ? diag::warn_def_missing_case1 : diag::warn_missing_case1)
1074           << UnhandledNames[0];
1075         break;
1076       case 2:
1077         Diag(CondExpr->getExprLoc(), TheDefaultStmt
1078           ? diag::warn_def_missing_case2 : diag::warn_missing_case2)
1079           << UnhandledNames[0] << UnhandledNames[1];
1080         break;
1081       case 3:
1082         Diag(CondExpr->getExprLoc(), TheDefaultStmt
1083           ? diag::warn_def_missing_case3 : diag::warn_missing_case3)
1084           << UnhandledNames[0] << UnhandledNames[1] << UnhandledNames[2];
1085         break;
1086       default:
1087         Diag(CondExpr->getExprLoc(), TheDefaultStmt
1088           ? diag::warn_def_missing_cases : diag::warn_missing_cases)
1089           << (unsigned)UnhandledNames.size()
1090           << UnhandledNames[0] << UnhandledNames[1] << UnhandledNames[2];
1091         break;
1092       }
1093
1094       if (!hasCasesNotInSwitch)
1095         SS->setAllEnumCasesCovered();
1096     }
1097   }
1098
1099   DiagnoseEmptyStmtBody(CondExpr->getLocEnd(), BodyStmt,
1100                         diag::warn_empty_switch_body);
1101
1102   // FIXME: If the case list was broken is some way, we don't have a good system
1103   // to patch it up.  Instead, just return the whole substmt as broken.
1104   if (CaseListIsErroneous)
1105     return StmtError();
1106
1107   return Owned(SS);
1108 }
1109
1110 void
1111 Sema::DiagnoseAssignmentEnum(QualType DstType, QualType SrcType,
1112                              Expr *SrcExpr) {
1113   unsigned DIAG = diag::warn_not_in_enum_assignement;
1114   if (Diags.getDiagnosticLevel(DIAG, SrcExpr->getExprLoc())
1115       == DiagnosticsEngine::Ignored)
1116     return;
1117
1118   if (const EnumType *ET = DstType->getAs<EnumType>())
1119     if (!Context.hasSameType(SrcType, DstType) &&
1120         SrcType->isIntegerType()) {
1121       if (!SrcExpr->isTypeDependent() && !SrcExpr->isValueDependent() &&
1122           SrcExpr->isIntegerConstantExpr(Context)) {
1123         // Get the bitwidth of the enum value before promotions.
1124         unsigned DstWith = Context.getIntWidth(DstType);
1125         bool DstIsSigned = DstType->isSignedIntegerOrEnumerationType();
1126
1127         llvm::APSInt RhsVal = SrcExpr->EvaluateKnownConstInt(Context);
1128         const EnumDecl *ED = ET->getDecl();
1129         typedef SmallVector<std::pair<llvm::APSInt, EnumConstantDecl*>, 64>
1130         EnumValsTy;
1131         EnumValsTy EnumVals;
1132
1133         // Gather all enum values, set their type and sort them,
1134         // allowing easier comparison with rhs constant.
1135         for (EnumDecl::enumerator_iterator EDI = ED->enumerator_begin();
1136              EDI != ED->enumerator_end(); ++EDI) {
1137           llvm::APSInt Val = EDI->getInitVal();
1138           AdjustAPSInt(Val, DstWith, DstIsSigned);
1139           EnumVals.push_back(std::make_pair(Val, *EDI));
1140         }
1141         if (EnumVals.empty())
1142           return;
1143         std::stable_sort(EnumVals.begin(), EnumVals.end(), CmpEnumVals);
1144         EnumValsTy::iterator EIend =
1145         std::unique(EnumVals.begin(), EnumVals.end(), EqEnumVals);
1146
1147         // See which case values aren't in enum.
1148         EnumValsTy::const_iterator EI = EnumVals.begin();
1149         while (EI != EIend && EI->first < RhsVal)
1150           EI++;
1151         if (EI == EIend || EI->first != RhsVal) {
1152           Diag(SrcExpr->getExprLoc(), diag::warn_not_in_enum_assignement)
1153           << DstType;
1154         }
1155       }
1156     }
1157 }
1158
1159 StmtResult
1160 Sema::ActOnWhileStmt(SourceLocation WhileLoc, FullExprArg Cond,
1161                      Decl *CondVar, Stmt *Body) {
1162   ExprResult CondResult(Cond.release());
1163
1164   VarDecl *ConditionVar = 0;
1165   if (CondVar) {
1166     ConditionVar = cast<VarDecl>(CondVar);
1167     CondResult = CheckConditionVariable(ConditionVar, WhileLoc, true);
1168     if (CondResult.isInvalid())
1169       return StmtError();
1170   }
1171   Expr *ConditionExpr = CondResult.take();
1172   if (!ConditionExpr)
1173     return StmtError();
1174
1175   DiagnoseUnusedExprResult(Body);
1176
1177   if (isa<NullStmt>(Body))
1178     getCurCompoundScope().setHasEmptyLoopBodies();
1179
1180   return Owned(new (Context) WhileStmt(Context, ConditionVar, ConditionExpr,
1181                                        Body, WhileLoc));
1182 }
1183
1184 StmtResult
1185 Sema::ActOnDoStmt(SourceLocation DoLoc, Stmt *Body,
1186                   SourceLocation WhileLoc, SourceLocation CondLParen,
1187                   Expr *Cond, SourceLocation CondRParen) {
1188   assert(Cond && "ActOnDoStmt(): missing expression");
1189
1190   ExprResult CondResult = CheckBooleanCondition(Cond, DoLoc);
1191   if (CondResult.isInvalid())
1192     return StmtError();
1193   Cond = CondResult.take();
1194
1195   CondResult = ActOnFinishFullExpr(Cond, DoLoc);
1196   if (CondResult.isInvalid())
1197     return StmtError();
1198   Cond = CondResult.take();
1199
1200   DiagnoseUnusedExprResult(Body);
1201
1202   return Owned(new (Context) DoStmt(Body, Cond, DoLoc, WhileLoc, CondRParen));
1203 }
1204
1205 namespace {
1206   // This visitor will traverse a conditional statement and store all
1207   // the evaluated decls into a vector.  Simple is set to true if none
1208   // of the excluded constructs are used.
1209   class DeclExtractor : public EvaluatedExprVisitor<DeclExtractor> {
1210     llvm::SmallPtrSet<VarDecl*, 8> &Decls;
1211     SmallVector<SourceRange, 10> &Ranges;
1212     bool Simple;
1213 public:
1214   typedef EvaluatedExprVisitor<DeclExtractor> Inherited;
1215
1216   DeclExtractor(Sema &S, llvm::SmallPtrSet<VarDecl*, 8> &Decls,
1217                 SmallVector<SourceRange, 10> &Ranges) :
1218       Inherited(S.Context),
1219       Decls(Decls),
1220       Ranges(Ranges),
1221       Simple(true) {}
1222
1223   bool isSimple() { return Simple; }
1224
1225   // Replaces the method in EvaluatedExprVisitor.
1226   void VisitMemberExpr(MemberExpr* E) {
1227     Simple = false;
1228   }
1229
1230   // Any Stmt not whitelisted will cause the condition to be marked complex.
1231   void VisitStmt(Stmt *S) {
1232     Simple = false;
1233   }
1234
1235   void VisitBinaryOperator(BinaryOperator *E) {
1236     Visit(E->getLHS());
1237     Visit(E->getRHS());
1238   }
1239
1240   void VisitCastExpr(CastExpr *E) {
1241     Visit(E->getSubExpr());
1242   }
1243
1244   void VisitUnaryOperator(UnaryOperator *E) {
1245     // Skip checking conditionals with derefernces.
1246     if (E->getOpcode() == UO_Deref)
1247       Simple = false;
1248     else
1249       Visit(E->getSubExpr());
1250   }
1251
1252   void VisitConditionalOperator(ConditionalOperator *E) {
1253     Visit(E->getCond());
1254     Visit(E->getTrueExpr());
1255     Visit(E->getFalseExpr());
1256   }
1257
1258   void VisitParenExpr(ParenExpr *E) {
1259     Visit(E->getSubExpr());
1260   }
1261
1262   void VisitBinaryConditionalOperator(BinaryConditionalOperator *E) {
1263     Visit(E->getOpaqueValue()->getSourceExpr());
1264     Visit(E->getFalseExpr());
1265   }
1266
1267   void VisitIntegerLiteral(IntegerLiteral *E) { }
1268   void VisitFloatingLiteral(FloatingLiteral *E) { }
1269   void VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E) { }
1270   void VisitCharacterLiteral(CharacterLiteral *E) { }
1271   void VisitGNUNullExpr(GNUNullExpr *E) { }
1272   void VisitImaginaryLiteral(ImaginaryLiteral *E) { }
1273
1274   void VisitDeclRefExpr(DeclRefExpr *E) {
1275     VarDecl *VD = dyn_cast<VarDecl>(E->getDecl());
1276     if (!VD) return;
1277
1278     Ranges.push_back(E->getSourceRange());
1279
1280     Decls.insert(VD);
1281   }
1282
1283   }; // end class DeclExtractor
1284
1285   // DeclMatcher checks to see if the decls are used in a non-evauluated
1286   // context.
1287   class DeclMatcher : public EvaluatedExprVisitor<DeclMatcher> {
1288     llvm::SmallPtrSet<VarDecl*, 8> &Decls;
1289     bool FoundDecl;
1290
1291 public:
1292   typedef EvaluatedExprVisitor<DeclMatcher> Inherited;
1293
1294   DeclMatcher(Sema &S, llvm::SmallPtrSet<VarDecl*, 8> &Decls, Stmt *Statement) :
1295       Inherited(S.Context), Decls(Decls), FoundDecl(false) {
1296     if (!Statement) return;
1297
1298     Visit(Statement);
1299   }
1300
1301   void VisitReturnStmt(ReturnStmt *S) {
1302     FoundDecl = true;
1303   }
1304
1305   void VisitBreakStmt(BreakStmt *S) {
1306     FoundDecl = true;
1307   }
1308
1309   void VisitGotoStmt(GotoStmt *S) {
1310     FoundDecl = true;
1311   }
1312
1313   void VisitCastExpr(CastExpr *E) {
1314     if (E->getCastKind() == CK_LValueToRValue)
1315       CheckLValueToRValueCast(E->getSubExpr());
1316     else
1317       Visit(E->getSubExpr());
1318   }
1319
1320   void CheckLValueToRValueCast(Expr *E) {
1321     E = E->IgnoreParenImpCasts();
1322
1323     if (isa<DeclRefExpr>(E)) {
1324       return;
1325     }
1326
1327     if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) {
1328       Visit(CO->getCond());
1329       CheckLValueToRValueCast(CO->getTrueExpr());
1330       CheckLValueToRValueCast(CO->getFalseExpr());
1331       return;
1332     }
1333
1334     if (BinaryConditionalOperator *BCO =
1335             dyn_cast<BinaryConditionalOperator>(E)) {
1336       CheckLValueToRValueCast(BCO->getOpaqueValue()->getSourceExpr());
1337       CheckLValueToRValueCast(BCO->getFalseExpr());
1338       return;
1339     }
1340
1341     Visit(E);
1342   }
1343
1344   void VisitDeclRefExpr(DeclRefExpr *E) {
1345     if (VarDecl *VD = dyn_cast<VarDecl>(E->getDecl()))
1346       if (Decls.count(VD))
1347         FoundDecl = true;
1348   }
1349
1350   bool FoundDeclInUse() { return FoundDecl; }
1351
1352   };  // end class DeclMatcher
1353
1354   void CheckForLoopConditionalStatement(Sema &S, Expr *Second,
1355                                         Expr *Third, Stmt *Body) {
1356     // Condition is empty
1357     if (!Second) return;
1358
1359     if (S.Diags.getDiagnosticLevel(diag::warn_variables_not_in_loop_body,
1360                                    Second->getLocStart())
1361         == DiagnosticsEngine::Ignored)
1362       return;
1363
1364     PartialDiagnostic PDiag = S.PDiag(diag::warn_variables_not_in_loop_body);
1365     llvm::SmallPtrSet<VarDecl*, 8> Decls;
1366     SmallVector<SourceRange, 10> Ranges;
1367     DeclExtractor DE(S, Decls, Ranges);
1368     DE.Visit(Second);
1369
1370     // Don't analyze complex conditionals.
1371     if (!DE.isSimple()) return;
1372
1373     // No decls found.
1374     if (Decls.size() == 0) return;
1375
1376     // Don't warn on volatile, static, or global variables.
1377     for (llvm::SmallPtrSet<VarDecl*, 8>::iterator I = Decls.begin(),
1378                                                   E = Decls.end();
1379          I != E; ++I)
1380       if ((*I)->getType().isVolatileQualified() ||
1381           (*I)->hasGlobalStorage()) return;
1382
1383     if (DeclMatcher(S, Decls, Second).FoundDeclInUse() ||
1384         DeclMatcher(S, Decls, Third).FoundDeclInUse() ||
1385         DeclMatcher(S, Decls, Body).FoundDeclInUse())
1386       return;
1387
1388     // Load decl names into diagnostic.
1389     if (Decls.size() > 4)
1390       PDiag << 0;
1391     else {
1392       PDiag << Decls.size();
1393       for (llvm::SmallPtrSet<VarDecl*, 8>::iterator I = Decls.begin(),
1394                                                     E = Decls.end();
1395            I != E; ++I)
1396         PDiag << (*I)->getDeclName();
1397     }
1398
1399     // Load SourceRanges into diagnostic if there is room.
1400     // Otherwise, load the SourceRange of the conditional expression.
1401     if (Ranges.size() <= PartialDiagnostic::MaxArguments)
1402       for (SmallVector<SourceRange, 10>::iterator I = Ranges.begin(),
1403                                                   E = Ranges.end();
1404            I != E; ++I)
1405         PDiag << *I;
1406     else
1407       PDiag << Second->getSourceRange();
1408
1409     S.Diag(Ranges.begin()->getBegin(), PDiag);
1410   }
1411
1412 } // end namespace
1413
1414 StmtResult
1415 Sema::ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc,
1416                    Stmt *First, FullExprArg second, Decl *secondVar,
1417                    FullExprArg third,
1418                    SourceLocation RParenLoc, Stmt *Body) {
1419   if (!getLangOpts().CPlusPlus) {
1420     if (DeclStmt *DS = dyn_cast_or_null<DeclStmt>(First)) {
1421       // C99 6.8.5p3: The declaration part of a 'for' statement shall only
1422       // declare identifiers for objects having storage class 'auto' or
1423       // 'register'.
1424       for (DeclStmt::decl_iterator DI=DS->decl_begin(), DE=DS->decl_end();
1425            DI!=DE; ++DI) {
1426         VarDecl *VD = dyn_cast<VarDecl>(*DI);
1427         if (VD && VD->isLocalVarDecl() && !VD->hasLocalStorage())
1428           VD = 0;
1429         if (VD == 0)
1430           Diag((*DI)->getLocation(), diag::err_non_variable_decl_in_for);
1431         // FIXME: mark decl erroneous!
1432       }
1433     }
1434   }
1435
1436   CheckForLoopConditionalStatement(*this, second.get(), third.get(), Body);
1437
1438   ExprResult SecondResult(second.release());
1439   VarDecl *ConditionVar = 0;
1440   if (secondVar) {
1441     ConditionVar = cast<VarDecl>(secondVar);
1442     SecondResult = CheckConditionVariable(ConditionVar, ForLoc, true);
1443     if (SecondResult.isInvalid())
1444       return StmtError();
1445   }
1446
1447   Expr *Third  = third.release().takeAs<Expr>();
1448
1449   DiagnoseUnusedExprResult(First);
1450   DiagnoseUnusedExprResult(Third);
1451   DiagnoseUnusedExprResult(Body);
1452
1453   if (isa<NullStmt>(Body))
1454     getCurCompoundScope().setHasEmptyLoopBodies();
1455
1456   return Owned(new (Context) ForStmt(Context, First,
1457                                      SecondResult.take(), ConditionVar,
1458                                      Third, Body, ForLoc, LParenLoc,
1459                                      RParenLoc));
1460 }
1461
1462 /// In an Objective C collection iteration statement:
1463 ///   for (x in y)
1464 /// x can be an arbitrary l-value expression.  Bind it up as a
1465 /// full-expression.
1466 StmtResult Sema::ActOnForEachLValueExpr(Expr *E) {
1467   // Reduce placeholder expressions here.  Note that this rejects the
1468   // use of pseudo-object l-values in this position.
1469   ExprResult result = CheckPlaceholderExpr(E);
1470   if (result.isInvalid()) return StmtError();
1471   E = result.take();
1472
1473   ExprResult FullExpr = ActOnFinishFullExpr(E);
1474   if (FullExpr.isInvalid())
1475     return StmtError();
1476   return StmtResult(static_cast<Stmt*>(FullExpr.take()));
1477 }
1478
1479 ExprResult
1480 Sema::CheckObjCForCollectionOperand(SourceLocation forLoc, Expr *collection) {
1481   if (!collection)
1482     return ExprError();
1483
1484   // Bail out early if we've got a type-dependent expression.
1485   if (collection->isTypeDependent()) return Owned(collection);
1486
1487   // Perform normal l-value conversion.
1488   ExprResult result = DefaultFunctionArrayLvalueConversion(collection);
1489   if (result.isInvalid())
1490     return ExprError();
1491   collection = result.take();
1492
1493   // The operand needs to have object-pointer type.
1494   // TODO: should we do a contextual conversion?
1495   const ObjCObjectPointerType *pointerType =
1496     collection->getType()->getAs<ObjCObjectPointerType>();
1497   if (!pointerType)
1498     return Diag(forLoc, diag::err_collection_expr_type)
1499              << collection->getType() << collection->getSourceRange();
1500
1501   // Check that the operand provides
1502   //   - countByEnumeratingWithState:objects:count:
1503   const ObjCObjectType *objectType = pointerType->getObjectType();
1504   ObjCInterfaceDecl *iface = objectType->getInterface();
1505
1506   // If we have a forward-declared type, we can't do this check.
1507   // Under ARC, it is an error not to have a forward-declared class.
1508   if (iface &&
1509       RequireCompleteType(forLoc, QualType(objectType, 0),
1510                           getLangOpts().ObjCAutoRefCount
1511                             ? diag::err_arc_collection_forward
1512                             : 0,
1513                           collection)) {
1514     // Otherwise, if we have any useful type information, check that
1515     // the type declares the appropriate method.
1516   } else if (iface || !objectType->qual_empty()) {
1517     IdentifierInfo *selectorIdents[] = {
1518       &Context.Idents.get("countByEnumeratingWithState"),
1519       &Context.Idents.get("objects"),
1520       &Context.Idents.get("count")
1521     };
1522     Selector selector = Context.Selectors.getSelector(3, &selectorIdents[0]);
1523
1524     ObjCMethodDecl *method = 0;
1525
1526     // If there's an interface, look in both the public and private APIs.
1527     if (iface) {
1528       method = iface->lookupInstanceMethod(selector);
1529       if (!method) method = iface->lookupPrivateMethod(selector);
1530     }
1531
1532     // Also check protocol qualifiers.
1533     if (!method)
1534       method = LookupMethodInQualifiedType(selector, pointerType,
1535                                            /*instance*/ true);
1536
1537     // If we didn't find it anywhere, give up.
1538     if (!method) {
1539       Diag(forLoc, diag::warn_collection_expr_type)
1540         << collection->getType() << selector << collection->getSourceRange();
1541     }
1542
1543     // TODO: check for an incompatible signature?
1544   }
1545
1546   // Wrap up any cleanups in the expression.
1547   return Owned(collection);
1548 }
1549
1550 StmtResult
1551 Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc,
1552                                  Stmt *First, Expr *collection,
1553                                  SourceLocation RParenLoc) {
1554
1555   ExprResult CollectionExprResult =
1556     CheckObjCForCollectionOperand(ForLoc, collection);
1557
1558   if (First) {
1559     QualType FirstType;
1560     if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {
1561       if (!DS->isSingleDecl())
1562         return StmtError(Diag((*DS->decl_begin())->getLocation(),
1563                          diag::err_toomany_element_decls));
1564
1565       VarDecl *D = cast<VarDecl>(DS->getSingleDecl());
1566       FirstType = D->getType();
1567       // C99 6.8.5p3: The declaration part of a 'for' statement shall only
1568       // declare identifiers for objects having storage class 'auto' or
1569       // 'register'.
1570       if (!D->hasLocalStorage())
1571         return StmtError(Diag(D->getLocation(),
1572                               diag::err_non_variable_decl_in_for));
1573     } else {
1574       Expr *FirstE = cast<Expr>(First);
1575       if (!FirstE->isTypeDependent() && !FirstE->isLValue())
1576         return StmtError(Diag(First->getLocStart(),
1577                    diag::err_selector_element_not_lvalue)
1578           << First->getSourceRange());
1579
1580       FirstType = static_cast<Expr*>(First)->getType();
1581     }
1582     if (!FirstType->isDependentType() &&
1583         !FirstType->isObjCObjectPointerType() &&
1584         !FirstType->isBlockPointerType())
1585         return StmtError(Diag(ForLoc, diag::err_selector_element_type)
1586                            << FirstType << First->getSourceRange());
1587   }
1588
1589   if (CollectionExprResult.isInvalid())
1590     return StmtError();
1591
1592   CollectionExprResult = ActOnFinishFullExpr(CollectionExprResult.take());
1593   if (CollectionExprResult.isInvalid())
1594     return StmtError();
1595
1596   return Owned(new (Context) ObjCForCollectionStmt(First,
1597                                                    CollectionExprResult.take(), 0,
1598                                                    ForLoc, RParenLoc));
1599 }
1600
1601 /// Finish building a variable declaration for a for-range statement.
1602 /// \return true if an error occurs.
1603 static bool FinishForRangeVarDecl(Sema &SemaRef, VarDecl *Decl, Expr *Init,
1604                                   SourceLocation Loc, int diag) {
1605   // Deduce the type for the iterator variable now rather than leaving it to
1606   // AddInitializerToDecl, so we can produce a more suitable diagnostic.
1607   TypeSourceInfo *InitTSI = 0;
1608   if ((!isa<InitListExpr>(Init) && Init->getType()->isVoidType()) ||
1609       SemaRef.DeduceAutoType(Decl->getTypeSourceInfo(), Init, InitTSI) ==
1610           Sema::DAR_Failed)
1611     SemaRef.Diag(Loc, diag) << Init->getType();
1612   if (!InitTSI) {
1613     Decl->setInvalidDecl();
1614     return true;
1615   }
1616   Decl->setTypeSourceInfo(InitTSI);
1617   Decl->setType(InitTSI->getType());
1618
1619   // In ARC, infer lifetime.
1620   // FIXME: ARC may want to turn this into 'const __unsafe_unretained' if
1621   // we're doing the equivalent of fast iteration.
1622   if (SemaRef.getLangOpts().ObjCAutoRefCount &&
1623       SemaRef.inferObjCARCLifetime(Decl))
1624     Decl->setInvalidDecl();
1625
1626   SemaRef.AddInitializerToDecl(Decl, Init, /*DirectInit=*/false,
1627                                /*TypeMayContainAuto=*/false);
1628   SemaRef.FinalizeDeclaration(Decl);
1629   SemaRef.CurContext->addHiddenDecl(Decl);
1630   return false;
1631 }
1632
1633 namespace {
1634
1635 /// Produce a note indicating which begin/end function was implicitly called
1636 /// by a C++11 for-range statement. This is often not obvious from the code,
1637 /// nor from the diagnostics produced when analysing the implicit expressions
1638 /// required in a for-range statement.
1639 void NoteForRangeBeginEndFunction(Sema &SemaRef, Expr *E,
1640                                   Sema::BeginEndFunction BEF) {
1641   CallExpr *CE = dyn_cast<CallExpr>(E);
1642   if (!CE)
1643     return;
1644   FunctionDecl *D = dyn_cast<FunctionDecl>(CE->getCalleeDecl());
1645   if (!D)
1646     return;
1647   SourceLocation Loc = D->getLocation();
1648
1649   std::string Description;
1650   bool IsTemplate = false;
1651   if (FunctionTemplateDecl *FunTmpl = D->getPrimaryTemplate()) {
1652     Description = SemaRef.getTemplateArgumentBindingsText(
1653       FunTmpl->getTemplateParameters(), *D->getTemplateSpecializationArgs());
1654     IsTemplate = true;
1655   }
1656
1657   SemaRef.Diag(Loc, diag::note_for_range_begin_end)
1658     << BEF << IsTemplate << Description << E->getType();
1659 }
1660
1661 /// Build a variable declaration for a for-range statement.
1662 VarDecl *BuildForRangeVarDecl(Sema &SemaRef, SourceLocation Loc,
1663                               QualType Type, const char *Name) {
1664   DeclContext *DC = SemaRef.CurContext;
1665   IdentifierInfo *II = &SemaRef.PP.getIdentifierTable().get(Name);
1666   TypeSourceInfo *TInfo = SemaRef.Context.getTrivialTypeSourceInfo(Type, Loc);
1667   VarDecl *Decl = VarDecl::Create(SemaRef.Context, DC, Loc, Loc, II, Type,
1668                                   TInfo, SC_None);
1669   Decl->setImplicit();
1670   return Decl;
1671 }
1672
1673 }
1674
1675 static bool ObjCEnumerationCollection(Expr *Collection) {
1676   return !Collection->isTypeDependent()
1677           && Collection->getType()->getAs<ObjCObjectPointerType>() != 0;
1678 }
1679
1680 /// ActOnCXXForRangeStmt - Check and build a C++11 for-range statement.
1681 ///
1682 /// C++11 [stmt.ranged]:
1683 ///   A range-based for statement is equivalent to
1684 ///
1685 ///   {
1686 ///     auto && __range = range-init;
1687 ///     for ( auto __begin = begin-expr,
1688 ///           __end = end-expr;
1689 ///           __begin != __end;
1690 ///           ++__begin ) {
1691 ///       for-range-declaration = *__begin;
1692 ///       statement
1693 ///     }
1694 ///   }
1695 ///
1696 /// The body of the loop is not available yet, since it cannot be analysed until
1697 /// we have determined the type of the for-range-declaration.
1698 StmtResult
1699 Sema::ActOnCXXForRangeStmt(SourceLocation ForLoc,
1700                            Stmt *First, SourceLocation ColonLoc, Expr *Range,
1701                            SourceLocation RParenLoc, BuildForRangeKind Kind) {
1702   if (!First || !Range)
1703     return StmtError();
1704
1705   if (ObjCEnumerationCollection(Range))
1706     return ActOnObjCForCollectionStmt(ForLoc, First, Range, RParenLoc);
1707
1708   DeclStmt *DS = dyn_cast<DeclStmt>(First);
1709   assert(DS && "first part of for range not a decl stmt");
1710
1711   if (!DS->isSingleDecl()) {
1712     Diag(DS->getStartLoc(), diag::err_type_defined_in_for_range);
1713     return StmtError();
1714   }
1715   if (DS->getSingleDecl()->isInvalidDecl())
1716     return StmtError();
1717
1718   if (DiagnoseUnexpandedParameterPack(Range, UPPC_Expression))
1719     return StmtError();
1720
1721   // Build  auto && __range = range-init
1722   SourceLocation RangeLoc = Range->getLocStart();
1723   VarDecl *RangeVar = BuildForRangeVarDecl(*this, RangeLoc,
1724                                            Context.getAutoRRefDeductType(),
1725                                            "__range");
1726   if (FinishForRangeVarDecl(*this, RangeVar, Range, RangeLoc,
1727                             diag::err_for_range_deduction_failure))
1728     return StmtError();
1729
1730   // Claim the type doesn't contain auto: we've already done the checking.
1731   DeclGroupPtrTy RangeGroup =
1732     BuildDeclaratorGroup((Decl**)&RangeVar, 1, /*TypeMayContainAuto=*/false);
1733   StmtResult RangeDecl = ActOnDeclStmt(RangeGroup, RangeLoc, RangeLoc);
1734   if (RangeDecl.isInvalid())
1735     return StmtError();
1736
1737   return BuildCXXForRangeStmt(ForLoc, ColonLoc, RangeDecl.get(),
1738                               /*BeginEndDecl=*/0, /*Cond=*/0, /*Inc=*/0, DS,
1739                               RParenLoc, Kind);
1740 }
1741
1742 /// \brief Create the initialization, compare, and increment steps for
1743 /// the range-based for loop expression.
1744 /// This function does not handle array-based for loops,
1745 /// which are created in Sema::BuildCXXForRangeStmt.
1746 ///
1747 /// \returns a ForRangeStatus indicating success or what kind of error occurred.
1748 /// BeginExpr and EndExpr are set and FRS_Success is returned on success;
1749 /// CandidateSet and BEF are set and some non-success value is returned on
1750 /// failure.
1751 static Sema::ForRangeStatus BuildNonArrayForRange(Sema &SemaRef, Scope *S,
1752                                             Expr *BeginRange, Expr *EndRange,
1753                                             QualType RangeType,
1754                                             VarDecl *BeginVar,
1755                                             VarDecl *EndVar,
1756                                             SourceLocation ColonLoc,
1757                                             OverloadCandidateSet *CandidateSet,
1758                                             ExprResult *BeginExpr,
1759                                             ExprResult *EndExpr,
1760                                             Sema::BeginEndFunction *BEF) {
1761   DeclarationNameInfo BeginNameInfo(
1762       &SemaRef.PP.getIdentifierTable().get("begin"), ColonLoc);
1763   DeclarationNameInfo EndNameInfo(&SemaRef.PP.getIdentifierTable().get("end"),
1764                                   ColonLoc);
1765
1766   LookupResult BeginMemberLookup(SemaRef, BeginNameInfo,
1767                                  Sema::LookupMemberName);
1768   LookupResult EndMemberLookup(SemaRef, EndNameInfo, Sema::LookupMemberName);
1769
1770   if (CXXRecordDecl *D = RangeType->getAsCXXRecordDecl()) {
1771     // - if _RangeT is a class type, the unqualified-ids begin and end are
1772     //   looked up in the scope of class _RangeT as if by class member access
1773     //   lookup (3.4.5), and if either (or both) finds at least one
1774     //   declaration, begin-expr and end-expr are __range.begin() and
1775     //   __range.end(), respectively;
1776     SemaRef.LookupQualifiedName(BeginMemberLookup, D);
1777     SemaRef.LookupQualifiedName(EndMemberLookup, D);
1778
1779     if (BeginMemberLookup.empty() != EndMemberLookup.empty()) {
1780       SourceLocation RangeLoc = BeginVar->getLocation();
1781       *BEF = BeginMemberLookup.empty() ? Sema::BEF_end : Sema::BEF_begin;
1782
1783       SemaRef.Diag(RangeLoc, diag::err_for_range_member_begin_end_mismatch)
1784           << RangeLoc << BeginRange->getType() << *BEF;
1785       return Sema::FRS_DiagnosticIssued;
1786     }
1787   } else {
1788     // - otherwise, begin-expr and end-expr are begin(__range) and
1789     //   end(__range), respectively, where begin and end are looked up with
1790     //   argument-dependent lookup (3.4.2). For the purposes of this name
1791     //   lookup, namespace std is an associated namespace.
1792
1793   }
1794
1795   *BEF = Sema::BEF_begin;
1796   Sema::ForRangeStatus RangeStatus =
1797       SemaRef.BuildForRangeBeginEndCall(S, ColonLoc, ColonLoc, BeginVar,
1798                                         Sema::BEF_begin, BeginNameInfo,
1799                                         BeginMemberLookup, CandidateSet,
1800                                         BeginRange, BeginExpr);
1801
1802   if (RangeStatus != Sema::FRS_Success)
1803     return RangeStatus;
1804   if (FinishForRangeVarDecl(SemaRef, BeginVar, BeginExpr->get(), ColonLoc,
1805                             diag::err_for_range_iter_deduction_failure)) {
1806     NoteForRangeBeginEndFunction(SemaRef, BeginExpr->get(), *BEF);
1807     return Sema::FRS_DiagnosticIssued;
1808   }
1809
1810   *BEF = Sema::BEF_end;
1811   RangeStatus =
1812       SemaRef.BuildForRangeBeginEndCall(S, ColonLoc, ColonLoc, EndVar,
1813                                         Sema::BEF_end, EndNameInfo,
1814                                         EndMemberLookup, CandidateSet,
1815                                         EndRange, EndExpr);
1816   if (RangeStatus != Sema::FRS_Success)
1817     return RangeStatus;
1818   if (FinishForRangeVarDecl(SemaRef, EndVar, EndExpr->get(), ColonLoc,
1819                             diag::err_for_range_iter_deduction_failure)) {
1820     NoteForRangeBeginEndFunction(SemaRef, EndExpr->get(), *BEF);
1821     return Sema::FRS_DiagnosticIssued;
1822   }
1823   return Sema::FRS_Success;
1824 }
1825
1826 /// Speculatively attempt to dereference an invalid range expression.
1827 /// If the attempt fails, this function will return a valid, null StmtResult
1828 /// and emit no diagnostics.
1829 static StmtResult RebuildForRangeWithDereference(Sema &SemaRef, Scope *S,
1830                                                  SourceLocation ForLoc,
1831                                                  Stmt *LoopVarDecl,
1832                                                  SourceLocation ColonLoc,
1833                                                  Expr *Range,
1834                                                  SourceLocation RangeLoc,
1835                                                  SourceLocation RParenLoc) {
1836   // Determine whether we can rebuild the for-range statement with a
1837   // dereferenced range expression.
1838   ExprResult AdjustedRange;
1839   {
1840     Sema::SFINAETrap Trap(SemaRef);
1841
1842     AdjustedRange = SemaRef.BuildUnaryOp(S, RangeLoc, UO_Deref, Range);
1843     if (AdjustedRange.isInvalid())
1844       return StmtResult();
1845
1846     StmtResult SR =
1847       SemaRef.ActOnCXXForRangeStmt(ForLoc, LoopVarDecl, ColonLoc,
1848                                    AdjustedRange.get(), RParenLoc,
1849                                    Sema::BFRK_Check);
1850     if (SR.isInvalid())
1851       return StmtResult();
1852   }
1853
1854   // The attempt to dereference worked well enough that it could produce a valid
1855   // loop. Produce a fixit, and rebuild the loop with diagnostics enabled, in
1856   // case there are any other (non-fatal) problems with it.
1857   SemaRef.Diag(RangeLoc, diag::err_for_range_dereference)
1858     << Range->getType() << FixItHint::CreateInsertion(RangeLoc, "*");
1859   return SemaRef.ActOnCXXForRangeStmt(ForLoc, LoopVarDecl, ColonLoc,
1860                                       AdjustedRange.get(), RParenLoc,
1861                                       Sema::BFRK_Rebuild);
1862 }
1863
1864 /// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.
1865 StmtResult
1866 Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation ColonLoc,
1867                            Stmt *RangeDecl, Stmt *BeginEnd, Expr *Cond,
1868                            Expr *Inc, Stmt *LoopVarDecl,
1869                            SourceLocation RParenLoc, BuildForRangeKind Kind) {
1870   Scope *S = getCurScope();
1871
1872   DeclStmt *RangeDS = cast<DeclStmt>(RangeDecl);
1873   VarDecl *RangeVar = cast<VarDecl>(RangeDS->getSingleDecl());
1874   QualType RangeVarType = RangeVar->getType();
1875
1876   DeclStmt *LoopVarDS = cast<DeclStmt>(LoopVarDecl);
1877   VarDecl *LoopVar = cast<VarDecl>(LoopVarDS->getSingleDecl());
1878
1879   StmtResult BeginEndDecl = BeginEnd;
1880   ExprResult NotEqExpr = Cond, IncrExpr = Inc;
1881
1882   if (!BeginEndDecl.get() && !RangeVarType->isDependentType()) {
1883     SourceLocation RangeLoc = RangeVar->getLocation();
1884
1885     const QualType RangeVarNonRefType = RangeVarType.getNonReferenceType();
1886
1887     ExprResult BeginRangeRef = BuildDeclRefExpr(RangeVar, RangeVarNonRefType,
1888                                                 VK_LValue, ColonLoc);
1889     if (BeginRangeRef.isInvalid())
1890       return StmtError();
1891
1892     ExprResult EndRangeRef = BuildDeclRefExpr(RangeVar, RangeVarNonRefType,
1893                                               VK_LValue, ColonLoc);
1894     if (EndRangeRef.isInvalid())
1895       return StmtError();
1896
1897     QualType AutoType = Context.getAutoDeductType();
1898     Expr *Range = RangeVar->getInit();
1899     if (!Range)
1900       return StmtError();
1901     QualType RangeType = Range->getType();
1902
1903     if (RequireCompleteType(RangeLoc, RangeType,
1904                             diag::err_for_range_incomplete_type))
1905       return StmtError();
1906
1907     // Build auto __begin = begin-expr, __end = end-expr.
1908     VarDecl *BeginVar = BuildForRangeVarDecl(*this, ColonLoc, AutoType,
1909                                              "__begin");
1910     VarDecl *EndVar = BuildForRangeVarDecl(*this, ColonLoc, AutoType,
1911                                            "__end");
1912
1913     // Build begin-expr and end-expr and attach to __begin and __end variables.
1914     ExprResult BeginExpr, EndExpr;
1915     if (const ArrayType *UnqAT = RangeType->getAsArrayTypeUnsafe()) {
1916       // - if _RangeT is an array type, begin-expr and end-expr are __range and
1917       //   __range + __bound, respectively, where __bound is the array bound. If
1918       //   _RangeT is an array of unknown size or an array of incomplete type,
1919       //   the program is ill-formed;
1920
1921       // begin-expr is __range.
1922       BeginExpr = BeginRangeRef;
1923       if (FinishForRangeVarDecl(*this, BeginVar, BeginRangeRef.get(), ColonLoc,
1924                                 diag::err_for_range_iter_deduction_failure)) {
1925         NoteForRangeBeginEndFunction(*this, BeginExpr.get(), BEF_begin);
1926         return StmtError();
1927       }
1928
1929       // Find the array bound.
1930       ExprResult BoundExpr;
1931       if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(UnqAT))
1932         BoundExpr = Owned(IntegerLiteral::Create(Context, CAT->getSize(),
1933                                                  Context.getPointerDiffType(),
1934                                                  RangeLoc));
1935       else if (const VariableArrayType *VAT =
1936                dyn_cast<VariableArrayType>(UnqAT))
1937         BoundExpr = VAT->getSizeExpr();
1938       else {
1939         // Can't be a DependentSizedArrayType or an IncompleteArrayType since
1940         // UnqAT is not incomplete and Range is not type-dependent.
1941         llvm_unreachable("Unexpected array type in for-range");
1942       }
1943
1944       // end-expr is __range + __bound.
1945       EndExpr = ActOnBinOp(S, ColonLoc, tok::plus, EndRangeRef.get(),
1946                            BoundExpr.get());
1947       if (EndExpr.isInvalid())
1948         return StmtError();
1949       if (FinishForRangeVarDecl(*this, EndVar, EndExpr.get(), ColonLoc,
1950                                 diag::err_for_range_iter_deduction_failure)) {
1951         NoteForRangeBeginEndFunction(*this, EndExpr.get(), BEF_end);
1952         return StmtError();
1953       }
1954     } else {
1955       OverloadCandidateSet CandidateSet(RangeLoc);
1956       Sema::BeginEndFunction BEFFailure;
1957       ForRangeStatus RangeStatus =
1958           BuildNonArrayForRange(*this, S, BeginRangeRef.get(),
1959                                 EndRangeRef.get(), RangeType,
1960                                 BeginVar, EndVar, ColonLoc, &CandidateSet,
1961                                 &BeginExpr, &EndExpr, &BEFFailure);
1962
1963       // If building the range failed, try dereferencing the range expression
1964       // unless a diagnostic was issued or the end function is problematic.
1965       if (Kind == BFRK_Build && RangeStatus == FRS_NoViableFunction &&
1966           BEFFailure == BEF_begin) {
1967         StmtResult SR = RebuildForRangeWithDereference(*this, S, ForLoc,
1968                                                        LoopVarDecl, ColonLoc,
1969                                                        Range, RangeLoc,
1970                                                        RParenLoc);
1971         if (SR.isInvalid() || SR.isUsable())
1972           return SR;
1973       }
1974
1975       // Otherwise, emit diagnostics if we haven't already.
1976       if (RangeStatus == FRS_NoViableFunction) {
1977         Expr *Range = BEFFailure ? EndRangeRef.get() : BeginRangeRef.get();
1978         Diag(Range->getLocStart(), diag::err_for_range_invalid)
1979             << RangeLoc << Range->getType() << BEFFailure;
1980         CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Range);
1981       }
1982       // Return an error if no fix was discovered.
1983       if (RangeStatus != FRS_Success)
1984         return StmtError();
1985     }
1986
1987     assert(!BeginExpr.isInvalid() && !EndExpr.isInvalid() &&
1988            "invalid range expression in for loop");
1989
1990     // C++11 [dcl.spec.auto]p7: BeginType and EndType must be the same.
1991     QualType BeginType = BeginVar->getType(), EndType = EndVar->getType();
1992     if (!Context.hasSameType(BeginType, EndType)) {
1993       Diag(RangeLoc, diag::err_for_range_begin_end_types_differ)
1994         << BeginType << EndType;
1995       NoteForRangeBeginEndFunction(*this, BeginExpr.get(), BEF_begin);
1996       NoteForRangeBeginEndFunction(*this, EndExpr.get(), BEF_end);
1997     }
1998
1999     Decl *BeginEndDecls[] = { BeginVar, EndVar };
2000     // Claim the type doesn't contain auto: we've already done the checking.
2001     DeclGroupPtrTy BeginEndGroup =
2002       BuildDeclaratorGroup(BeginEndDecls, 2, /*TypeMayContainAuto=*/false);
2003     BeginEndDecl = ActOnDeclStmt(BeginEndGroup, ColonLoc, ColonLoc);
2004
2005     const QualType BeginRefNonRefType = BeginType.getNonReferenceType();
2006     ExprResult BeginRef = BuildDeclRefExpr(BeginVar, BeginRefNonRefType,
2007                                            VK_LValue, ColonLoc);
2008     if (BeginRef.isInvalid())
2009       return StmtError();
2010
2011     ExprResult EndRef = BuildDeclRefExpr(EndVar, EndType.getNonReferenceType(),
2012                                          VK_LValue, ColonLoc);
2013     if (EndRef.isInvalid())
2014       return StmtError();
2015
2016     // Build and check __begin != __end expression.
2017     NotEqExpr = ActOnBinOp(S, ColonLoc, tok::exclaimequal,
2018                            BeginRef.get(), EndRef.get());
2019     NotEqExpr = ActOnBooleanCondition(S, ColonLoc, NotEqExpr.get());
2020     NotEqExpr = ActOnFinishFullExpr(NotEqExpr.get());
2021     if (NotEqExpr.isInvalid()) {
2022       Diag(RangeLoc, diag::note_for_range_invalid_iterator)
2023         << RangeLoc << 0 << BeginRangeRef.get()->getType();
2024       NoteForRangeBeginEndFunction(*this, BeginExpr.get(), BEF_begin);
2025       if (!Context.hasSameType(BeginType, EndType))
2026         NoteForRangeBeginEndFunction(*this, EndExpr.get(), BEF_end);
2027       return StmtError();
2028     }
2029
2030     // Build and check ++__begin expression.
2031     BeginRef = BuildDeclRefExpr(BeginVar, BeginRefNonRefType,
2032                                 VK_LValue, ColonLoc);
2033     if (BeginRef.isInvalid())
2034       return StmtError();
2035
2036     IncrExpr = ActOnUnaryOp(S, ColonLoc, tok::plusplus, BeginRef.get());
2037     IncrExpr = ActOnFinishFullExpr(IncrExpr.get());
2038     if (IncrExpr.isInvalid()) {
2039       Diag(RangeLoc, diag::note_for_range_invalid_iterator)
2040         << RangeLoc << 2 << BeginRangeRef.get()->getType() ;
2041       NoteForRangeBeginEndFunction(*this, BeginExpr.get(), BEF_begin);
2042       return StmtError();
2043     }
2044
2045     // Build and check *__begin  expression.
2046     BeginRef = BuildDeclRefExpr(BeginVar, BeginRefNonRefType,
2047                                 VK_LValue, ColonLoc);
2048     if (BeginRef.isInvalid())
2049       return StmtError();
2050
2051     ExprResult DerefExpr = ActOnUnaryOp(S, ColonLoc, tok::star, BeginRef.get());
2052     if (DerefExpr.isInvalid()) {
2053       Diag(RangeLoc, diag::note_for_range_invalid_iterator)
2054         << RangeLoc << 1 << BeginRangeRef.get()->getType();
2055       NoteForRangeBeginEndFunction(*this, BeginExpr.get(), BEF_begin);
2056       return StmtError();
2057     }
2058
2059     // Attach  *__begin  as initializer for VD. Don't touch it if we're just
2060     // trying to determine whether this would be a valid range.
2061     if (!LoopVar->isInvalidDecl() && Kind != BFRK_Check) {
2062       AddInitializerToDecl(LoopVar, DerefExpr.get(), /*DirectInit=*/false,
2063                            /*TypeMayContainAuto=*/true);
2064       if (LoopVar->isInvalidDecl())
2065         NoteForRangeBeginEndFunction(*this, BeginExpr.get(), BEF_begin);
2066     }
2067   } else {
2068     // The range is implicitly used as a placeholder when it is dependent.
2069     RangeVar->setUsed();
2070   }
2071
2072   // Don't bother to actually allocate the result if we're just trying to
2073   // determine whether it would be valid.
2074   if (Kind == BFRK_Check)
2075     return StmtResult();
2076
2077   return Owned(new (Context) CXXForRangeStmt(RangeDS,
2078                                      cast_or_null<DeclStmt>(BeginEndDecl.get()),
2079                                              NotEqExpr.take(), IncrExpr.take(),
2080                                              LoopVarDS, /*Body=*/0, ForLoc,
2081                                              ColonLoc, RParenLoc));
2082 }
2083
2084 /// FinishObjCForCollectionStmt - Attach the body to a objective-C foreach
2085 /// statement.
2086 StmtResult Sema::FinishObjCForCollectionStmt(Stmt *S, Stmt *B) {
2087   if (!S || !B)
2088     return StmtError();
2089   ObjCForCollectionStmt * ForStmt = cast<ObjCForCollectionStmt>(S);
2090
2091   ForStmt->setBody(B);
2092   return S;
2093 }
2094
2095 /// FinishCXXForRangeStmt - Attach the body to a C++0x for-range statement.
2096 /// This is a separate step from ActOnCXXForRangeStmt because analysis of the
2097 /// body cannot be performed until after the type of the range variable is
2098 /// determined.
2099 StmtResult Sema::FinishCXXForRangeStmt(Stmt *S, Stmt *B) {
2100   if (!S || !B)
2101     return StmtError();
2102
2103   if (isa<ObjCForCollectionStmt>(S))
2104     return FinishObjCForCollectionStmt(S, B);
2105
2106   CXXForRangeStmt *ForStmt = cast<CXXForRangeStmt>(S);
2107   ForStmt->setBody(B);
2108
2109   DiagnoseEmptyStmtBody(ForStmt->getRParenLoc(), B,
2110                         diag::warn_empty_range_based_for_body);
2111
2112   return S;
2113 }
2114
2115 StmtResult Sema::ActOnGotoStmt(SourceLocation GotoLoc,
2116                                SourceLocation LabelLoc,
2117                                LabelDecl *TheDecl) {
2118   getCurFunction()->setHasBranchIntoScope();
2119   TheDecl->setUsed();
2120   return Owned(new (Context) GotoStmt(TheDecl, GotoLoc, LabelLoc));
2121 }
2122
2123 StmtResult
2124 Sema::ActOnIndirectGotoStmt(SourceLocation GotoLoc, SourceLocation StarLoc,
2125                             Expr *E) {
2126   // Convert operand to void*
2127   if (!E->isTypeDependent()) {
2128     QualType ETy = E->getType();
2129     QualType DestTy = Context.getPointerType(Context.VoidTy.withConst());
2130     ExprResult ExprRes = Owned(E);
2131     AssignConvertType ConvTy =
2132       CheckSingleAssignmentConstraints(DestTy, ExprRes);
2133     if (ExprRes.isInvalid())
2134       return StmtError();
2135     E = ExprRes.take();
2136     if (DiagnoseAssignmentResult(ConvTy, StarLoc, DestTy, ETy, E, AA_Passing))
2137       return StmtError();
2138   }
2139
2140   ExprResult ExprRes = ActOnFinishFullExpr(E);
2141   if (ExprRes.isInvalid())
2142     return StmtError();
2143   E = ExprRes.take();
2144
2145   getCurFunction()->setHasIndirectGoto();
2146
2147   return Owned(new (Context) IndirectGotoStmt(GotoLoc, StarLoc, E));
2148 }
2149
2150 StmtResult
2151 Sema::ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope) {
2152   Scope *S = CurScope->getContinueParent();
2153   if (!S) {
2154     // C99 6.8.6.2p1: A break shall appear only in or as a loop body.
2155     return StmtError(Diag(ContinueLoc, diag::err_continue_not_in_loop));
2156   }
2157
2158   return Owned(new (Context) ContinueStmt(ContinueLoc));
2159 }
2160
2161 StmtResult
2162 Sema::ActOnBreakStmt(SourceLocation BreakLoc, Scope *CurScope) {
2163   Scope *S = CurScope->getBreakParent();
2164   if (!S) {
2165     // C99 6.8.6.3p1: A break shall appear only in or as a switch/loop body.
2166     return StmtError(Diag(BreakLoc, diag::err_break_not_in_loop_or_switch));
2167   }
2168
2169   return Owned(new (Context) BreakStmt(BreakLoc));
2170 }
2171
2172 /// \brief Determine whether the given expression is a candidate for
2173 /// copy elision in either a return statement or a throw expression.
2174 ///
2175 /// \param ReturnType If we're determining the copy elision candidate for
2176 /// a return statement, this is the return type of the function. If we're
2177 /// determining the copy elision candidate for a throw expression, this will
2178 /// be a NULL type.
2179 ///
2180 /// \param E The expression being returned from the function or block, or
2181 /// being thrown.
2182 ///
2183 /// \param AllowFunctionParameter Whether we allow function parameters to
2184 /// be considered NRVO candidates. C++ prohibits this for NRVO itself, but
2185 /// we re-use this logic to determine whether we should try to move as part of
2186 /// a return or throw (which does allow function parameters).
2187 ///
2188 /// \returns The NRVO candidate variable, if the return statement may use the
2189 /// NRVO, or NULL if there is no such candidate.
2190 const VarDecl *Sema::getCopyElisionCandidate(QualType ReturnType,
2191                                              Expr *E,
2192                                              bool AllowFunctionParameter) {
2193   QualType ExprType = E->getType();
2194   // - in a return statement in a function with ...
2195   // ... a class return type ...
2196   if (!ReturnType.isNull()) {
2197     if (!ReturnType->isRecordType())
2198       return 0;
2199     // ... the same cv-unqualified type as the function return type ...
2200     if (!Context.hasSameUnqualifiedType(ReturnType, ExprType))
2201       return 0;
2202   }
2203
2204   // ... the expression is the name of a non-volatile automatic object
2205   // (other than a function or catch-clause parameter)) ...
2206   const DeclRefExpr *DR = dyn_cast<DeclRefExpr>(E->IgnoreParens());
2207   if (!DR || DR->refersToEnclosingLocal())
2208     return 0;
2209   const VarDecl *VD = dyn_cast<VarDecl>(DR->getDecl());
2210   if (!VD)
2211     return 0;
2212
2213   // ...object (other than a function or catch-clause parameter)...
2214   if (VD->getKind() != Decl::Var &&
2215       !(AllowFunctionParameter && VD->getKind() == Decl::ParmVar))
2216     return 0;
2217   if (VD->isExceptionVariable()) return 0;
2218
2219   // ...automatic...
2220   if (!VD->hasLocalStorage()) return 0;
2221
2222   // ...non-volatile...
2223   if (VD->getType().isVolatileQualified()) return 0;
2224   if (VD->getType()->isReferenceType()) return 0;
2225
2226   // __block variables can't be allocated in a way that permits NRVO.
2227   if (VD->hasAttr<BlocksAttr>()) return 0;
2228
2229   // Variables with higher required alignment than their type's ABI
2230   // alignment cannot use NRVO.
2231   if (VD->hasAttr<AlignedAttr>() &&
2232       Context.getDeclAlign(VD) > Context.getTypeAlignInChars(VD->getType()))
2233     return 0;
2234
2235   return VD;
2236 }
2237
2238 /// \brief Perform the initialization of a potentially-movable value, which
2239 /// is the result of return value.
2240 ///
2241 /// This routine implements C++0x [class.copy]p33, which attempts to treat
2242 /// returned lvalues as rvalues in certain cases (to prefer move construction),
2243 /// then falls back to treating them as lvalues if that failed.
2244 ExprResult
2245 Sema::PerformMoveOrCopyInitialization(const InitializedEntity &Entity,
2246                                       const VarDecl *NRVOCandidate,
2247                                       QualType ResultType,
2248                                       Expr *Value,
2249                                       bool AllowNRVO) {
2250   // C++0x [class.copy]p33:
2251   //   When the criteria for elision of a copy operation are met or would
2252   //   be met save for the fact that the source object is a function
2253   //   parameter, and the object to be copied is designated by an lvalue,
2254   //   overload resolution to select the constructor for the copy is first
2255   //   performed as if the object were designated by an rvalue.
2256   ExprResult Res = ExprError();
2257   if (AllowNRVO &&
2258       (NRVOCandidate || getCopyElisionCandidate(ResultType, Value, true))) {
2259     ImplicitCastExpr AsRvalue(ImplicitCastExpr::OnStack,
2260                               Value->getType(), CK_NoOp, Value, VK_XValue);
2261
2262     Expr *InitExpr = &AsRvalue;
2263     InitializationKind Kind
2264       = InitializationKind::CreateCopy(Value->getLocStart(),
2265                                        Value->getLocStart());
2266     InitializationSequence Seq(*this, Entity, Kind, &InitExpr, 1);
2267
2268     //   [...] If overload resolution fails, or if the type of the first
2269     //   parameter of the selected constructor is not an rvalue reference
2270     //   to the object's type (possibly cv-qualified), overload resolution
2271     //   is performed again, considering the object as an lvalue.
2272     if (Seq) {
2273       for (InitializationSequence::step_iterator Step = Seq.step_begin(),
2274            StepEnd = Seq.step_end();
2275            Step != StepEnd; ++Step) {
2276         if (Step->Kind != InitializationSequence::SK_ConstructorInitialization)
2277           continue;
2278
2279         CXXConstructorDecl *Constructor
2280         = cast<CXXConstructorDecl>(Step->Function.Function);
2281
2282         const RValueReferenceType *RRefType
2283           = Constructor->getParamDecl(0)->getType()
2284                                                  ->getAs<RValueReferenceType>();
2285
2286         // If we don't meet the criteria, break out now.
2287         if (!RRefType ||
2288             !Context.hasSameUnqualifiedType(RRefType->getPointeeType(),
2289                             Context.getTypeDeclType(Constructor->getParent())))
2290           break;
2291
2292         // Promote "AsRvalue" to the heap, since we now need this
2293         // expression node to persist.
2294         Value = ImplicitCastExpr::Create(Context, Value->getType(),
2295                                          CK_NoOp, Value, 0, VK_XValue);
2296
2297         // Complete type-checking the initialization of the return type
2298         // using the constructor we found.
2299         Res = Seq.Perform(*this, Entity, Kind, MultiExprArg(&Value, 1));
2300       }
2301     }
2302   }
2303
2304   // Either we didn't meet the criteria for treating an lvalue as an rvalue,
2305   // above, or overload resolution failed. Either way, we need to try
2306   // (again) now with the return value expression as written.
2307   if (Res.isInvalid())
2308     Res = PerformCopyInitialization(Entity, SourceLocation(), Value);
2309
2310   return Res;
2311 }
2312
2313 /// ActOnCapScopeReturnStmt - Utility routine to type-check return statements
2314 /// for capturing scopes.
2315 ///
2316 StmtResult
2317 Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp) {
2318   // If this is the first return we've seen, infer the return type.
2319   // [expr.prim.lambda]p4 in C++11; block literals follow a superset of those
2320   // rules which allows multiple return statements.
2321   CapturingScopeInfo *CurCap = cast<CapturingScopeInfo>(getCurFunction());
2322   QualType FnRetType = CurCap->ReturnType;
2323
2324   // For blocks/lambdas with implicit return types, we check each return
2325   // statement individually, and deduce the common return type when the block
2326   // or lambda is completed.
2327   if (CurCap->HasImplicitReturnType) {
2328     if (RetValExp && !isa<InitListExpr>(RetValExp)) {
2329       ExprResult Result = DefaultFunctionArrayLvalueConversion(RetValExp);
2330       if (Result.isInvalid())
2331         return StmtError();
2332       RetValExp = Result.take();
2333
2334       if (!RetValExp->isTypeDependent())
2335         FnRetType = RetValExp->getType();
2336       else
2337         FnRetType = CurCap->ReturnType = Context.DependentTy;
2338     } else {
2339       if (RetValExp) {
2340         // C++11 [expr.lambda.prim]p4 bans inferring the result from an
2341         // initializer list, because it is not an expression (even
2342         // though we represent it as one). We still deduce 'void'.
2343         Diag(ReturnLoc, diag::err_lambda_return_init_list)
2344           << RetValExp->getSourceRange();
2345       }
2346
2347       FnRetType = Context.VoidTy;
2348     }
2349
2350     // Although we'll properly infer the type of the block once it's completed,
2351     // make sure we provide a return type now for better error recovery.
2352     if (CurCap->ReturnType.isNull())
2353       CurCap->ReturnType = FnRetType;
2354   }
2355   assert(!FnRetType.isNull());
2356
2357   if (BlockScopeInfo *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {
2358     if (CurBlock->FunctionType->getAs<FunctionType>()->getNoReturnAttr()) {
2359       Diag(ReturnLoc, diag::err_noreturn_block_has_return_expr);
2360       return StmtError();
2361     }
2362   } else {
2363     LambdaScopeInfo *LSI = cast<LambdaScopeInfo>(CurCap);
2364     if (LSI->CallOperator->getType()->getAs<FunctionType>()->getNoReturnAttr()){
2365       Diag(ReturnLoc, diag::err_noreturn_lambda_has_return_expr);
2366       return StmtError();
2367     }
2368   }
2369
2370   // Otherwise, verify that this result type matches the previous one.  We are
2371   // pickier with blocks than for normal functions because we don't have GCC
2372   // compatibility to worry about here.
2373   const VarDecl *NRVOCandidate = 0;
2374   if (FnRetType->isDependentType()) {
2375     // Delay processing for now.  TODO: there are lots of dependent
2376     // types we can conclusively prove aren't void.
2377   } else if (FnRetType->isVoidType()) {
2378     if (RetValExp && !isa<InitListExpr>(RetValExp) &&
2379         !(getLangOpts().CPlusPlus &&
2380           (RetValExp->isTypeDependent() ||
2381            RetValExp->getType()->isVoidType()))) {
2382       if (!getLangOpts().CPlusPlus &&
2383           RetValExp->getType()->isVoidType())
2384         Diag(ReturnLoc, diag::ext_return_has_void_expr) << "literal" << 2;
2385       else {
2386         Diag(ReturnLoc, diag::err_return_block_has_expr);
2387         RetValExp = 0;
2388       }
2389     }
2390   } else if (!RetValExp) {
2391     return StmtError(Diag(ReturnLoc, diag::err_block_return_missing_expr));
2392   } else if (!RetValExp->isTypeDependent()) {
2393     // we have a non-void block with an expression, continue checking
2394
2395     // C99 6.8.6.4p3(136): The return statement is not an assignment. The
2396     // overlap restriction of subclause 6.5.16.1 does not apply to the case of
2397     // function return.
2398
2399     // In C++ the return statement is handled via a copy initialization.
2400     // the C version of which boils down to CheckSingleAssignmentConstraints.
2401     NRVOCandidate = getCopyElisionCandidate(FnRetType, RetValExp, false);
2402     InitializedEntity Entity = InitializedEntity::InitializeResult(ReturnLoc,
2403                                                                    FnRetType,
2404                                                           NRVOCandidate != 0);
2405     ExprResult Res = PerformMoveOrCopyInitialization(Entity, NRVOCandidate,
2406                                                      FnRetType, RetValExp);
2407     if (Res.isInvalid()) {
2408       // FIXME: Cleanup temporaries here, anyway?
2409       return StmtError();
2410     }
2411     RetValExp = Res.take();
2412     CheckReturnStackAddr(RetValExp, FnRetType, ReturnLoc);
2413   }
2414
2415   if (RetValExp) {
2416     ExprResult ER = ActOnFinishFullExpr(RetValExp, ReturnLoc);
2417     if (ER.isInvalid())
2418       return StmtError();
2419     RetValExp = ER.take();
2420   }
2421   ReturnStmt *Result = new (Context) ReturnStmt(ReturnLoc, RetValExp,
2422                                                 NRVOCandidate);
2423
2424   // If we need to check for the named return value optimization,
2425   // or if we need to infer the return type,
2426   // save the return statement in our scope for later processing.
2427   if (CurCap->HasImplicitReturnType ||
2428       (getLangOpts().CPlusPlus && FnRetType->isRecordType() &&
2429        !CurContext->isDependentContext()))
2430     FunctionScopes.back()->Returns.push_back(Result);
2431
2432   return Owned(Result);
2433 }
2434
2435 StmtResult
2436 Sema::ActOnReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp) {
2437   // Check for unexpanded parameter packs.
2438   if (RetValExp && DiagnoseUnexpandedParameterPack(RetValExp))
2439     return StmtError();
2440
2441   if (isa<CapturingScopeInfo>(getCurFunction()))
2442     return ActOnCapScopeReturnStmt(ReturnLoc, RetValExp);
2443
2444   QualType FnRetType;
2445   QualType RelatedRetType;
2446   if (const FunctionDecl *FD = getCurFunctionDecl()) {
2447     FnRetType = FD->getResultType();
2448     if (FD->isNoReturn())
2449       Diag(ReturnLoc, diag::warn_noreturn_function_has_return_expr)
2450         << FD->getDeclName();
2451   } else if (ObjCMethodDecl *MD = getCurMethodDecl()) {
2452     FnRetType = MD->getResultType();
2453     if (MD->hasRelatedResultType() && MD->getClassInterface()) {
2454       // In the implementation of a method with a related return type, the
2455       // type used to type-check the validity of return statements within the
2456       // method body is a pointer to the type of the class being implemented.
2457       RelatedRetType = Context.getObjCInterfaceType(MD->getClassInterface());
2458       RelatedRetType = Context.getObjCObjectPointerType(RelatedRetType);
2459     }
2460   } else // If we don't have a function/method context, bail.
2461     return StmtError();
2462
2463   ReturnStmt *Result = 0;
2464   if (FnRetType->isVoidType()) {
2465     if (RetValExp) {
2466       if (isa<InitListExpr>(RetValExp)) {
2467         // We simply never allow init lists as the return value of void
2468         // functions. This is compatible because this was never allowed before,
2469         // so there's no legacy code to deal with.
2470         NamedDecl *CurDecl = getCurFunctionOrMethodDecl();
2471         int FunctionKind = 0;
2472         if (isa<ObjCMethodDecl>(CurDecl))
2473           FunctionKind = 1;
2474         else if (isa<CXXConstructorDecl>(CurDecl))
2475           FunctionKind = 2;
2476         else if (isa<CXXDestructorDecl>(CurDecl))
2477           FunctionKind = 3;
2478
2479         Diag(ReturnLoc, diag::err_return_init_list)
2480           << CurDecl->getDeclName() << FunctionKind
2481           << RetValExp->getSourceRange();
2482
2483         // Drop the expression.
2484         RetValExp = 0;
2485       } else if (!RetValExp->isTypeDependent()) {
2486         // C99 6.8.6.4p1 (ext_ since GCC warns)
2487         unsigned D = diag::ext_return_has_expr;
2488         if (RetValExp->getType()->isVoidType())
2489           D = diag::ext_return_has_void_expr;
2490         else {
2491           ExprResult Result = Owned(RetValExp);
2492           Result = IgnoredValueConversions(Result.take());
2493           if (Result.isInvalid())
2494             return StmtError();
2495           RetValExp = Result.take();
2496           RetValExp = ImpCastExprToType(RetValExp,
2497                                         Context.VoidTy, CK_ToVoid).take();
2498         }
2499
2500         // return (some void expression); is legal in C++.
2501         if (D != diag::ext_return_has_void_expr ||
2502             !getLangOpts().CPlusPlus) {
2503           NamedDecl *CurDecl = getCurFunctionOrMethodDecl();
2504
2505           int FunctionKind = 0;
2506           if (isa<ObjCMethodDecl>(CurDecl))
2507             FunctionKind = 1;
2508           else if (isa<CXXConstructorDecl>(CurDecl))
2509             FunctionKind = 2;
2510           else if (isa<CXXDestructorDecl>(CurDecl))
2511             FunctionKind = 3;
2512
2513           Diag(ReturnLoc, D)
2514             << CurDecl->getDeclName() << FunctionKind
2515             << RetValExp->getSourceRange();
2516         }
2517       }
2518
2519       if (RetValExp) {
2520         ExprResult ER = ActOnFinishFullExpr(RetValExp, ReturnLoc);
2521         if (ER.isInvalid())
2522           return StmtError();
2523         RetValExp = ER.take();
2524       }
2525     }
2526
2527     Result = new (Context) ReturnStmt(ReturnLoc, RetValExp, 0);
2528   } else if (!RetValExp && !FnRetType->isDependentType()) {
2529     unsigned DiagID = diag::warn_return_missing_expr;  // C90 6.6.6.4p4
2530     // C99 6.8.6.4p1 (ext_ since GCC warns)
2531     if (getLangOpts().C99) DiagID = diag::ext_return_missing_expr;
2532
2533     if (FunctionDecl *FD = getCurFunctionDecl())
2534       Diag(ReturnLoc, DiagID) << FD->getIdentifier() << 0/*fn*/;
2535     else
2536       Diag(ReturnLoc, DiagID) << getCurMethodDecl()->getDeclName() << 1/*meth*/;
2537     Result = new (Context) ReturnStmt(ReturnLoc);
2538   } else {
2539     assert(RetValExp || FnRetType->isDependentType());
2540     const VarDecl *NRVOCandidate = 0;
2541     if (!FnRetType->isDependentType() && !RetValExp->isTypeDependent()) {
2542       // we have a non-void function with an expression, continue checking
2543
2544       QualType RetType = (RelatedRetType.isNull() ? FnRetType : RelatedRetType);
2545
2546       // C99 6.8.6.4p3(136): The return statement is not an assignment. The
2547       // overlap restriction of subclause 6.5.16.1 does not apply to the case of
2548       // function return.
2549
2550       // In C++ the return statement is handled via a copy initialization,
2551       // the C version of which boils down to CheckSingleAssignmentConstraints.
2552       NRVOCandidate = getCopyElisionCandidate(FnRetType, RetValExp, false);
2553       InitializedEntity Entity = InitializedEntity::InitializeResult(ReturnLoc,
2554                                                                      RetType,
2555                                                             NRVOCandidate != 0);
2556       ExprResult Res = PerformMoveOrCopyInitialization(Entity, NRVOCandidate,
2557                                                        RetType, RetValExp);
2558       if (Res.isInvalid()) {
2559         // FIXME: Clean up temporaries here anyway?
2560         return StmtError();
2561       }
2562       RetValExp = Res.takeAs<Expr>();
2563
2564       // If we have a related result type, we need to implicitly
2565       // convert back to the formal result type.  We can't pretend to
2566       // initialize the result again --- we might end double-retaining
2567       // --- so instead we initialize a notional temporary; this can
2568       // lead to less-than-great diagnostics, but this stage is much
2569       // less likely to fail than the previous stage.
2570       if (!RelatedRetType.isNull()) {
2571         Entity = InitializedEntity::InitializeTemporary(FnRetType);
2572         Res = PerformCopyInitialization(Entity, ReturnLoc, RetValExp);
2573         if (Res.isInvalid()) {
2574           // FIXME: Clean up temporaries here anyway?
2575           return StmtError();
2576         }
2577         RetValExp = Res.takeAs<Expr>();
2578       }
2579
2580       CheckReturnStackAddr(RetValExp, FnRetType, ReturnLoc);
2581     }
2582
2583     if (RetValExp) {
2584       ExprResult ER = ActOnFinishFullExpr(RetValExp, ReturnLoc);
2585       if (ER.isInvalid())
2586         return StmtError();
2587       RetValExp = ER.take();
2588     }
2589     Result = new (Context) ReturnStmt(ReturnLoc, RetValExp, NRVOCandidate);
2590   }
2591
2592   // If we need to check for the named return value optimization, save the
2593   // return statement in our scope for later processing.
2594   if (getLangOpts().CPlusPlus && FnRetType->isRecordType() &&
2595       !CurContext->isDependentContext())
2596     FunctionScopes.back()->Returns.push_back(Result);
2597
2598   return Owned(Result);
2599 }
2600
2601 StmtResult
2602 Sema::ActOnObjCAtCatchStmt(SourceLocation AtLoc,
2603                            SourceLocation RParen, Decl *Parm,
2604                            Stmt *Body) {
2605   VarDecl *Var = cast_or_null<VarDecl>(Parm);
2606   if (Var && Var->isInvalidDecl())
2607     return StmtError();
2608
2609   return Owned(new (Context) ObjCAtCatchStmt(AtLoc, RParen, Var, Body));
2610 }
2611
2612 StmtResult
2613 Sema::ActOnObjCAtFinallyStmt(SourceLocation AtLoc, Stmt *Body) {
2614   return Owned(new (Context) ObjCAtFinallyStmt(AtLoc, Body));
2615 }
2616
2617 StmtResult
2618 Sema::ActOnObjCAtTryStmt(SourceLocation AtLoc, Stmt *Try,
2619                          MultiStmtArg CatchStmts, Stmt *Finally) {
2620   if (!getLangOpts().ObjCExceptions)
2621     Diag(AtLoc, diag::err_objc_exceptions_disabled) << "@try";
2622
2623   getCurFunction()->setHasBranchProtectedScope();
2624   unsigned NumCatchStmts = CatchStmts.size();
2625   return Owned(ObjCAtTryStmt::Create(Context, AtLoc, Try,
2626                                      CatchStmts.data(),
2627                                      NumCatchStmts,
2628                                      Finally));
2629 }
2630
2631 StmtResult Sema::BuildObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw) {
2632   if (Throw) {
2633     ExprResult Result = DefaultLvalueConversion(Throw);
2634     if (Result.isInvalid())
2635       return StmtError();
2636
2637     Result = ActOnFinishFullExpr(Result.take());
2638     if (Result.isInvalid())
2639       return StmtError();
2640     Throw = Result.take();
2641
2642     QualType ThrowType = Throw->getType();
2643     // Make sure the expression type is an ObjC pointer or "void *".
2644     if (!ThrowType->isDependentType() &&
2645         !ThrowType->isObjCObjectPointerType()) {
2646       const PointerType *PT = ThrowType->getAs<PointerType>();
2647       if (!PT || !PT->getPointeeType()->isVoidType())
2648         return StmtError(Diag(AtLoc, diag::error_objc_throw_expects_object)
2649                          << Throw->getType() << Throw->getSourceRange());
2650     }
2651   }
2652
2653   return Owned(new (Context) ObjCAtThrowStmt(AtLoc, Throw));
2654 }
2655
2656 StmtResult
2657 Sema::ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw,
2658                            Scope *CurScope) {
2659   if (!getLangOpts().ObjCExceptions)
2660     Diag(AtLoc, diag::err_objc_exceptions_disabled) << "@throw";
2661
2662   if (!Throw) {
2663     // @throw without an expression designates a rethrow (which much occur
2664     // in the context of an @catch clause).
2665     Scope *AtCatchParent = CurScope;
2666     while (AtCatchParent && !AtCatchParent->isAtCatchScope())
2667       AtCatchParent = AtCatchParent->getParent();
2668     if (!AtCatchParent)
2669       return StmtError(Diag(AtLoc, diag::error_rethrow_used_outside_catch));
2670   }
2671   return BuildObjCAtThrowStmt(AtLoc, Throw);
2672 }
2673
2674 ExprResult
2675 Sema::ActOnObjCAtSynchronizedOperand(SourceLocation atLoc, Expr *operand) {
2676   ExprResult result = DefaultLvalueConversion(operand);
2677   if (result.isInvalid())
2678     return ExprError();
2679   operand = result.take();
2680
2681   // Make sure the expression type is an ObjC pointer or "void *".
2682   QualType type = operand->getType();
2683   if (!type->isDependentType() &&
2684       !type->isObjCObjectPointerType()) {
2685     const PointerType *pointerType = type->getAs<PointerType>();
2686     if (!pointerType || !pointerType->getPointeeType()->isVoidType())
2687       return Diag(atLoc, diag::error_objc_synchronized_expects_object)
2688                << type << operand->getSourceRange();
2689   }
2690
2691   // The operand to @synchronized is a full-expression.
2692   return ActOnFinishFullExpr(operand);
2693 }
2694
2695 StmtResult
2696 Sema::ActOnObjCAtSynchronizedStmt(SourceLocation AtLoc, Expr *SyncExpr,
2697                                   Stmt *SyncBody) {
2698   // We can't jump into or indirect-jump out of a @synchronized block.
2699   getCurFunction()->setHasBranchProtectedScope();
2700   return Owned(new (Context) ObjCAtSynchronizedStmt(AtLoc, SyncExpr, SyncBody));
2701 }
2702
2703 /// ActOnCXXCatchBlock - Takes an exception declaration and a handler block
2704 /// and creates a proper catch handler from them.
2705 StmtResult
2706 Sema::ActOnCXXCatchBlock(SourceLocation CatchLoc, Decl *ExDecl,
2707                          Stmt *HandlerBlock) {
2708   // There's nothing to test that ActOnExceptionDecl didn't already test.
2709   return Owned(new (Context) CXXCatchStmt(CatchLoc,
2710                                           cast_or_null<VarDecl>(ExDecl),
2711                                           HandlerBlock));
2712 }
2713
2714 StmtResult
2715 Sema::ActOnObjCAutoreleasePoolStmt(SourceLocation AtLoc, Stmt *Body) {
2716   getCurFunction()->setHasBranchProtectedScope();
2717   return Owned(new (Context) ObjCAutoreleasePoolStmt(AtLoc, Body));
2718 }
2719
2720 namespace {
2721
2722 class TypeWithHandler {
2723   QualType t;
2724   CXXCatchStmt *stmt;
2725 public:
2726   TypeWithHandler(const QualType &type, CXXCatchStmt *statement)
2727   : t(type), stmt(statement) {}
2728
2729   // An arbitrary order is fine as long as it places identical
2730   // types next to each other.
2731   bool operator<(const TypeWithHandler &y) const {
2732     if (t.getAsOpaquePtr() < y.t.getAsOpaquePtr())
2733       return true;
2734     if (t.getAsOpaquePtr() > y.t.getAsOpaquePtr())
2735       return false;
2736     else
2737       return getTypeSpecStartLoc() < y.getTypeSpecStartLoc();
2738   }
2739
2740   bool operator==(const TypeWithHandler& other) const {
2741     return t == other.t;
2742   }
2743
2744   CXXCatchStmt *getCatchStmt() const { return stmt; }
2745   SourceLocation getTypeSpecStartLoc() const {
2746     return stmt->getExceptionDecl()->getTypeSpecStartLoc();
2747   }
2748 };
2749
2750 }
2751
2752 /// ActOnCXXTryBlock - Takes a try compound-statement and a number of
2753 /// handlers and creates a try statement from them.
2754 StmtResult
2755 Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock,
2756                        MultiStmtArg RawHandlers) {
2757   // Don't report an error if 'try' is used in system headers.
2758   if (!getLangOpts().CXXExceptions &&
2759       !getSourceManager().isInSystemHeader(TryLoc))
2760       Diag(TryLoc, diag::err_exceptions_disabled) << "try";
2761
2762   unsigned NumHandlers = RawHandlers.size();
2763   assert(NumHandlers > 0 &&
2764          "The parser shouldn't call this if there are no handlers.");
2765   Stmt **Handlers = RawHandlers.data();
2766
2767   SmallVector<TypeWithHandler, 8> TypesWithHandlers;
2768
2769   for (unsigned i = 0; i < NumHandlers; ++i) {
2770     CXXCatchStmt *Handler = cast<CXXCatchStmt>(Handlers[i]);
2771     if (!Handler->getExceptionDecl()) {
2772       if (i < NumHandlers - 1)
2773         return StmtError(Diag(Handler->getLocStart(),
2774                               diag::err_early_catch_all));
2775
2776       continue;
2777     }
2778
2779     const QualType CaughtType = Handler->getCaughtType();
2780     const QualType CanonicalCaughtType = Context.getCanonicalType(CaughtType);
2781     TypesWithHandlers.push_back(TypeWithHandler(CanonicalCaughtType, Handler));
2782   }
2783
2784   // Detect handlers for the same type as an earlier one.
2785   if (NumHandlers > 1) {
2786     llvm::array_pod_sort(TypesWithHandlers.begin(), TypesWithHandlers.end());
2787
2788     TypeWithHandler prev = TypesWithHandlers[0];
2789     for (unsigned i = 1; i < TypesWithHandlers.size(); ++i) {
2790       TypeWithHandler curr = TypesWithHandlers[i];
2791
2792       if (curr == prev) {
2793         Diag(curr.getTypeSpecStartLoc(),
2794              diag::warn_exception_caught_by_earlier_handler)
2795           << curr.getCatchStmt()->getCaughtType().getAsString();
2796         Diag(prev.getTypeSpecStartLoc(),
2797              diag::note_previous_exception_handler)
2798           << prev.getCatchStmt()->getCaughtType().getAsString();
2799       }
2800
2801       prev = curr;
2802     }
2803   }
2804
2805   getCurFunction()->setHasBranchProtectedScope();
2806
2807   // FIXME: We should detect handlers that cannot catch anything because an
2808   // earlier handler catches a superclass. Need to find a method that is not
2809   // quadratic for this.
2810   // Neither of these are explicitly forbidden, but every compiler detects them
2811   // and warns.
2812
2813   return Owned(CXXTryStmt::Create(Context, TryLoc, TryBlock,
2814                                   llvm::makeArrayRef(Handlers, NumHandlers)));
2815 }
2816
2817 StmtResult
2818 Sema::ActOnSEHTryBlock(bool IsCXXTry,
2819                        SourceLocation TryLoc,
2820                        Stmt *TryBlock,
2821                        Stmt *Handler) {
2822   assert(TryBlock && Handler);
2823
2824   getCurFunction()->setHasBranchProtectedScope();
2825
2826   return Owned(SEHTryStmt::Create(Context,IsCXXTry,TryLoc,TryBlock,Handler));
2827 }
2828
2829 StmtResult
2830 Sema::ActOnSEHExceptBlock(SourceLocation Loc,
2831                           Expr *FilterExpr,
2832                           Stmt *Block) {
2833   assert(FilterExpr && Block);
2834
2835   if(!FilterExpr->getType()->isIntegerType()) {
2836     return StmtError(Diag(FilterExpr->getExprLoc(),
2837                      diag::err_filter_expression_integral)
2838                      << FilterExpr->getType());
2839   }
2840
2841   return Owned(SEHExceptStmt::Create(Context,Loc,FilterExpr,Block));
2842 }
2843
2844 StmtResult
2845 Sema::ActOnSEHFinallyBlock(SourceLocation Loc,
2846                            Stmt *Block) {
2847   assert(Block);
2848   return Owned(SEHFinallyStmt::Create(Context,Loc,Block));
2849 }
2850
2851 StmtResult Sema::BuildMSDependentExistsStmt(SourceLocation KeywordLoc,
2852                                             bool IsIfExists,
2853                                             NestedNameSpecifierLoc QualifierLoc,
2854                                             DeclarationNameInfo NameInfo,
2855                                             Stmt *Nested)
2856 {
2857   return new (Context) MSDependentExistsStmt(KeywordLoc, IsIfExists,
2858                                              QualifierLoc, NameInfo,
2859                                              cast<CompoundStmt>(Nested));
2860 }
2861
2862
2863 StmtResult Sema::ActOnMSDependentExistsStmt(SourceLocation KeywordLoc,
2864                                             bool IsIfExists,
2865                                             CXXScopeSpec &SS,
2866                                             UnqualifiedId &Name,
2867                                             Stmt *Nested) {
2868   return BuildMSDependentExistsStmt(KeywordLoc, IsIfExists,
2869                                     SS.getWithLocInContext(Context),
2870                                     GetNameFromUnqualifiedId(Name),
2871                                     Nested);
2872 }