diff options
author | Reid Kleckner <rnk@google.com> | 2017-02-14 21:38:17 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2017-02-14 21:38:17 +0000 |
commit | fb9f647e5f94d436a6883ea619be07fb70c5d190 (patch) | |
tree | 66c7ebfa6e66c804fa153579b453ce7a23910966 /clang/lib/Parse/ParseStmtAsm.cpp | |
parent | 2e945ebb13a6017a798d3ec9d305d12d770bdc58 (diff) | |
download | bcm5719-llvm-fb9f647e5f94d436a6883ea619be07fb70c5d190.tar.gz bcm5719-llvm-fb9f647e5f94d436a6883ea619be07fb70c5d190.zip |
MS inline asm: Filter MXCSR out of the inferred clobber list
Since r295004, LLVM has started modelling this new register, but we
don't have GCC constraint inline asm spellings for it yet.
llvm-svn: 295107
Diffstat (limited to 'clang/lib/Parse/ParseStmtAsm.cpp')
-rw-r--r-- | clang/lib/Parse/ParseStmtAsm.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/clang/lib/Parse/ParseStmtAsm.cpp b/clang/lib/Parse/ParseStmtAsm.cpp index 59e96d982a0..85cd22fef42 100644 --- a/clang/lib/Parse/ParseStmtAsm.cpp +++ b/clang/lib/Parse/ParseStmtAsm.cpp @@ -621,10 +621,11 @@ StmtResult Parser::ParseMicrosoftAsmStatement(SourceLocation AsmLoc) { MII.get(), IP.get(), Callback)) return StmtError(); - // Filter out "fpsw". Clang doesn't accept it, and it always lists flags and - // fpsr as clobbers. - auto End = std::remove(Clobbers.begin(), Clobbers.end(), "fpsw"); - Clobbers.erase(End, Clobbers.end()); + // Filter out "fpsw" and "mxcsr". They aren't valid GCC asm clobber + // constraints. Clang always adds fpsr to the clobber list anyway. + llvm::erase_if(Clobbers, [](const std::string &C) { + return C == "fpsw" || C == "mxcsr"; + }); // Build the vector of clobber StringRefs. ClobberRefs.insert(ClobberRefs.end(), Clobbers.begin(), Clobbers.end()); |