r239170 - [AST] There is no message for C++1z-style static_assert
David Majnemer
david.majnemer at gmail.com
Fri Jun 5 11:29:01 PDT 2015
Thanks, r239176.
On Fri, Jun 5, 2015 at 11:13 AM, Aaron Ballman <aaron at aaronballman.com>
wrote:
> On Fri, Jun 5, 2015 at 2:03 PM, David Majnemer <david.majnemer at gmail.com>
> 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
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150605/894a9be6/attachment.html>
More information about the cfe-commits
mailing list