<div dir="ltr"><div>It's probably this change:</div><div><br></div><div>$ "C:/src/llvm/build_x86/./bin/clang.EXE" "-cc1" "-internal-isystem" "C:\src\llvm\build_x86\bin\..\lib\clang\4.0.0\include" "-nostdsysteminc" "-fsyntax-only" "-Wno-everything" "-Wobjc-literal-compare" "-Dnil=(id)0" "-verify" "C:\src\llvm\tools\clang\test\SemaObjC\objc-literal-comparison.m"</div><div># command stderr:</div><div>Assertion failed: (PtrWord & ~PointerBitMask) == 0 && "Pointer is not sufficiently aligned", file C:\src\llvm\include\llvm/ADT/PointerIntPair.h, line 160</div><div>#0 0x02519d87 HandleAbort c:\src\llvm\lib\support\windows\signals.inc:404:0</div><div>#1 0x04061684 raise d:\th\minkernel\crts\ucrt\src\appcrt\misc\signal.cpp:516:0</div><div>#2 0x0403a662 abort d:\th\minkernel\crts\ucrt\src\appcrt\startup\abort.cpp:64:0</div><div>#3 0x04039381 common_assert_to_stderr<wchar_t> d:\th\minkernel\crts\ucrt\src\appcrt\startup\assert.cpp:149:0</div><div>#4 0x04039ab0 _wassert d:\th\minkernel\crts\ucrt\src\appcrt\startup\assert.cpp:404:0</div><div>#5 0x03e2737c `anonymous namespace'::SpeculativeEvaluationRAII::SpeculativeEvaluationRAII c:\src\llvm\tools\clang\lib\ast\exprconstant.cpp:897:0</div><div>#6 0x03e86937 `anonymous namespace'::DataRecursiveIntBinOpEvaluator::Job::startSpeculativeEval c:\src\llvm\tools\clang\lib\ast\exprconstant.cpp:7468:0</div><div>#7 0x03e85e36 `anonymous namespace'::DataRecursiveIntBinOpEvaluator::process c:\src\llvm\tools\clang\lib\ast\exprconstant.cpp:7725:0</div><div>#8 0x03e3418c `anonymous namespace'::DataRecursiveIntBinOpEvaluator::Traverse c:\src\llvm\tools\clang\lib\ast\exprconstant.cpp:7501:0</div><div>#9 0x03e455c9 `anonymous namespace'::IntExprEvaluator::VisitBinaryOperator c:\src\llvm\tools\clang\lib\ast\exprconstant.cpp:7773:0</div><div>#10 0x03e375da clang::StmtVisitorBase<struct clang::make_const_ptr,class `anonymous namespace'::IntExprEvaluator,bool>::Visit(class clang::Stmt const *) c:\src\llvm\tools\clang\include\clang\ast\stmtvisitor.h:47:0</div><div>#11 0x03e2bb5e Evaluate c:\src\llvm\tools\clang\lib\ast\exprconstant.cpp:9303:0</div><div>#12 0x03e2cc01 EvaluateAsRValue c:\src\llvm\tools\clang\lib\ast\exprconstant.cpp:9392:0</div><div>#13 0x03e2da6f clang::Expr::EvaluateForOverflow(class clang::ASTContext const &)const c:\src\llvm\tools\clang\lib\ast\exprconstant.cpp:9571:0</div><div>#14 0x039a63e1 clang::Sema::CheckForIntOverflow(class clang::Expr *) c:\src\llvm\tools\clang\lib\sema\semachecking.cpp:9706:0</div><div>#15 0x039a5ebb clang::Sema::CheckCompletedExpr(class clang::Expr *,class clang::SourceLocation,bool) c:\src\llvm\tools\clang\lib\sema\semachecking.cpp:10212:0</div><div>#16 0x035ff150 clang::Sema::ActOnFinishFullExpr(class clang::Expr *,class clang::SourceLocation,bool,bool,bool) c:\src\llvm\tools\clang\lib\sema\semaexprcxx.cpp:7399:0</div><div>#17 0x037008a9 clang::Sema::ActOnCondition(class clang::Scope *,class clang::SourceLocation,class clang::Expr *,enum clang::Sema::ConditionKind) c:\src\llvm\tools\clang\lib\sema\semaexpr.cpp:14670:0</div><div>#18 0x03312c61 clang::Parser::ParseParenExprOrCondition(class clang::ActionResult<class clang::Stmt *,1> *,class clang::Sema::ConditionResult &,class clang::SourceLocation,enum clang::Sema::ConditionKind) c:\src\llvm\tools\clang\lib\parse\parsestmt.cpp:1072:0</div><div>#19 0x03311f8e clang::Parser::ParseIfStatement(class clang::SourceLocation *) c:\src\llvm\tools\clang\lib\parse\parsestmt.cpp:1146:0</div><div>#20 0x033143e2 clang::Parser::ParseStatementOrDeclarationAfterAttributes(class llvm::SmallVector<class clang::Stmt *,32> &,enum clang::Parser::AllowedContsructsKind,class clang::SourceLocation *,struct clang::Parser::ParsedAttributesWithRange &) c:\src\llvm\tools\clang\lib\parse\parsestmt.cpp:239:0</div><div>#21 0x03314045 clang::Parser::ParseStatementOrDeclaration(class llvm::SmallVector<class clang::Stmt *,32> &,enum clang::Parser::AllowedContsructsKind,class clang::SourceLocation *) c:\src\llvm\tools\clang\lib\parse\parsestmt.cpp:113:0</div><div>#22 0x0330f906 clang::Parser::ParseCompoundStatementBody(bool) c:\src\llvm\tools\clang\lib\parse\parsestmt.cpp:987:0</div><div>#23 0x0331190d clang::Parser::ParseFunctionStatementBody(class clang::Decl *,class clang::Parser::ParseScope &) c:\src\llvm\tools\clang\lib\parse\parsestmt.cpp:1954:0</div><div>#24 0x032b3abe clang::Parser::ParseFunctionDefinition(class clang::ParsingDeclarator &,struct clang::Parser::ParsedTemplateInfo const &,class clang::Parser::LateParsedAttrList *) c:\src\llvm\tools\clang\lib\parse\parser.cpp:1216:0</div><div>#25 0x032cbf4d clang::Parser::ParseDeclGroup(class clang::ParsingDeclSpec &,unsigned int,class clang::SourceLocation *,struct clang::Parser::ForRangeInit *) c:\src\llvm\tools\clang\lib\parse\parsedecl.cpp:1814:0</div><div>#26 0x032b255a clang::Parser::ParseDeclOrFunctionDefInternal(struct clang::Parser::ParsedAttributesWithRange &,class clang::ParsingDeclSpec &,enum clang::AccessSpecifier) c:\src\llvm\tools\clang\lib\parse\parser.cpp:984:0</div><div>#27 0x032b26af clang::Parser::ParseDeclarationOrFunctionDefinition(struct clang::Parser::ParsedAttributesWithRange &,class clang::ParsingDeclSpec *,enum clang::AccessSpecifier) c:\src\llvm\tools\clang\lib\parse\parser.cpp:999:0</div><div>#28 0x032b2e46 clang::Parser::ParseExternalDeclaration(struct clang::Parser::ParsedAttributesWithRange &,class clang::ParsingDeclSpec *) c:\src\llvm\tools\clang\lib\parse\parser.cpp:851:0</div><div>#29 0x032b5600 clang::Parser::ParseTopLevelDecl(class clang::OpaquePtr<class clang::DeclGroupRef> &) c:\src\llvm\tools\clang\lib\parse\parser.cpp:628:0</div><div>#30 0x032aec06 clang::ParseAST(class clang::Sema &,bool,bool) c:\src\llvm\tools\clang\lib\parse\parseast.cpp:147:0</div><div>#31 0x02aec5dd clang::ASTFrontendAction::ExecuteAction(void) c:\src\llvm\tools\clang\lib\frontend\frontendaction.cpp:558:0</div><div>#32 0x02aec45b clang::FrontendAction::Execute(void) c:\src\llvm\tools\clang\lib\frontend\frontendaction.cpp:463:0</div><div>#33 0x02abd7d6 clang::CompilerInstance::ExecuteAction(class clang::FrontendAction &) c:\src\llvm\tools\clang\lib\frontend\compilerinstance.cpp:931:0</div><div>#34 0x02b652ab clang::ExecuteCompilerInvocation(class clang::CompilerInstance *) c:\src\llvm\tools\clang\lib\frontendtool\executecompilerinvocation.cpp:249:0</div><div>#35 0x012eca3b cc1_main(class llvm::ArrayRef<char const *>,char const *,void *) c:\src\llvm\tools\clang\tools\driver\cc1_main.cpp:221:0</div><div>#36 0x012e720a ExecuteCC1Tool c:\src\llvm\tools\clang\tools\driver\driver.cpp:299:0</div><div>#37 0x012e9b6d main c:\src\llvm\tools\clang\tools\driver\driver.cpp:380:0</div><div>#38 0x03ffce5a _scrt_common_main_seh f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:253:0</div><div>#39 0x745138f4 (C:\Windows\SYSTEM32\KERNEL32.DLL+0x138f4)</div><div>#40 0x77705de3 (C:\Windows\SYSTEM32\ntdll.dll+0x65de3)</div><div>#41 0x77705dae (C:\Windows\SYSTEM32\ntdll.dll+0x65dae)</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Dec 12, 2016 at 4:20 PM, Richard Smith via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 12 December 2016 at 16:16, Mike Aizatsky <span dir="ltr"><<a href="mailto:aizatsky@google.com" target="_blank">aizatsky@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Richard,<div><br></div><div>I'm not really sure since I don't have access to windows machine but this or <a href="http://llvm.org/viewvc/llvm-project?revision=289412&view=revision" class="m_620633608376592462m_8538426202314716646cremed" target="_blank">http://llvm.org/viewvc/llvm<wbr>-project?revision=289412&view=<wbr>revision</a> has broken sanitizer-windows bot. Sorry if this is a false alarm.</div></div></blockquote><div><br></div><div>Given that the code added here is not (yet) reachable, I'd be really surprised if this change is responsible. Can you get a proper backtrace from one of these crashes?</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><a href="http://lab.llvm.org:8011/builders/sanitizer-windows/builds/2786" target="_blank">http://lab.llvm.org:8011/build<wbr>ers/sanitizer-windows/builds/<wbr>2786</a><br></div><div><br></div><div><div>FAILED: projects/compiler-rt/lib/sanit<wbr>izer_common/tests/sanitizer_<wbr>stacktrace_test.cc.i386.o </div><div>cmd.exe /C "cd /D C:\b\slave\sanitizer-windows\b<wbr>uild\projects\compiler-rt\lib\<wbr>sanitizer_common\tests && C:\b\slave\sanitizer-windows\b<wbr>uild\.\bin\clang.exe -DWIN32 -D_WINDOWS -Wno-unknown-warning-option -fms-compatibility-version=19.<wbr>00.24215.1 -D_HAS_EXCEPTIONS=0 -Wno-undefined-inline -DGTEST_NO_LLVM_RAW_OSTREAM=1 -DGTEST_HAS_RTTI=0 -IC:/b/slave/sanitizer-windows<wbr>/llvm/utils/unittest/googletes<wbr>t/include -IC:/b/slave/sanitizer-windows<wbr>/llvm/utils/unittest/googletes<wbr>t -DGTEST_HAS_SEH=0 -Wno-deprecated-declarations -IC:/b/slave/sanitizer-windows<wbr>/llvm/projects/compiler-rt/<wbr>include -IC:/b/slave/sanitizer-windows<wbr>/llvm/projects/compiler-rt/lib -IC:/b/slave/sanitizer-windows<wbr>/llvm/projects/compiler-rt/<wbr>lib/sanitizer_common -fno-rtti -O2 -Werror=sign-compare -Wno-non-virtual-dtor -fno-exceptions -DGTEST_HAS_SEH=0 -gline-tables-only -gcodeview -c -o sanitizer_stacktrace_test.cc.i<wbr>386.o C:/b/slave/sanitizer-windows/l<wbr>lvm/projects/compiler-rt/lib/s<wbr>anitizer_common/tests/sanitize<wbr>r_stacktrace_test.cc"</div><div>Assertion failed: (PtrWord & ~PointerBitMask) == 0 && "Pointer is not sufficiently aligned", file C:\b\slave\sanitizer-windows\l<wbr>lvm\include\llvm/ADT/PointerIn<wbr>tPair.h, line 160</div><div><br></div><div>Wrote crash dump file "C:\Users\buildbot\AppData\Loc<wbr>al\Temp\clang.exe-692761.dmp"</div><div><br></div><div>#0 0x01f8dd87 (C:\b\slave\sanitizer-windows\<wbr>build\bin\clang.exe+0xd4dd87)</div><div><br></div><div>#1 0x70a64672 (C:\windows\SYSTEM32\ucrtbase.<wbr>DLL+0x84672)</div><div><br></div><div>#2 0x70a65cab (C:\windows\SYSTEM32\ucrtbase.<wbr>DLL+0x85cab)</div><div><br></div><div>#3 0x70a650e8 (C:\windows\SYSTEM32\ucrtbase.<wbr>DLL+0x850e8)</div><div><br></div><div>#4 0x70a65da6 (C:\windows\SYSTEM32\ucrtbase.<wbr>DLL+0x85da6)</div><div><br></div><div>#5 0x02ff860d (C:\b\slave\sanitizer-windows\<wbr>build\bin\clang.exe+0x1db860d)</div><div><br></div><div>clang.exe: error: clang frontend command failed due to signal (use -v to see invocation)</div><div><br></div><div>clang version 4.0.0 (trunk 289413)</div><div><br></div><div>Target: i686-pc-windows-msvc</div><div><br></div><div>Thread model: posix</div><div><br></div><div>InstalledDir: C:\b\slave\sanitizer-windows\b<wbr>uild\bin</div><div><br></div><div>clang.exe: note: diagnostic msg: PLEASE submit a bug report to <a href="http://llvm.org/bugs/" target="_blank">http://llvm.org/bugs/</a> and include the crash backtrace, preprocessed source, and associated run script.</div><div><br></div><div>clang.exe: note: diagnostic msg: </div><div><br></div><div>********************</div></div><div><br></div></div><div class="m_620633608376592462HOEnZb"><div class="m_620633608376592462h5"><br><div class="gmail_quote"><div dir="ltr">On Sun, Dec 11, 2016 at 7:03 PM Richard Smith via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rsmith<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Date: Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
New Revision: 289413<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=289413&view=rev" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject?rev=289413&view=rev</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
Log:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Add two new AST nodes to represent initialization of an array in terms of<br class="m_620633608376592462m_8538426202314716646gmail_msg">
initialization of each array element:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
* ArrayInitLoopExpr is a prvalue of array type with two subexpressions:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
a common expression (an OpaqueValueExpr) that represents the up-front<br class="m_620633608376592462m_8538426202314716646gmail_msg">
computation of the source of the initialization, and a subexpression<br class="m_620633608376592462m_8538426202314716646gmail_msg">
representing a per-element initializer<br class="m_620633608376592462m_8538426202314716646gmail_msg">
* ArrayInitIndexExpr is a prvalue of type size_t representing the current<br class="m_620633608376592462m_8538426202314716646gmail_msg">
position in the loop<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
This will be used to replace the creation of explicit index variables in lambda<br class="m_620633608376592462m_8538426202314716646gmail_msg">
capture of arrays and copy/move construction of classes with array elements,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
and also C++17 structured bindings of arrays by value (which inexplicably allow<br class="m_620633608376592462m_8538426202314716646gmail_msg">
copying an array by value, unlike all of C++'s other array declarations).<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
No uses of these nodes are introduced by this change, however.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/include/clang/AST/Ex<wbr>pr.h<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/include/clang/AST/Re<wbr>cursiveASTVisitor.h<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/include/clang/Basic/<wbr>StmtNodes.td<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/include/clang/Sema/I<wbr>nitialization.h<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/include/clang/Serial<wbr>ization/ASTBitCodes.h<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/lib/AST/ASTDumper.cp<wbr>p<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/lib/AST/Expr.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/lib/AST/ExprClassifi<wbr>cation.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/lib/AST/ExprConstant<wbr>.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/lib/AST/ItaniumMangl<wbr>e.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/lib/AST/StmtPrinter.<wbr>cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/lib/AST/StmtProfile.<wbr>cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/lib/CodeGen/CGExprAg<wbr>g.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/lib/CodeGen/CGExprSc<wbr>alar.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/lib/CodeGen/CodeGenF<wbr>unction.h<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/lib/Sema/SemaExcepti<wbr>onSpec.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/lib/Sema/SemaInit.cp<wbr>p<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/lib/Sema/TreeTransfo<wbr>rm.h<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/lib/Serialization/AS<wbr>TReaderStmt.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/lib/Serialization/AS<wbr>TWriterStmt.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/lib/StaticAnalyzer/C<wbr>ore/ExprEngine.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe/trunk/tools/libclang/CXCur<wbr>sor.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/include/clang/AST/Ex<wbr>pr.h<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Expr.h?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/include/clang/<wbr>AST/Expr.h?rev=289413&r1=<wbr>289412&r2=289413&view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/include/clang/AST/Ex<wbr>pr.h (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/include/clang/AST/Ex<wbr>pr.h Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -4333,6 +4333,98 @@ public:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
};<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// \brief Represents a loop initializing the elements of an array.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+///<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// The need to initialize the elements of an array occurs in a number of<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// contexts:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+///<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// * in the implicit copy/move constructor for a class with an array member<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// * when a lambda-expression captures an array by value<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// * when a decomposition declaration decomposes an array<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+///<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// There are two subexpressions: a common expression (the source array)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// that is evaluated once up-front, and a per-element initializer that<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// runs once for each array element.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+///<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// Within the per-element initializer, the common expression may be referenced<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// via an OpaqueValueExpr, and the current index may be obtained via an<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// ArrayInitIndexExpr.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+class ArrayInitLoopExpr : public Expr {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Stmt *SubExprs[2];<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ explicit ArrayInitLoopExpr(EmptyShell Empty)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ : Expr(ArrayInitLoopExprClass, Empty), SubExprs{} {}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+public:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ explicit ArrayInitLoopExpr(QualType T, Expr *CommonInit, Expr *ElementInit)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ : Expr(ArrayInitLoopExprClass, T, VK_RValue, OK_Ordinary, false,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CommonInit->isValueDependent(<wbr>) || ElementInit->isValueDependent(<wbr>),<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ T->isInstantiationDependentTy<wbr>pe(),<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CommonInit->containsUnexpande<wbr>dParameterPack() ||<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ ElementInit->containsUnexpand<wbr>edParameterPack()),<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ SubExprs{CommonInit, ElementInit} {}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// Get the common subexpression shared by all initializations (the source<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// array).<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ OpaqueValueExpr *getCommonExpr() const {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return cast<OpaqueValueExpr>(SubExprs<wbr>[0]);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// Get the initializer to use for each array element.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Expr *getSubExpr() const { return cast<Expr>(SubExprs[1]); }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ llvm::APInt getArraySize() const {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return cast<ConstantArrayType>(getTyp<wbr>e()->castAsArrayTypeUnsafe())<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ ->getSize();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ static bool classof(const Stmt *S) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return S->getStmtClass() == ArrayInitLoopExprClass;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ SourceLocation getLocStart() const LLVM_READONLY {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return getCommonExpr()->getLocStart()<wbr>;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ SourceLocation getLocEnd() const LLVM_READONLY {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return getCommonExpr()->getLocEnd();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ child_range children() {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return child_range(SubExprs, SubExprs + 2);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ friend class ASTReader;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ friend class ASTStmtReader;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ friend class ASTStmtWriter;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+};<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// \brief Represents the index of the current element of an array being<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// initialized by an ArrayInitLoopExpr. This can only appear within the<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// subexpression of an ArrayInitLoopExpr.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+class ArrayInitIndexExpr : public Expr {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ explicit ArrayInitIndexExpr(EmptyShell Empty)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ : Expr(ArrayInitIndexExprClass, Empty) {}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+public:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ explicit ArrayInitIndexExpr(QualType T)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ : Expr(ArrayInitIndexExprClass, T, VK_RValue, OK_Ordinary,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ false, false, false, false) {}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ static bool classof(const Stmt *S) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return S->getStmtClass() == ArrayInitIndexExprClass;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ SourceLocation getLocStart() const LLVM_READONLY { return SourceLocation(); }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ SourceLocation getLocEnd() const LLVM_READONLY { return SourceLocation(); }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ child_range children() {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return child_range(child_iterator(), child_iterator());<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ friend class ASTReader;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ friend class ASTStmtReader;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+};<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief Represents an implicitly-generated value initialization of<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// an object of a given type.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
///<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/include/clang/AST/Re<wbr>cursiveASTVisitor.h<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecursiveASTVisitor.h?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/include/clang/<wbr>AST/RecursiveASTVisitor.h?rev=<wbr>289413&r1=289412&r2=289413&<wbr>view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/include/clang/AST/Re<wbr>cursiveASTVisitor.h (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/include/clang/AST/Re<wbr>cursiveASTVisitor.h Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -2399,6 +2399,8 @@ DEF_TRAVERSE_STMT(ExtVectorEle<wbr>mentExpr,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
DEF_TRAVERSE_STMT(GNUNullExpr<wbr>, {})<br class="m_620633608376592462m_8538426202314716646gmail_msg">
DEF_TRAVERSE_STMT(ImplicitVal<wbr>ueInitExpr, {})<br class="m_620633608376592462m_8538426202314716646gmail_msg">
DEF_TRAVERSE_STMT(NoInitExpr, {})<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+DEF_TRAVERSE_STMT(ArrayInitLo<wbr>opExpr, {})<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+DEF_TRAVERSE_STMT(ArrayInitIn<wbr>dexExpr, {})<br class="m_620633608376592462m_8538426202314716646gmail_msg">
DEF_TRAVERSE_STMT(ObjCBoolLit<wbr>eralExpr, {})<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
DEF_TRAVERSE_STMT(ObjCEncodeE<wbr>xpr, {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/include/clang/Basic/<wbr>StmtNodes.td<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/StmtNodes.td?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/include/clang/<wbr>Basic/StmtNodes.td?rev=289413&<wbr>r1=289412&r2=289413&view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/include/clang/Basic/<wbr>StmtNodes.td (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/include/clang/Basic/<wbr>StmtNodes.td Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -85,6 +85,8 @@ def DesignatedInitExpr : DStmt<Expr>;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
def DesignatedInitUpdateExpr : DStmt<Expr>;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
def ImplicitValueInitExpr : DStmt<Expr>;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
def NoInitExpr : DStmt<Expr>;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+def ArrayInitLoopExpr : DStmt<Expr>;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+def ArrayInitIndexExpr : DStmt<Expr>;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
def ParenListExpr : DStmt<Expr>;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
def VAArgExpr : DStmt<Expr>;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
def GenericSelectionExpr : DStmt<Expr>;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/include/clang/Sema/I<wbr>nitialization.h<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Initialization.h?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/include/clang/<wbr>Sema/Initialization.h?rev=<wbr>289413&r1=289412&r2=289413&<wbr>view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/include/clang/Sema/I<wbr>nitialization.h (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/include/clang/Sema/I<wbr>nitialization.h Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -120,6 +120,16 @@ private:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
bool NRVO;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
};<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ struct VD {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// \brief The VarDecl, FieldDecl, or BindingDecl being initialized.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ ValueDecl *VariableOrMember;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// \brief When Kind == EK_Member, whether this is an implicit member<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// initialization in a copy or move constructor. These can perform array<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// copies.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ bool IsImplicitFieldInit;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ };<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
struct C {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief The name of the variable being captured by an EK_LambdaCapture.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
IdentifierInfo *VarID;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -129,9 +139,8 @@ private:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
};<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
union {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- /// \brief When Kind == EK_Variable, EK_Member or EK_Binding, the VarDecl,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- /// FieldDecl or BindingDecl, respectively.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- ValueDecl *VariableOrMember;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// \brief When Kind == EK_Variable, EK_Member or EK_Binding, the variable.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ VD Variable;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief When Kind == EK_RelatedResult, the ObjectiveC method where<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// result type was implicitly changed to accommodate ARC semantics.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -165,7 +174,7 @@ private:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief Create the initialization entity for a variable.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
InitializedEntity(VarDecl *Var, EntityKind EK = EK_Variable)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
: Kind(EK), Parent(nullptr), Type(Var->getType()),<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- ManglingNumber(0), VariableOrMember(Var) { }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ ManglingNumber(0), Variable{Var, false} { }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief Create the initialization entity for the result of a<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// function, throwing an object, performing an explicit cast, or<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -179,9 +188,11 @@ private:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief Create the initialization entity for a member subobject.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- InitializedEntity(FieldDecl *Member, const InitializedEntity *Parent)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ InitializedEntity(FieldDecl *Member, const InitializedEntity *Parent,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ bool Implicit)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
: Kind(EK_Member), Parent(Parent), Type(Member->getType()),<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- ManglingNumber(0), VariableOrMember(Member) { }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ ManglingNumber(0), Variable{Member, Implicit} {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief Create the initialization entity for an array element.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
InitializedEntity(ASTContext &Context, unsigned Index,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -299,15 +310,17 @@ public:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief Create the initialization entity for a member subobject.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
static InitializedEntity<br class="m_620633608376592462m_8538426202314716646gmail_msg">
InitializeMember(FieldDecl *Member,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- const InitializedEntity *Parent = nullptr) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- return InitializedEntity(Member, Parent);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ const InitializedEntity *Parent = nullptr,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ bool Implicit = false) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return InitializedEntity(Member, Parent, Implicit);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief Create the initialization entity for a member subobject.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
static InitializedEntity<br class="m_620633608376592462m_8538426202314716646gmail_msg">
InitializeMember(IndirectFiel<wbr>dDecl *Member,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- const InitializedEntity *Parent = nullptr) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- return InitializedEntity(Member->getA<wbr>nonField(), Parent);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ const InitializedEntity *Parent = nullptr,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ bool Implicit = false) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return InitializedEntity(Member->getA<wbr>nonField(), Parent, Implicit);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief Create the initialization entity for an array element.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -401,6 +414,12 @@ public:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
getType()->getAsArrayTypeUnsa<wbr>fe());<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// \brief Is this the implicit initialization of a member of a class from<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// a defaulted constructor?<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ bool isImplicitMemberInitializer() const {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return getKind() == EK_Member && Variable.IsImplicitFieldInit;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief Determine the location of the 'return' keyword when initializing<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// the result of a function call.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
SourceLocation getReturnLoc() const {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -708,6 +727,10 @@ public:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief An initialization that "converts" an Objective-C object<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// (not a point to an object) to another Objective-C object type.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
SK_ObjCObjectConversion,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// \brief Array indexing for initialization by elementwise copy.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ SK_ArrayLoopIndex,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// \brief Array initialization by elementwise copy.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ SK_ArrayLoopInit,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief Array initialization (from an array rvalue).<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// This is a GNU C extension.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
SK_ArrayInit,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -1096,6 +1119,9 @@ public:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// always a no-op.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void AddObjCObjectConversionStep(Qu<wbr>alType T);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// \brief Add an array initialization loop step.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ void AddArrayInitLoopStep(QualType T, QualType EltTy);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief Add an array initialization step.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void AddArrayInitStep(QualType T);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/include/clang/Serial<wbr>ization/ASTBitCodes.h<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTBitCodes.h?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/include/clang/<wbr>Serialization/ASTBitCodes.h?<wbr>rev=289413&r1=289412&r2=<wbr>289413&view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/include/clang/Serial<wbr>ization/ASTBitCodes.h (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/include/clang/Serial<wbr>ization/ASTBitCodes.h Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -1292,10 +1292,14 @@ namespace clang {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
EXPR_DESIGNATED_INIT,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief A DesignatedInitUpdateExpr record.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
EXPR_DESIGNATED_INIT_UPDATE,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- /// \brief An ImplicitValueInitExpr record.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- EXPR_IMPLICIT_VALUE_INIT,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief An NoInitExpr record.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
EXPR_NO_INIT,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// \brief An ArrayInitLoopExpr record.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ EXPR_ARRAY_INIT_LOOP,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// \brief An ArrayInitIndexExpr record.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ EXPR_ARRAY_INIT_INDEX,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// \brief An ImplicitValueInitExpr record.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ EXPR_IMPLICIT_VALUE_INIT,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief A VAArgExpr record.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
EXPR_VA_ARG,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief An AddrLabelExpr record.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/lib/AST/ASTDumper.cp<wbr>p<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTDumper.cpp?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/AST/ASTDum<wbr>per.cpp?rev=289413&r1=289412&<wbr>r2=289413&view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/lib/AST/ASTDumper.cp<wbr>p (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/lib/AST/ASTDumper.cp<wbr>p Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -517,6 +517,8 @@ namespace {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void VisitFloatingLiteral(const FloatingLiteral *Node);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void VisitStringLiteral(const StringLiteral *Str);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void VisitInitListExpr(const InitListExpr *ILE);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ void VisitArrayInitLoopExpr(const ArrayInitLoopExpr *ILE);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ void VisitArrayInitIndexExpr(const ArrayInitIndexExpr *ILE);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void VisitUnaryOperator(const UnaryOperator *Node);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void VisitUnaryExprOrTypeTraitExpr(<wbr>const UnaryExprOrTypeTraitExpr *Node);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void VisitMemberExpr(const MemberExpr *Node);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -2024,6 +2026,14 @@ void ASTDumper::VisitInitListExpr(c<wbr>onst<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+void ASTDumper::VisitArrayInitLoopE<wbr>xpr(const ArrayInitLoopExpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ VisitExpr(E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+void ASTDumper::VisitArrayInitIndex<wbr>Expr(const ArrayInitIndexExpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ VisitExpr(E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void ASTDumper::VisitUnaryOperator(<wbr>const UnaryOperator *Node) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
VisitExpr(Node);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
OS << " " << (Node->isPostfix() ? "postfix" : "prefix")<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/lib/AST/Expr.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Expr.cpp?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/AST/Expr.<wbr>cpp?rev=289413&r1=289412&r2=<wbr>289413&view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/lib/AST/Expr.cpp (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/lib/AST/Expr.cpp Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -2899,6 +2899,7 @@ bool Expr::HasSideEffects(const ASTConte<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case UnaryExprOrTypeTraitExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case AddrLabelExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case GNUNullExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case ArrayInitIndexExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case NoInitExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case CXXBoolLiteralExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case CXXNullPtrLiteralExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -2975,6 +2976,7 @@ bool Expr::HasSideEffects(const ASTConte<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case ExtVectorElementExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case DesignatedInitExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case DesignatedInitUpdateExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case ArrayInitLoopExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case ParenListExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case CXXPseudoDestructorExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case CXXStdInitializerListExprClass<wbr>:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/lib/AST/ExprClassifi<wbr>cation.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprClassification.cpp?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/AST/ExprCl<wbr>assification.cpp?rev=289413&<wbr>r1=289412&r2=289413&view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/lib/AST/ExprClassifi<wbr>cation.cpp (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/lib/AST/ExprClassifi<wbr>cation.cpp Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -185,6 +185,8 @@ static Cl::Kinds ClassifyInternal(ASTCon<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::ObjCIndirectCopyRestoreE<wbr>xprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::AtomicExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::CXXFoldExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case Expr::ArrayInitLoopExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case Expr::ArrayInitIndexExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::NoInitExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::DesignatedInitUpdateExpr<wbr>Class:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::CoyieldExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/lib/AST/ExprConstant<wbr>.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprConstant.cpp?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/AST/ExprCo<wbr>nstant.cpp?rev=289413&r1=<wbr>289412&r2=289413&view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/lib/AST/ExprConstant<wbr>.cpp (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/lib/AST/ExprConstant<wbr>.cpp Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -469,6 +469,10 @@ namespace {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// declaration whose initializer is being evaluated, if any.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
APValue *EvaluatingDeclValue;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// The current array initialization index, if we're performing array<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// initialization.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ uint64_t ArrayInitIndex = -1;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// HasActiveDiagnostic - Was the previous diagnostic stored? If so, further<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// notes attached to it will also be stored, otherwise they will not be.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
bool HasActiveDiagnostic;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -803,6 +807,20 @@ namespace {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
bool allowInvalidBaseExpr() const {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
return EvalMode == EM_DesignatorFold;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ class ArrayInitLoopIndex {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ EvalInfo &Info;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ uint64_t OuterIndex;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ public:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ ArrayInitLoopIndex(EvalInfo &Info)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ : Info(Info), OuterIndex(Info.ArrayInitIndex<wbr>) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Info.ArrayInitIndex = 0;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ ~ArrayInitLoopIndex() { Info.ArrayInitIndex = OuterIndex; }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ operator uint64_t&() { return Info.ArrayInitIndex; }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ };<br class="m_620633608376592462m_8538426202314716646gmail_msg">
};<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// Object used to treat all foldable expressions as constant expressions.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -6190,6 +6208,7 @@ namespace {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
return handleCallExpr(E, Result, &This);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
bool VisitInitListExpr(const InitListExpr *E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ bool VisitArrayInitLoopExpr(const ArrayInitLoopExpr *E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
bool VisitCXXConstructExpr(const CXXConstructExpr *E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
bool VisitCXXConstructExpr(const CXXConstructExpr *E,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
const LValue &Subobject,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -6272,6 +6291,35 @@ bool ArrayExprEvaluator::VisitInitL<wbr>istEx<br class="m_620633608376592462m_8538426202314716646gmail_msg">
FillerExpr) && Success;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+bool ArrayExprEvaluator::VisitArray<wbr>InitLoopExpr(const ArrayInitLoopExpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ if (E->getCommonExpr() &&<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ !Evaluate(Info.CurrentCall->cr<wbr>eateTemporary(E->getCommonExpr<wbr>(), false),<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Info, E->getCommonExpr()->getSourceE<wbr>xpr()))<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return false;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ auto *CAT = cast<ConstantArrayType>(E->get<wbr>Type()->castAsArrayTypeUnsafe(<wbr>));<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ uint64_t Elements = CAT->getSize().getZExtValue();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Result = APValue(APValue::UninitArray()<wbr>, Elements, Elements);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ LValue Subobject = This;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Subobject.addArray(Info, E, CAT);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ bool Success = true;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ for (EvalInfo::ArrayInitLoopIndex Index(Info); Index != Elements; ++Index) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ if (!EvaluateInPlace(Result.getAr<wbr>rayInitializedElt(Index),<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Info, Subobject, E->getSubExpr()) ||<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ !HandleLValueArrayAdjustment(I<wbr>nfo, E, Subobject,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CAT->getElementType(), 1)) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ if (!Info.noteFailure())<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return false;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Success = false;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return Success;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
bool ArrayExprEvaluator::VisitCXXCo<wbr>nstructExpr(const CXXConstructExpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
return VisitCXXConstructExpr(E, This, &Result, E->getType());<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -6427,6 +6475,16 @@ public:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
bool VisitObjCBoolLiteralExpr(const ObjCBoolLiteralExpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
return Success(E->getValue(), E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ bool VisitArrayInitIndexExpr(const ArrayInitIndexExpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ if (Info.ArrayInitIndex == uint64_t(-1)) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // We were asked to evaluate this subexpression independent of the<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // enclosing ArrayInitLoopExpr. We can't do that.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Info.FFDiag(E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return false;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return Success(Info.ArrayInitIndex, E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// Note, GNU defines __null as an integer, not a pointer.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
bool VisitGNUNullExpr(const GNUNullExpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -9590,6 +9648,8 @@ static ICEDiag CheckICE(const Expr* E, c<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::CompoundLiteralExprClass<wbr>:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::ExtVectorElementExprClas<wbr>s:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::DesignatedInitExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case Expr::ArrayInitLoopExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case Expr::ArrayInitIndexExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::NoInitExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::DesignatedInitUpdateExpr<wbr>Class:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::ImplicitValueInitExprCla<wbr>ss:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/lib/AST/ItaniumMangl<wbr>e.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ItaniumMangle.cpp?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/AST/Itaniu<wbr>mMangle.cpp?rev=289413&r1=<wbr>289412&r2=289413&view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/lib/AST/ItaniumMangl<wbr>e.cpp (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/lib/AST/ItaniumMangl<wbr>e.cpp Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -3301,6 +3301,8 @@ recurse:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::AddrLabelExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::DesignatedInitUpdateExpr<wbr>Class:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::ImplicitValueInitExprCla<wbr>ss:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case Expr::ArrayInitLoopExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case Expr::ArrayInitIndexExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::NoInitExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::ParenListExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::LambdaExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/lib/AST/StmtPrinter.<wbr>cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtPrinter.cpp?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/AST/StmtPr<wbr>inter.cpp?rev=289413&r1=289412<wbr>&r2=289413&view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/lib/AST/StmtPrinter.<wbr>cpp (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/lib/AST/StmtPrinter.<wbr>cpp Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -1705,6 +1705,18 @@ void StmtPrinter::VisitInitListExpr<wbr>(Init<br class="m_620633608376592462m_8538426202314716646gmail_msg">
OS << "}";<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+void StmtPrinter::VisitArrayInitLoo<wbr>pExpr(ArrayInitLoopExpr *Node) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // There's no way to express this expression in any of our supported<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // languages, so just emit something terse and (hopefully) clear.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ OS << "{";<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ PrintExpr(Node->getSubExpr());<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ OS << "}";<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+void StmtPrinter::VisitArrayInitInd<wbr>exExpr(ArrayInitIndexExpr *Node) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ OS << "*";<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void StmtPrinter::VisitParenListExp<wbr>r(ParenListExpr* Node) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
OS << "(";<br class="m_620633608376592462m_8538426202314716646gmail_msg">
for (unsigned i = 0, e = Node->getNumExprs(); i != e; ++i) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/lib/AST/StmtProfile.<wbr>cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtProfile.cpp?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/AST/StmtPr<wbr>ofile.cpp?rev=289413&r1=289412<wbr>&r2=289413&view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/lib/AST/StmtProfile.<wbr>cpp (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/lib/AST/StmtProfile.<wbr>cpp Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -972,6 +972,14 @@ void StmtProfiler::VisitDesignatedI<wbr>nitUp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
"initializer");<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+void StmtProfiler::VisitArrayInitLo<wbr>opExpr(const ArrayInitLoopExpr *S) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ VisitExpr(S);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+void StmtProfiler::VisitArrayInitIn<wbr>dexExpr(const ArrayInitIndexExpr *S) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ VisitExpr(S);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void StmtProfiler::VisitNoInitExpr(<wbr>const NoInitExpr *S) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
llvm_unreachable("Unexpected NoInitExpr in syntactic form of initializer");<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/lib/CodeGen/CGExprAg<wbr>g.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprAgg.cpp?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/CodeGen/CG<wbr>ExprAgg.cpp?rev=289413&r1=2894<wbr>12&r2=289413&view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/lib/CodeGen/CGExprAg<wbr>g.cpp (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/lib/CodeGen/CGExprAg<wbr>g.cpp Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -164,6 +164,7 @@ public:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void VisitAbstractConditionalOperat<wbr>or(const AbstractConditionalOperator *CO);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void VisitChooseExpr(const ChooseExpr *CE);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void VisitInitListExpr(InitListExpr *E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ void VisitArrayInitLoopExpr(const ArrayInitLoopExpr *E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void VisitImplicitValueInitExpr(Imp<wbr>licitValueInitExpr *E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void VisitNoInitExpr(NoInitExpr *E) { } // Do nothing.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void VisitCXXDefaultArgExpr(CXXDefa<wbr>ultArgExpr *DAE) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -1308,6 +1309,85 @@ void AggExprEmitter::VisitInitListE<wbr>xpr(I<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cleanupDominator->eraseFromPa<wbr>rent();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+void AggExprEmitter::VisitArrayInit<wbr>LoopExpr(const ArrayInitLoopExpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // Emit the common subexpression.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CodeGenFunction::OpaqueValueMa<wbr>pping binding(CGF, E->getCommonExpr());<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Address destPtr = EnsureSlot(E->getType()).getAd<wbr>dress();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ uint64_t numElements = E->getArraySize().getZExtValue<wbr>();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ if (!numElements)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // FIXME: Dig through nested ArrayInitLoopExprs to find the overall array<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // size, and only emit a single loop for a multidimensional array.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // destPtr is an array*. Construct an elementType* by drilling down a level.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ llvm::Value *zero = llvm::ConstantInt::get(CGF.Siz<wbr>eTy, 0);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ llvm::Value *indices[] = {zero, zero};<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ llvm::Value *begin = Builder.CreateInBoundsGEP(dest<wbr>Ptr.getPointer(), indices,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ "arrayinit.begin");<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ QualType elementType = E->getSubExpr()->getType();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CharUnits elementSize = CGF.getContext().getTypeSizeIn<wbr>Chars(elementType);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CharUnits elementAlign =<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ destPtr.getAlignment().alignme<wbr>ntOfArrayElement(elementSize);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // Prepare for a cleanup.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ QualType::DestructionKind dtorKind = elementType.isDestructedType()<wbr>;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Address endOfInit = Address::invalid();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ EHScopeStack::stable_iterator cleanup;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ llvm::Instruction *cleanupDominator = nullptr;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ if (CGF.needsEHCleanup(dtorKind)) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ endOfInit = CGF.CreateTempAlloca(begin->ge<wbr>tType(), CGF.getPointerAlign(),<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ "arrayinit.endOfInit");<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CGF.pushIrregularPartialArrayC<wbr>leanup(begin, endOfInit, elementType,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ elementAlign,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CGF.getDestroyer(dtorKind));<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ cleanup = CGF.EHStack.stable_begin();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ } else {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ dtorKind = QualType::DK_none;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ llvm::BasicBlock *entryBB = Builder.GetInsertBlock();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ llvm::BasicBlock *bodyBB = CGF.createBasicBlock("arrayini<wbr>t.body");<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // Jump into the body.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CGF.EmitBlock(bodyBB);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ llvm::PHINode *index =<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Builder.CreatePHI(zero->getTyp<wbr>e(), 2, "arrayinit.index");<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ index->addIncoming(zero, entryBB);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ llvm::Value *element = Builder.CreateInBoundsGEP(begi<wbr>n, index);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // Tell the EH cleanup that we finished with the last element.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ if (endOfInit.isValid()) Builder.CreateStore(element, endOfInit);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // Emit the actual filler expression.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CodeGenFunction::ArrayInitLoop<wbr>ExprScope Scope(CGF, index);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ LValue elementLV =<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CGF.MakeAddrLValue(Address(ele<wbr>ment, elementAlign), elementType);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ EmitInitializationToLValue(E-><wbr>getSubExpr(), elementLV);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // Move on to the next element.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ llvm::Value *nextIndex = Builder.CreateNUWAdd(<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ index, llvm::ConstantInt::get(CGF.Siz<wbr>eTy, 1), "arrayinit.next");<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ index->addIncoming(nextIndex, Builder.GetInsertBlock());<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // Leave the loop if we're done.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ llvm::Value *done = Builder.CreateICmpEQ(<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ nextIndex, llvm::ConstantInt::get(CGF.Siz<wbr>eTy, numElements),<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ "arrayinit.done");<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ llvm::BasicBlock *endBB = CGF.createBasicBlock("arrayini<wbr>t.end");<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Builder.CreateCondBr(done, endBB, bodyBB);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CGF.EmitBlock(endBB);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // Leave the partial-array cleanup if we entered one.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ if (dtorKind) CGF.DeactivateCleanupBlock(cle<wbr>anup, cleanupDominator);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void AggExprEmitter::VisitDesignate<wbr>dInitUpdateExpr(DesignatedInit<wbr>UpdateExpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
AggValueSlot Dest = EnsureSlot(E->getType());<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/lib/CodeGen/CGExprSc<wbr>alar.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprScalar.cpp?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/CodeGen/CG<wbr>ExprScalar.cpp?rev=289413&r1=<wbr>289412&r2=289413&view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/lib/CodeGen/CGExprSc<wbr>alar.cpp (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/lib/CodeGen/CGExprSc<wbr>alar.cpp Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -311,6 +311,12 @@ public:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Value *VisitInitListExpr(InitListExp<wbr>r *E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Value *VisitArrayInitIndexExpr(Array<wbr>InitIndexExpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ assert(CGF.getArrayInitIndex() &&<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ "ArrayInitIndexExpr not inside an ArrayInitLoopExpr?");<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return CGF.getArrayInitIndex();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Value *VisitImplicitValueInitExpr(co<wbr>nst ImplicitValueInitExpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
return EmitNullValue(E->getType());<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/lib/CodeGen/CodeGenF<wbr>unction.h<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/CodeGen/Co<wbr>deGenFunction.h?rev=289413&r1=<wbr>289412&r2=289413&view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/lib/CodeGen/CodeGenF<wbr>unction.h (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/lib/CodeGen/CodeGenF<wbr>unction.h Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -918,6 +918,17 @@ public:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
e->getCommon());<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// Build the opaque value mapping for an OpaqueValueExpr whose source<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// expression is set to the expression the OVE represents.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ OpaqueValueMapping(CodeGenFunc<wbr>tion &CGF, const OpaqueValueExpr *OV)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ : CGF(CGF) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ if (OV) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ assert(OV->getSourceExpr() && "wrong form of OpaqueValueMapping used "<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ "for OVE with no source expression");<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Data = OpaqueValueMappingData::bind(C<wbr>GF, OV, OV->getSourceExpr());<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
OpaqueValueMapping(CodeGenFun<wbr>ction &CGF,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
const OpaqueValueExpr *opaqueValue,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
LValue lvalue)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -1183,6 +1194,23 @@ public:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
CharUnits OldCXXThisAlignment;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
};<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// The scope of an ArrayInitLoopExpr. Within this scope, the value of the<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// current loop index is overridden.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ class ArrayInitLoopExprScope {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ public:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ ArrayInitLoopExprScope(CodeGen<wbr>Function &CGF, llvm::Value *Index)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ : CGF(CGF), OldArrayInitIndex(CGF.ArrayIni<wbr>tIndex) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CGF.ArrayInitIndex = Index;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ ~ArrayInitLoopExprScope() {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CGF.ArrayInitIndex = OldArrayInitIndex;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ private:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CodeGenFunction &CGF;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ llvm::Value *OldArrayInitIndex;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ };<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
class InlinedInheritingConstructorSc<wbr>ope {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
public:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
InlinedInheritingConstructorS<wbr>cope(CodeGenFunction &CGF, GlobalDecl GD)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -1251,6 +1279,10 @@ private:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// this expression.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Address CXXDefaultInitExprThis = Address::invalid();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// The current array initialization index when evaluating an<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// ArrayInitIndexExpr within an ArrayInitLoopExpr.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ llvm::Value *ArrayInitIndex = nullptr;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// The values of function arguments to use when evaluating<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// CXXInheritedCtorInitExprs within this context.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
CallArgList CXXInheritedCtorInitExprArgs;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -1953,6 +1985,9 @@ public:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
return it->second;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /// Get the index of the current ArrayInitLoopExpr, if any.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ llvm::Value *getArrayInitIndex() { return ArrayInitIndex; }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// getAccessedFieldNo - Given an encoded value and a result number, return<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// the input field number being accessed.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
static unsigned getAccessedFieldNo(unsigned Idx, const llvm::Constant *Elts);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/lib/Sema/SemaExcepti<wbr>onSpec.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExceptionSpec.cpp?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/Sema/SemaE<wbr>xceptionSpec.cpp?rev=289413&<wbr>r1=289412&r2=289413&view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/lib/Sema/SemaExcepti<wbr>onSpec.cpp (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/lib/Sema/SemaExcepti<wbr>onSpec.cpp Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -1166,6 +1166,7 @@ CanThrowResult Sema::canThrow(const Expr<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::ExprWithCleanupsClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::ExtVectorElementExprClas<wbr>s:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::InitListExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case Expr::ArrayInitLoopExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::MemberExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::ObjCIsaExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::ObjCIvarRefExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -1259,6 +1260,7 @@ CanThrowResult Sema::canThrow(const Expr<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::ImaginaryLiteralClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::ImplicitValueInitExprCla<wbr>ss:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::IntegerLiteralClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case Expr::ArrayInitIndexExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::NoInitExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::ObjCEncodeExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Expr::ObjCStringLiteralClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/lib/Sema/SemaInit.cp<wbr>p<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaInit.cpp?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/Sema/SemaI<wbr>nit.cpp?rev=289413&r1=289412&<wbr>r2=289413&view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/lib/Sema/SemaInit.cp<wbr>p (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/lib/Sema/SemaInit.cp<wbr>p Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -2910,7 +2910,7 @@ DeclarationName InitializedEntity::getNa<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case EK_Variable:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case EK_Member:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case EK_Binding:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- return VariableOrMember->getDeclName(<wbr>);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return Variable.VariableOrMember->get<wbr>DeclName();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case EK_LambdaCapture:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
return DeclarationName(Capture.VarID)<wbr>;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -2938,7 +2938,7 @@ ValueDecl *InitializedEntity::getDecl()<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case EK_Variable:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case EK_Member:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case EK_Binding:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- return VariableOrMember;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return Variable.VariableOrMember;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case EK_Parameter:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case EK_Parameter_CF_Audited:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -3065,6 +3065,8 @@ void InitializationSequence::Step::<wbr>Destr<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case SK_CAssignment:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case SK_StringInit:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case SK_ObjCObjectConversion:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case SK_ArrayLoopIndex:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case SK_ArrayLoopInit:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case SK_ArrayInit:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case SK_ParenthesizedArrayInit:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case SK_PassByIndirectCopyRestore:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -3307,6 +3309,17 @@ void InitializationSequence::AddArr<wbr>ayIni<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Steps.push_back(S);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+void InitializationSequence::AddArr<wbr>ayInitLoopStep(QualType T, QualType EltT) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Step S;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ S.Kind = SK_ArrayLoopIndex;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ S.Type = EltT;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Steps.insert(Steps.begin(), S);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ S.Kind = SK_ArrayLoopInit;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ S.Type = T;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Steps.push_back(S);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void InitializationSequence::AddPar<wbr>enthesizedArrayInitStep(QualTy<wbr>pe T) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Step S;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
S.Kind = SK_ParenthesizedArrayInit;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -3552,6 +3565,9 @@ ResolveConstructorOverload(Sem<wbr>a &S, Sour<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \brief Attempt initialization by constructor (C++ [dcl.init]), which<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// enumerates the constructors of the initialized entity and performs overload<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// resolution to select the best.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// \param DestType The destination class type.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// \param DestArrayType The destination type, which is either DestType or<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// a (possibly multidimensional) array of DestType.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \param IsListInit Is this list-initialization?<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// \param IsInitListCopy Is this non-list-initialization resulting from a<br class="m_620633608376592462m_8538426202314716646gmail_msg">
/// list-initialization from {x} where x is the same<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -3560,6 +3576,7 @@ static void TryConstructorInitialization<br class="m_620633608376592462m_8538426202314716646gmail_msg">
const InitializedEntity &Entity,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
const InitializationKind &Kind,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
MultiExprArg Args, QualType DestType,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ QualType DestArrayType,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
InitializationSequence &Sequence,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
bool IsListInit = false,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
bool IsInitListCopy = false) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -3703,7 +3720,7 @@ static void TryConstructorInitialization<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// subsumed by the initialization.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
bool HadMultipleCandidates = (CandidateSet.size() > 1);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Sequence.AddConstructorInitia<wbr>lizationStep(<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- Best->FoundDecl, CtorDecl, DestType, HadMultipleCandidates,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Best->FoundDecl, CtorDecl, DestArrayType, HadMultipleCandidates,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
IsListInit | IsInitListCopy, AsInitializerList);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -3871,8 +3888,9 @@ static void TryListInitialization(Sema &<br class="m_620633608376592462m_8538426202314716646gmail_msg">
S.IsDerivedFrom(InitList->get<wbr>LocStart(), InitType, DestType)) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Expr *InitListAsExpr = InitList;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
TryConstructorInitialization(<wbr>S, Entity, Kind, InitListAsExpr, DestType,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- Sequence, /*InitListSyntax*/ false,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- /*IsInitListCopy*/ true);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ DestType, Sequence,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /*InitListSyntax*/false,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /*IsInitListCopy*/true);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
return;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -3927,7 +3945,7 @@ static void TryListInitialization(Sema &<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// - Otherwise, if T is a class type, constructors are considered.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Expr *InitListAsExpr = InitList;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
TryConstructorInitialization(<wbr>S, Entity, Kind, InitListAsExpr, DestType,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- Sequence, /*InitListSyntax*/ true);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ DestType, Sequence, /*InitListSyntax*/true);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
} else<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Sequence.SetFailed(Initializa<wbr>tionSequence::FK_InitListBadDe<wbr>stinationType);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
return;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -4580,8 +4598,10 @@ static void TryValueInitialization(Sema<br class="m_620633608376592462m_8538426202314716646gmail_msg">
MultiExprArg Args(&InitListAsExpr, InitList ? 1 : 0);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
bool InitListSyntax = InitList;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- return TryConstructorInitialization(S<wbr>, Entity, Kind, Args, T, Sequence,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- InitListSyntax);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // FIXME: Instead of creating a CXXConstructExpr of non-array type here,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // wrap a class-typed CXXConstructExpr in an ArrayInitLoopExpr.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return TryConstructorInitialization(<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ S, Entity, Kind, Args, T, Entity.getType(), Sequence, InitListSyntax);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -4604,7 +4624,8 @@ static void TryDefaultInitialization(Sem<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// constructor for T is called (and the initialization is ill-formed if<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// T has no accessible default constructor);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
if (DestType->isRecordType() && S.getLangOpts().CPlusPlus) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- TryConstructorInitialization(S<wbr>, Entity, Kind, None, DestType, Sequence);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ TryConstructorInitialization(S<wbr>, Entity, Kind, None, DestType,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Entity.getType(), Sequence);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
return;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -5030,6 +5051,42 @@ static bool isExprAnUnaddressableFunctio<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cast<FunctionDecl>(DRE->getDe<wbr>cl()));<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// Determine whether we can perform an elementwise array copy for this kind<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+/// of entity.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+static bool canPerformArrayCopy(const InitializedEntity &Entity) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ switch (Entity.getKind()) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case InitializedEntity::EK_LambdaCa<wbr>pture:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // C++ [expr.prim.lambda]p24:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // For array members, the array elements are direct-initialized in<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // increasing subscript order.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return true;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case InitializedEntity::EK_Variable<wbr>:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // C++ [dcl.decomp]p1:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // [...] each element is copy-initialized or direct-initialized from the<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // corresponding element of the assignment-expression [...]<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return isa<DecompositionDecl>(Entity.<wbr>getDecl());<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case InitializedEntity::EK_Member:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // C++ [class.copy.ctor]p14:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // - if the member is an array, each element is direct-initialized with<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // the corresponding subobject of x<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return Entity.isImplicitMemberInitial<wbr>izer();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case InitializedEntity::EK_ArrayEle<wbr>ment:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // All the above cases are intended to apply recursively, even though none<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // of them actually say that.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ if (auto *E = Entity.getParent())<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return canPerformArrayCopy(*E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ break;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ default:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ break;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return false;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void InitializationSequence::Initia<wbr>lizeFrom(Sema &S,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
const InitializedEntity &Entity,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
const InitializationKind &Kind,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -5152,6 +5209,34 @@ void InitializationSequence::Initia<wbr>lizeF<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // Some kinds of initialization permit an array to be initialized from<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // another array of the same type, and perform elementwise initialization.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ if (Initializer && isa<ConstantArrayType>(DestAT) &&<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ S.Context.hasSameUnqualifiedTy<wbr>pe(Initializer->getType(),<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Entity.getType()) &&<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ canPerformArrayCopy(Entity)) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // If source is a prvalue, use it directly.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ if (Initializer->getValueKind() == VK_RValue) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // FIXME: This produces a bogus extwarn<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ AddArrayInitStep(DestType);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ // Emit element-at-a-time copy loop.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ InitializedEntity Element =<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ InitializedEntity::InitializeE<wbr>lement(S.Context, 0, Entity);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ QualType InitEltT =<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Context.getAsArrayType(Initial<wbr>izer->getType())->getElementTy<wbr>pe();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ OpaqueValueExpr OVE(SourceLocation(), InitEltT,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Initializer->getValueKind());<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Expr *OVEAsExpr = &OVE;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ InitializeFrom(S, Element, Kind, OVEAsExpr, TopLevelOfInitList,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ TreatUnavailableAsInvalid);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ if (!Failed())<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ AddArrayInitLoopStep(Entity.ge<wbr>tType(), InitEltT);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// Note: as an GNU C extension, we allow initialization of an<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// array from a compound literal that creates an array of the same<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// type, so long as the initializer has no side effects.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -5225,7 +5310,7 @@ void InitializationSequence::Initia<wbr>lizeF<br class="m_620633608376592462m_8538426202314716646gmail_msg">
(Context.hasSameUnqualifiedTyp<wbr>e(SourceType, DestType) ||<br class="m_620633608376592462m_8538426202314716646gmail_msg">
S.IsDerivedFrom(Initializer-><wbr>getLocStart(), SourceType, DestType))))<br class="m_620633608376592462m_8538426202314716646gmail_msg">
TryConstructorInitialization(<wbr>S, Entity, Kind, Args,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- DestType, *this);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ DestType, DestType, *this);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// - Otherwise (i.e., for the remaining copy-initialization cases),<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// user-defined conversion sequences that can convert from the source<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// type to the destination type or (when a conversion function is<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -5842,7 +5927,7 @@ PerformConstructorInitializati<wbr>on(Sema &S<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// If the entity allows NRVO, mark the construction as elidable<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// unconditionally.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
if (Entity.allowsNRVO())<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- CurInit = S.BuildCXXConstructExpr(Loc, Entity.getType(),<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CurInit = S.BuildCXXConstructExpr(Loc, Step.Type,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Step.Function.FoundDecl,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Constructor, /*Elidable=*/true,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
ConstructorArgs,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -5853,7 +5938,7 @@ PerformConstructorInitializati<wbr>on(Sema &S<br class="m_620633608376592462m_8538426202314716646gmail_msg">
ConstructKind,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
ParenOrBraceRange);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
else<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- CurInit = S.BuildCXXConstructExpr(Loc, Entity.getType(),<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CurInit = S.BuildCXXConstructExpr(Loc, Step.Type,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Step.Function.FoundDecl,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Constructor,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
ConstructorArgs,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -6403,6 +6488,7 @@ InitializationSequence::Perfor<wbr>m(Sema &S,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Entity.getType();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
ExprResult CurInit((Expr *)nullptr);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ SmallVector<Expr*, 4> ArrayLoopCommonExprs;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// For initialization steps that start with a single initializer,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// grab the only argument out the Args and place it into the "current"<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -6430,6 +6516,8 @@ InitializationSequence::Perfor<wbr>m(Sema &S,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case SK_CAssignment:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case SK_StringInit:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case SK_ObjCObjectConversion:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case SK_ArrayLoopIndex:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case SK_ArrayLoopInit:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case SK_ArrayInit:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case SK_ParenthesizedArrayInit:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case SK_PassByIndirectCopyRestore:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -6813,13 +6901,15 @@ InitializationSequence::Perfor<wbr>m(Sema &S,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
bool UseTemporary = Entity.getType()->isReferenceT<wbr>ype();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
bool IsStdInitListInit =<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Step->Kind == SK_StdInitializerListConstruct<wbr>orCall;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Expr *Source = CurInit.get();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
CurInit = PerformConstructorInitializati<wbr>on(<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- S, UseTemporary ? TempEntity : Entity, Kind, Args, *Step,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ S, UseTemporary ? TempEntity : Entity, Kind,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Source ? MultiExprArg(Source) : Args, *Step,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
ConstructorInitRequiresZeroIn<wbr>it,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- /*IsListInitialization*/IsStdI<wbr>nitListInit,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- /*IsStdInitListInitialization*<wbr>/IsStdInitListInit,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- /*LBraceLoc*/SourceLocation(),<br class="m_620633608376592462m_8538426202314716646gmail_msg">
- /*RBraceLoc*/SourceLocation())<wbr>;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /*IsListInitialization*/ IsStdInitListInit,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /*IsStdInitListInitialization*<wbr>/ IsStdInitListInit,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /*LBraceLoc*/ SourceLocation(),<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ /*RBraceLoc*/ SourceLocation());<br class="m_620633608376592462m_8538426202314716646gmail_msg">
break;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -6898,6 +6988,28 @@ InitializationSequence::Perfor<wbr>m(Sema &S,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
CurInit.get()->getValueKind()<wbr>);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
break;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case SK_ArrayLoopIndex: {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Expr *Cur = CurInit.get();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Expr *BaseExpr = new (S.Context)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ OpaqueValueExpr(Cur->getExprLo<wbr>c(), Cur->getType(),<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Cur->getValueKind(), Cur->getObjectKind(), Cur);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Expr *IndexExpr =<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ new (S.Context) ArrayInitIndexExpr(S.Context.g<wbr>etSizeType());<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CurInit = S.CreateBuiltinArraySubscriptE<wbr>xpr(<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ BaseExpr, Kind.getLocation(), IndexExpr, Kind.getLocation());<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ ArrayLoopCommonExprs.push_back<wbr>(BaseExpr);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ break;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case SK_ArrayLoopInit: {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ assert(!ArrayLoopCommonExprs.e<wbr>mpty() &&<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ "mismatched SK_ArrayLoopIndex and SK_ArrayLoopInit");<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Expr *Common = ArrayLoopCommonExprs.pop_back_<wbr>val();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CurInit = new (S.Context) ArrayInitLoopExpr(Step->Type, Common,<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ CurInit.get());<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ break;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ }<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case SK_ArrayInit:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// Okay: we checked everything before creating this step. Note that<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// this is a GNU extension.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -7851,6 +7963,14 @@ void InitializationSequence::dump(r<wbr>aw_os<br class="m_620633608376592462m_8538426202314716646gmail_msg">
OS << "Objective-C object conversion";<br class="m_620633608376592462m_8538426202314716646gmail_msg">
break;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case SK_ArrayLoopIndex:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ OS << "indexing for array initialization loop";<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ break;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case SK_ArrayLoopInit:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ OS << "array initialization loop";<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ break;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case SK_ArrayInit:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
OS << "array initialization";<br class="m_620633608376592462m_8538426202314716646gmail_msg">
break;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/lib/Sema/TreeTransfo<wbr>rm.h<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TreeTransform.h?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/Sema/TreeT<wbr>ransform.h?rev=289413&r1=28941<wbr>2&r2=289413&view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/lib/Sema/TreeTransfo<wbr>rm.h (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/lib/Sema/TreeTransfo<wbr>rm.h Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -3221,6 +3221,9 @@ ExprResult TreeTransform<Derived>::Trans<br class="m_620633608376592462m_8538426202314716646gmail_msg">
if (ExprWithCleanups *ExprTemp = dyn_cast<ExprWithCleanups>(Ini<wbr>t))<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Init = ExprTemp->getSubExpr();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ if (auto *AIL = dyn_cast<ArrayInitLoopExpr>(In<wbr>it))<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Init = AIL->getCommonExpr();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
if (MaterializeTemporaryExpr *MTE = dyn_cast<MaterializeTemporaryE<wbr>xpr>(Init))<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Init = MTE->GetTemporaryExpr();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -9045,6 +9048,20 @@ TreeTransform<Derived>::Transf<wbr>ormNoInitE<br class="m_620633608376592462m_8538426202314716646gmail_msg">
return ExprError();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+template<typename Derived><br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ExprResult<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+TreeTransform<Derived>::Trans<wbr>formArrayInitLoopExpr(ArrayIni<wbr>tLoopExpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ llvm_unreachable("Unexpected ArrayInitLoopExpr outside of initializer");<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return ExprError();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+template<typename Derived><br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ExprResult<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+TreeTransform<Derived>::Trans<wbr>formArrayInitIndexExpr(ArrayIn<wbr>itIndexExpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ llvm_unreachable("Unexpected ArrayInitIndexExpr outside of initializer");<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ return ExprError();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
template<typename Derived><br class="m_620633608376592462m_8538426202314716646gmail_msg">
ExprResult<br class="m_620633608376592462m_8538426202314716646gmail_msg">
TreeTransform<Derived>::Trans<wbr>formImplicitValueInitExpr(<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/lib/Serialization/AS<wbr>TReaderStmt.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderStmt.cpp?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/Serializat<wbr>ion/ASTReaderStmt.cpp?rev=<wbr>289413&r1=289412&r2=289413&<wbr>view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/lib/Serialization/AS<wbr>TReaderStmt.cpp (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/lib/Serialization/AS<wbr>TReaderStmt.cpp Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -845,6 +845,16 @@ void ASTStmtReader::VisitNoInitExpr<wbr>(NoIn<br class="m_620633608376592462m_8538426202314716646gmail_msg">
VisitExpr(E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+void ASTStmtReader::VisitArrayInitL<wbr>oopExpr(ArrayInitLoopExpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ VisitExpr(E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ E->SubExprs[0] = Reader.ReadSubExpr();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ E->SubExprs[1] = Reader.ReadSubExpr();<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+void ASTStmtReader::VisitArrayInitI<wbr>ndexExpr(ArrayInitIndexExpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ VisitExpr(E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void ASTStmtReader::VisitImplicitVa<wbr>lueInitExpr(ImplicitValueInitE<wbr>xpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
VisitExpr(E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -3231,6 +3241,14 @@ Stmt *ASTReader::ReadStmtFromStream<wbr>(Modu<br class="m_620633608376592462m_8538426202314716646gmail_msg">
S = new (Context) NoInitExpr(Empty);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
break;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case EXPR_ARRAY_INIT_LOOP:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ S = new (Context) ArrayInitLoopExpr(Empty);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ break;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case EXPR_ARRAY_INIT_INDEX:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ S = new (Context) ArrayInitIndexExpr(Empty);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ break;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case EXPR_VA_ARG:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
S = new (Context) VAArgExpr(Empty);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
break;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/lib/Serialization/AS<wbr>TWriterStmt.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriterStmt.cpp?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/Serializat<wbr>ion/ASTWriterStmt.cpp?rev=<wbr>289413&r1=289412&r2=289413&<wbr>view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/lib/Serialization/AS<wbr>TWriterStmt.cpp (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/lib/Serialization/AS<wbr>TWriterStmt.cpp Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -792,6 +792,18 @@ void ASTStmtWriter::VisitNoInitExpr<wbr>(NoIn<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Code = serialization::EXPR_NO_INIT;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+void ASTStmtWriter::VisitArrayInitL<wbr>oopExpr(ArrayInitLoopExpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ VisitExpr(E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Record.AddStmt(E->SubExprs[0])<wbr>;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Record.AddStmt(E->SubExprs[1])<wbr>;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Code = serialization::EXPR_ARRAY_INIT<wbr>_LOOP;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+void ASTStmtWriter::VisitArrayInitI<wbr>ndexExpr(ArrayInitIndexExpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ VisitExpr(E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ Code = serialization::EXPR_ARRAY_INIT<wbr>_INDEX;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+}<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+<br class="m_620633608376592462m_8538426202314716646gmail_msg">
void ASTStmtWriter::VisitImplicitVa<wbr>lueInitExpr(ImplicitValueInitE<wbr>xpr *E) {<br class="m_620633608376592462m_8538426202314716646gmail_msg">
VisitExpr(E);<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Code = serialization::EXPR_IMPLICIT_V<wbr>ALUE_INIT;<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/lib/StaticAnalyzer/C<wbr>ore/ExprEngine.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/StaticAnal<wbr>yzer/Core/ExprEngine.cpp?rev=<wbr>289413&r1=289412&r2=289413&<wbr>view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/lib/StaticAnalyzer/C<wbr>ore/ExprEngine.cpp (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/lib/StaticAnalyzer/C<wbr>ore/ExprEngine.cpp Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -905,6 +905,8 @@ void ExprEngine::Visit(const Stmt *S, Ex<br class="m_620633608376592462m_8538426202314716646gmail_msg">
// Cases not handled yet; but will handle some day.<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Stmt::DesignatedInitExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Stmt::DesignatedInitUpdateExpr<wbr>Class:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case Stmt::ArrayInitLoopExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case Stmt::ArrayInitIndexExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Stmt::ExtVectorElementExprClas<wbr>s:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Stmt::ImaginaryLiteralClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Stmt::ObjCAtCatchStmtClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
Modified: cfe/trunk/tools/libclang/CXCur<wbr>sor.cpp<br class="m_620633608376592462m_8538426202314716646gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CXCursor.cpp?rev=289413&r1=289412&r2=289413&view=diff" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/tools/libclang<wbr>/CXCursor.cpp?rev=289413&r1=<wbr>289412&r2=289413&view=diff</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_620633608376592462m_8538426202314716646gmail_msg">
--- cfe/trunk/tools/libclang/CXCur<wbr>sor.cpp (original)<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+++ cfe/trunk/tools/libclang/CXCur<wbr>sor.cpp Sun Dec 11 20:53:20 2016<br class="m_620633608376592462m_8538426202314716646gmail_msg">
@@ -243,6 +243,8 @@ CXCursor cxcursor::MakeCXCursor(const St<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Stmt::ChooseExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Stmt::DesignatedInitExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Stmt::DesignatedInitUpdateExpr<wbr>Class:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case Stmt::ArrayInitLoopExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
+ case Stmt::ArrayInitIndexExprClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Stmt::ExprWithCleanupsClass:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Stmt::ExpressionTraitExprClass<wbr>:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
case Stmt::ExtVectorElementExprClas<wbr>s:<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<br class="m_620633608376592462m_8538426202314716646gmail_msg">
______________________________<wbr>_________________<br class="m_620633608376592462m_8538426202314716646gmail_msg">
cfe-commits mailing list<br class="m_620633608376592462m_8538426202314716646gmail_msg">
<a href="mailto:cfe-commits@lists.llvm.org" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">cfe-commits@lists.llvm.org</a><br class="m_620633608376592462m_8538426202314716646gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" class="m_620633608376592462m_8538426202314716646gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><span class="HOEnZb"><font color="#888888"><br class="m_620633608376592462m_8538426202314716646gmail_msg">
</font></span></blockquote></div></div></div><span class="HOEnZb"><font color="#888888"><span class="m_620633608376592462HOEnZb"><font color="#888888"><div dir="ltr">-- <br></div><div data-smartmail="gmail_signature"><div dir="ltr">Mike<br>Sent from phone</div></div>
</font></span></font></span></blockquote></div><br></div></div>
<br>______________________________<wbr>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div>