forked from OSchip/llvm-project
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@chromium.org>! https://reviews.llvm.org/D35757 llvm-svn: 308897
This commit is contained in:
parent
2434d45b85
commit
f56f446f50
|
@ -1412,6 +1412,15 @@ static Stmt::StmtClass DecodeOperatorCall(const CXXOperatorCallExpr *S,
|
|||
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::VisitCXXOperatorCallExpr(const CXXOperatorCallExpr *S) {
|
|||
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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue