summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGClass.cpp
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2017-02-01 02:21:07 +0000
committerHans Wennborg <hans@hanshq.net>2017-02-01 02:21:07 +0000
commit27dcc6c0e2a7ca244f3acaef327d3f244ccadfce (patch)
treec32bfbb1368fd0d2276393e61ce7ec9d27cdec01 /clang/lib/CodeGen/CGClass.cpp
parente72c69bb0a66641e6322be21e559e393ae761ae6 (diff)
downloadbcm5719-llvm-27dcc6c0e2a7ca244f3acaef327d3f244ccadfce.tar.gz
bcm5719-llvm-27dcc6c0e2a7ca244f3acaef327d3f244ccadfce.zip
clang-cl: Evaluate arguments left-to-right in constructor call with initializer list (PR31831)
clang-cl would evaluate the arguments right-to-left (see PR), and for non-Windows targets I suppose we only got it because we were already emitting left-to-right in CodeGenFunction::EmitCallArgs. Differential Revision: https://reviews.llvm.org/D29350 llvm-svn: 293732
Diffstat (limited to 'clang/lib/CodeGen/CGClass.cpp')
-rw-r--r--clang/lib/CodeGen/CGClass.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGClass.cpp b/clang/lib/CodeGen/CGClass.cpp
index 05d05673952..3152b6b0758 100644
--- a/clang/lib/CodeGen/CGClass.cpp
+++ b/clang/lib/CodeGen/CGClass.cpp
@@ -1950,7 +1950,11 @@ void CodeGenFunction::EmitCXXConstructorCall(const CXXConstructorDecl *D,
// Add the rest of the user-supplied arguments.
const FunctionProtoType *FPT = D->getType()->castAs<FunctionProtoType>();
- EmitCallArgs(Args, FPT, E->arguments(), E->getConstructor());
+ EvaluationOrder Order = E->isListInitialization()
+ ? EvaluationOrder::ForceLeftToRight
+ : EvaluationOrder::Default;
+ EmitCallArgs(Args, FPT, E->arguments(), E->getConstructor(),
+ /*ParamsToSkip*/ 0, Order);
EmitCXXConstructorCall(D, Type, ForVirtualBase, Delegating, This, Args);
}
OpenPOWER on IntegriCloud