summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseStmtAsm.cpp
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2017-02-14 21:38:17 +0000
committerReid Kleckner <rnk@google.com>2017-02-14 21:38:17 +0000
commitfb9f647e5f94d436a6883ea619be07fb70c5d190 (patch)
tree66c7ebfa6e66c804fa153579b453ce7a23910966 /clang/lib/Parse/ParseStmtAsm.cpp
parent2e945ebb13a6017a798d3ec9d305d12d770bdc58 (diff)
downloadbcm5719-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.cpp9
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());
OpenPOWER on IntegriCloud