summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2015-06-05 18:03:58 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2015-06-05 18:03:58 +0000
commitcdffc36c119a7933c3e8871ccd0028f41d5b5feb (patch)
tree1fd4d7df8ca04e1445257ac4e60a0e3ff545d09c /clang/lib
parent6679fc1a791ed1f673be9143ed5a07755ae80767 (diff)
downloadbcm5719-llvm-cdffc36c119a7933c3e8871ccd0028f41d5b5feb.tar.gz
bcm5719-llvm-cdffc36c119a7933c3e8871ccd0028f41d5b5feb.zip
[AST] There is no message for C++1z-style static_assert
We would crash in the DeclPrinter trying to pretty-print the static_assert message. C++1z-style assertions don't have a message so we would crash. This fixes PR23756. llvm-svn: 239170
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/AST/DeclPrinter.cpp6
-rw-r--r--clang/lib/Headers/Intrin.h9
2 files changed, 6 insertions, 9 deletions
diff --git a/clang/lib/AST/DeclPrinter.cpp b/clang/lib/AST/DeclPrinter.cpp
index c0f3e17693d..d8cd40ec9c6 100644
--- a/clang/lib/AST/DeclPrinter.cpp
+++ b/clang/lib/AST/DeclPrinter.cpp
@@ -733,8 +733,10 @@ void DeclPrinter::VisitImportDecl(ImportDecl *D) {
void DeclPrinter::VisitStaticAssertDecl(StaticAssertDecl *D) {
Out << "static_assert(";
D->getAssertExpr()->printPretty(Out, nullptr, Policy, Indentation);
- Out << ", ";
- D->getMessage()->printPretty(Out, nullptr, Policy, Indentation);
+ if (StringLiteral *SL = D->getMessage()) {
+ Out << ", ";
+ SL->printPretty(Out, nullptr, Policy, Indentation);
+ }
Out << ")";
}
diff --git a/clang/lib/Headers/Intrin.h b/clang/lib/Headers/Intrin.h
index 727a55e5b76..9592cccb15c 100644
--- a/clang/lib/Headers/Intrin.h
+++ b/clang/lib/Headers/Intrin.h
@@ -546,13 +546,8 @@ _bittestandset(long *a, long b) {
#if defined(__i386__) || defined(__x86_64__)
static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))
_interlockedbittestandset(long volatile *__BitBase, long __BitPos) {
- unsigned char __Res;
- __asm__ ("xor %0, %0\n"
- "lock bts %2, %1\n"
- "setc %0\n"
- : "=r" (__Res), "+m"(*__BitBase)
- : "Ir"(__BitPos));
- return __Res;
+ long __OldVal = __atomic_fetch_or(__BitBase, 1 << __BitPos, 5);
+ return (__OldVal >> __BitPos) & 1;
}
#endif
#ifdef __x86_64__
OpenPOWER on IntegriCloud