On Fri, Jun 5, 2015 at 2:03 PM, David Majnemer <[email protected]> wrote: > Author: majnemer > Date: Fri Jun 5 13:03:58 2015 > New Revision: 239170 > > URL: http://llvm.org/viewvc/llvm-project?rev=239170&view=rev > Log: > [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. > > Modified: > cfe/trunk/lib/AST/DeclPrinter.cpp > cfe/trunk/lib/Headers/Intrin.h > cfe/trunk/test/SemaCXX/static-assert.cpp > > Modified: cfe/trunk/lib/AST/DeclPrinter.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclPrinter.cpp?rev=239170&r1=239169&r2=239170&view=diff > ============================================================================== > --- cfe/trunk/lib/AST/DeclPrinter.cpp (original) > +++ cfe/trunk/lib/AST/DeclPrinter.cpp Fri Jun 5 13:03:58 2015 > @@ -733,8 +733,10 @@ void DeclPrinter::VisitImportDecl(Import > 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 << ")"; > } > > > Modified: cfe/trunk/lib/Headers/Intrin.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/Intrin.h?rev=239170&r1=239169&r2=239170&view=diff > ============================================================================== > --- cfe/trunk/lib/Headers/Intrin.h (original) > +++ cfe/trunk/lib/Headers/Intrin.h Fri Jun 5 13:03:58 2015 > @@ -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; > }
Was this an intended part of your changes? ~Aaron > #endif > #ifdef __x86_64__ > > Modified: cfe/trunk/test/SemaCXX/static-assert.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/static-assert.cpp?rev=239170&r1=239169&r2=239170&view=diff > ============================================================================== > --- cfe/trunk/test/SemaCXX/static-assert.cpp (original) > +++ cfe/trunk/test/SemaCXX/static-assert.cpp Fri Jun 5 13:03:58 2015 > @@ -51,3 +51,12 @@ StaticAssertProtected<X> sap2; // expect > > static_assert(true); // expected-warning {{C++1z extension}} > static_assert(false); // expected-error-re {{failed{{$}}}} expected-warning > {{extension}} > + > +void PR23756() { > + struct { // expected-note 2 {{no known conversion from}} > + } _ = decltype( // expected-error {{no viable conversion}} > + ({ // expected-warning {{no effect in an > unevaluated context}} > + static_assert(true); // expected-warning {{C++1z extension}} > + 1; > + })){}; > +} > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
