diff options
author | Aaron Ballman <aaron@aaronballman.com> | 2015-04-28 17:34:38 +0000 |
---|---|---|
committer | Aaron Ballman <aaron@aaronballman.com> | 2015-04-28 17:34:38 +0000 |
commit | e918faadd21179213a6a716e6340494cfeb1315b (patch) | |
tree | 5c56004a8b3aaad3a86b0a6583eaf6e8bb8044a0 /clang/lib/Sema/SemaLambda.cpp | |
parent | 6eb00faf9d9b82385c98e1011f78b056a16ab029 (diff) | |
download | bcm5719-llvm-e918faadd21179213a6a716e6340494cfeb1315b.tar.gz bcm5719-llvm-e918faadd21179213a6a716e6340494cfeb1315b.zip |
Silencing a -Wuninitialized warning in a different way. This replaces r235981, but is still NFC.
llvm-svn: 236002
Diffstat (limited to 'clang/lib/Sema/SemaLambda.cpp')
-rw-r--r-- | clang/lib/Sema/SemaLambda.cpp | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/clang/lib/Sema/SemaLambda.cpp b/clang/lib/Sema/SemaLambda.cpp index e9c76b643b5..fa67dedbf8c 100644 --- a/clang/lib/Sema/SemaLambda.cpp +++ b/clang/lib/Sema/SemaLambda.cpp @@ -1477,13 +1477,30 @@ ExprResult Sema::ActOnLambdaExpr(SourceLocation StartLoc, Stmt *Body, return BuildLambdaExpr(StartLoc, Body->getLocEnd(), &LSI); } +static LambdaCaptureDefault +mapImplicitCaptureStyle(CapturingScopeInfo::ImplicitCaptureStyle ICS) { + switch (ICS) { + case CapturingScopeInfo::ImpCap_None: + return LCD_None; + case CapturingScopeInfo::ImpCap_LambdaByval: + return LCD_ByCopy; + case CapturingScopeInfo::ImpCap_CapturedRegion: + case CapturingScopeInfo::ImpCap_LambdaByref: + return LCD_ByRef; + case CapturingScopeInfo::ImpCap_Block: + llvm_unreachable("block capture in lambda"); + } + llvm_unreachable("Unknown implicit capture style"); +} + ExprResult Sema::BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc, LambdaScopeInfo *LSI) { // Collect information from the lambda scope. SmallVector<LambdaCapture, 4> Captures; SmallVector<Expr *, 4> CaptureInits; - LambdaCaptureDefault CaptureDefault = LCD_None; - SourceLocation CaptureDefaultLoc; + SourceLocation CaptureDefaultLoc = LSI->CaptureDefaultLoc; + LambdaCaptureDefault CaptureDefault = + mapImplicitCaptureStyle(LSI->ImpCaptureStyle); CXXRecordDecl *Class; CXXMethodDecl *CallOperator; SourceRange IntroducerRange; @@ -1553,26 +1570,6 @@ ExprResult Sema::BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc, CaptureInits.push_back(Init); } - switch (LSI->ImpCaptureStyle) { - case CapturingScopeInfo::ImpCap_None: - CaptureDefault = LCD_None; - break; - - case CapturingScopeInfo::ImpCap_LambdaByval: - CaptureDefault = LCD_ByCopy; - break; - - case CapturingScopeInfo::ImpCap_CapturedRegion: - case CapturingScopeInfo::ImpCap_LambdaByref: - CaptureDefault = LCD_ByRef; - break; - - case CapturingScopeInfo::ImpCap_Block: - llvm_unreachable("block capture in lambda"); - break; - } - CaptureDefaultLoc = LSI->CaptureDefaultLoc; - // C++11 [expr.prim.lambda]p6: // The closure type for a lambda-expression with no lambda-capture // has a public non-virtual non-explicit const conversion function |