r308897 - Work around an MSVC2017 update 3 codegen bug.
Nico Weber via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 24 09:54:11 PDT 2017
Author: nico
Date: Mon Jul 24 09:54:11 2017
New Revision: 308897
URL: http://llvm.org/viewvc/llvm-project?rev=308897&view=rev
Log:
Work around an MSVC2017 update 3 codegen bug.
C2017 update 3 produces a clang that crashes when compiling clang. Disabling
optimizations for StmtProfiler::VisitCXXOperatorCallExpr() makes the crash go
away.
Patch from Bruce Dawson <brucedawson at chromium.org>!
https://reviews.llvm.org/D35757
Modified:
cfe/trunk/lib/AST/StmtProfile.cpp
Modified: cfe/trunk/lib/AST/StmtProfile.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtProfile.cpp?rev=308897&r1=308896&r2=308897&view=diff
==============================================================================
--- cfe/trunk/lib/AST/StmtProfile.cpp (original)
+++ cfe/trunk/lib/AST/StmtProfile.cpp Mon Jul 24 09:54:11 2017
@@ -1412,6 +1412,15 @@ static Stmt::StmtClass DecodeOperatorCal
llvm_unreachable("Invalid overloaded operator expression");
}
+#if defined(_MSC_VER)
+#if _MSC_VER == 1911
+// Work around https://developercommunity.visualstudio.com/content/problem/84002/clang-cl-when-built-with-vc-2017-crashes-cause-vc.html
+// MSVC 2017 update 3 miscompiles this function, and a clang built with it
+// will crash in stage 2 of a bootstrap build.
+#pragma optimize("", off)
+#endif
+#endif
+
void StmtProfiler::VisitCXXOperatorCallExpr(const CXXOperatorCallExpr *S) {
if (S->isTypeDependent()) {
// Type-dependent operator calls are profiled like their underlying
@@ -1444,6 +1453,12 @@ void StmtProfiler::VisitCXXOperatorCallE
ID.AddInteger(S->getOperator());
}
+#if defined(_MSC_VER)
+#if _MSC_VER == 1911
+#pragma optimize("", on)
+#endif
+#endif
+
void StmtProfiler::VisitCXXMemberCallExpr(const CXXMemberCallExpr *S) {
VisitCallExpr(S);
}
More information about the cfe-commits
mailing list