Re: [libcxx] r284210 - XFAIL aligned allocation test failures with UBSAN
Thanks Richard. I've fixed the tests in r284289. On Fri, Oct 14, 2016 at 4:40 PM, Richard Smith wrote: > On Fri, Oct 14, 2016 at 3:34 PM, Eric Fiselier via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > >> Oh, I have another idea: could it be that you're also turning some >> optimization on when UBSan is enabled? Note that the operator new/operator >> delete pair is elidable in each of these tests, and Clang will remove the >> calls when compiling with optimizations enabled. >> >> That's it. The UBSAN tests build w/ -O2. >> > > OK. You should be able to get the tests to pass by escaping the allocation > somehow. Try changing the type of the x variable to 'B *volatile'. > > >> /Eric >> >> On Fri, Oct 14, 2016 at 4:18 PM, Richard Smith >> wrote: >> >>> Oh, I have another idea: could it be that you're also turning some >>> optimization on when UBSan is enabled? Note that the operator new/operator >>> delete pair is elidable in each of these tests, and Clang will remove the >>> calls when compiling with optimizations enabled. >>> >>> On Fri, Oct 14, 2016 at 2:38 PM, Eric Fiselier via cfe-commits < >>> cfe-commits@lists.llvm.org> wrote: >>> UBSAN may not be replacing the function, but it is doing something weird at the codegen level. I looked into this a while ago but never sorted it out. Either way I'll clarify the comments and add the missing reset() calls. Unfortunately the tests still fail in the same way. On Fri, Oct 14, 2016 at 11:49 AM, Richard Smith wrote: > On Fri, Oct 14, 2016 at 12:49 AM, Eric Fiselier via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > >> Author: ericwf >> Date: Fri Oct 14 02:49:15 2016 >> New Revision: 284210 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=284210&view=rev >> Log: >> XFAIL aligned allocation test failures with UBSAN >> >> Modified: >> libcxx/trunk/test/std/language.support/support.dynamic/new.d >> elete/new.delete.array/delete_align_val_t_replace.pass.cpp >> libcxx/trunk/test/std/language.support/support.dynamic/new.d >> elete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp >> libcxx/trunk/test/std/language.support/support.dynamic/new.d >> elete/new.delete.single/delete_align_val_t_replace.pass.cpp >> libcxx/trunk/test/std/language.support/support.dynamic/new.d >> elete/new.delete.single/new_align_val_t_nothrow_replace.pass.cpp >> >> Modified: libcxx/trunk/test/std/language >> .support/support.dynamic/new.delete/new.delete.array/delete_ >> align_val_t_replace.pass.cpp >> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/la >> nguage.support/support.dynamic/new.delete/new.delete.array/d >> elete_align_val_t_replace.pass.cpp?rev=284210&r1=284209&r2=2 >> 84210&view=diff >> >> == >> --- libcxx/trunk/test/std/language.support/support.dynamic/new.d >> elete/new.delete.array/delete_align_val_t_replace.pass.cpp (original) >> +++ libcxx/trunk/test/std/language.support/support.dynamic/new.d >> elete/new.delete.array/delete_align_val_t_replace.pass.cpp Fri Oct >> 14 02:49:15 2016 >> @@ -17,6 +17,9 @@ >> // None of the current GCC compilers support this. >> // XFAIL: gcc-4, gcc-5, gcc-6 >> >> +// UBSAN replaces certain new/delete functions which makes this test >> fail >> > > I don't think that's the problem; the UBSan runtime doesn't replace > any functions. Instead... > > >> +// XFAIL: ubsan >> + >> #include >> #include >> #include >> @@ -58,24 +61,24 @@ struct alignas(std::max_align_t) B {}; >> int main() >> { >> > > I think you're missing a call to reset() here. It looks like the > sanitizer runtimes happen to call 'operator new' before entering main. > > >> { >> -B *x = new B; >> +B *x = new B[2]; >> assert(0 == unsized_delete_called); >> assert(0 == unsized_delete_nothrow_called); >> assert(0 == aligned_delete_called); >> >> -delete x; >> +delete [] x; >> assert(1 == unsized_delete_called); >> assert(0 == unsized_delete_nothrow_called); >> assert(0 == aligned_delete_called); >> } >> reset(); >> { >> -A *x = new A; >> +A *x = new A[2]; >> assert(0 == unsized_delete_called); >> assert(0 == unsized_delete_nothrow_called); >> assert(0 == aligned_delete_called); >> >> -delete x; >> +delete [] x; >> assert(0 == unsized_delete_called); >> assert(0 == unsized_delete_nothrow_called); >> assert(1 == aligned_delete_called); >> >> Modified: libcxx/trunk/
Re: [libcxx] r284210 - XFAIL aligned allocation test failures with UBSAN
On Fri, Oct 14, 2016 at 3:34 PM, Eric Fiselier via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Oh, I have another idea: could it be that you're also turning some > optimization on when UBSan is enabled? Note that the operator new/operator > delete pair is elidable in each of these tests, and Clang will remove the > calls when compiling with optimizations enabled. > > That's it. The UBSAN tests build w/ -O2. > OK. You should be able to get the tests to pass by escaping the allocation somehow. Try changing the type of the x variable to 'B *volatile'. > /Eric > > On Fri, Oct 14, 2016 at 4:18 PM, Richard Smith > wrote: > >> Oh, I have another idea: could it be that you're also turning some >> optimization on when UBSan is enabled? Note that the operator new/operator >> delete pair is elidable in each of these tests, and Clang will remove the >> calls when compiling with optimizations enabled. >> >> On Fri, Oct 14, 2016 at 2:38 PM, Eric Fiselier via cfe-commits < >> cfe-commits@lists.llvm.org> wrote: >> >>> UBSAN may not be replacing the function, but it is doing something weird >>> at the codegen level. I looked into this a while ago but never sorted it >>> out. >>> >>> Either way I'll clarify the comments and add the missing reset() calls. >>> Unfortunately the tests still fail in the same way. >>> >>> On Fri, Oct 14, 2016 at 11:49 AM, Richard Smith >>> wrote: >>> On Fri, Oct 14, 2016 at 12:49 AM, Eric Fiselier via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Author: ericwf > Date: Fri Oct 14 02:49:15 2016 > New Revision: 284210 > > URL: http://llvm.org/viewvc/llvm-project?rev=284210&view=rev > Log: > XFAIL aligned allocation test failures with UBSAN > > Modified: > libcxx/trunk/test/std/language.support/support.dynamic/new.d > elete/new.delete.array/delete_align_val_t_replace.pass.cpp > libcxx/trunk/test/std/language.support/support.dynamic/new.d > elete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp > libcxx/trunk/test/std/language.support/support.dynamic/new.d > elete/new.delete.single/delete_align_val_t_replace.pass.cpp > libcxx/trunk/test/std/language.support/support.dynamic/new.d > elete/new.delete.single/new_align_val_t_nothrow_replace.pass.cpp > > Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.d > elete/new.delete.array/delete_align_val_t_replace.pass.cpp > URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/la > nguage.support/support.dynamic/new.delete/new.delete.array/d > elete_align_val_t_replace.pass.cpp?rev=284210&r1=284209&r2=2 > 84210&view=diff > > == > --- libcxx/trunk/test/std/language.support/support.dynamic/new.d > elete/new.delete.array/delete_align_val_t_replace.pass.cpp (original) > +++ libcxx/trunk/test/std/language.support/support.dynamic/new.d > elete/new.delete.array/delete_align_val_t_replace.pass.cpp Fri Oct 14 > 02:49:15 2016 > @@ -17,6 +17,9 @@ > // None of the current GCC compilers support this. > // XFAIL: gcc-4, gcc-5, gcc-6 > > +// UBSAN replaces certain new/delete functions which makes this test > fail > I don't think that's the problem; the UBSan runtime doesn't replace any functions. Instead... > +// XFAIL: ubsan > + > #include > #include > #include > @@ -58,24 +61,24 @@ struct alignas(std::max_align_t) B {}; > int main() > { > I think you're missing a call to reset() here. It looks like the sanitizer runtimes happen to call 'operator new' before entering main. > { > -B *x = new B; > +B *x = new B[2]; > assert(0 == unsized_delete_called); > assert(0 == unsized_delete_nothrow_called); > assert(0 == aligned_delete_called); > > -delete x; > +delete [] x; > assert(1 == unsized_delete_called); > assert(0 == unsized_delete_nothrow_called); > assert(0 == aligned_delete_called); > } > reset(); > { > -A *x = new A; > +A *x = new A[2]; > assert(0 == unsized_delete_called); > assert(0 == unsized_delete_nothrow_called); > assert(0 == aligned_delete_called); > > -delete x; > +delete [] x; > assert(0 == unsized_delete_called); > assert(0 == unsized_delete_nothrow_called); > assert(1 == aligned_delete_called); > > Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.d > elete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp > URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/la > nguage.support/support.dynamic/new.delete/new.de
Re: [libcxx] r284210 - XFAIL aligned allocation test failures with UBSAN
Oh, I have another idea: could it be that you're also turning some optimization on when UBSan is enabled? Note that the operator new/operator delete pair is elidable in each of these tests, and Clang will remove the calls when compiling with optimizations enabled. That's it. The UBSAN tests build w/ -O2. /Eric On Fri, Oct 14, 2016 at 4:18 PM, Richard Smith wrote: > Oh, I have another idea: could it be that you're also turning some > optimization on when UBSan is enabled? Note that the operator new/operator > delete pair is elidable in each of these tests, and Clang will remove the > calls when compiling with optimizations enabled. > > On Fri, Oct 14, 2016 at 2:38 PM, Eric Fiselier via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > >> UBSAN may not be replacing the function, but it is doing something weird >> at the codegen level. I looked into this a while ago but never sorted it >> out. >> >> Either way I'll clarify the comments and add the missing reset() calls. >> Unfortunately the tests still fail in the same way. >> >> On Fri, Oct 14, 2016 at 11:49 AM, Richard Smith >> wrote: >> >>> On Fri, Oct 14, 2016 at 12:49 AM, Eric Fiselier via cfe-commits < >>> cfe-commits@lists.llvm.org> wrote: >>> Author: ericwf Date: Fri Oct 14 02:49:15 2016 New Revision: 284210 URL: http://llvm.org/viewvc/llvm-project?rev=284210&view=rev Log: XFAIL aligned allocation test failures with UBSAN Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.d elete/new.delete.array/delete_align_val_t_replace.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.d elete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.d elete/new.delete.single/delete_align_val_t_replace.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.d elete/new.delete.single/new_align_val_t_nothrow_replace.pass.cpp Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.d elete/new.delete.array/delete_align_val_t_replace.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/la nguage.support/support.dynamic/new.delete/new.delete.array/d elete_align_val_t_replace.pass.cpp?rev=284210&r1=284209&r2=2 84210&view=diff == --- libcxx/trunk/test/std/language.support/support.dynamic/new.d elete/new.delete.array/delete_align_val_t_replace.pass.cpp (original) +++ libcxx/trunk/test/std/language.support/support.dynamic/new.d elete/new.delete.array/delete_align_val_t_replace.pass.cpp Fri Oct 14 02:49:15 2016 @@ -17,6 +17,9 @@ // None of the current GCC compilers support this. // XFAIL: gcc-4, gcc-5, gcc-6 +// UBSAN replaces certain new/delete functions which makes this test fail >>> >>> I don't think that's the problem; the UBSan runtime doesn't replace any >>> functions. Instead... >>> >>> +// XFAIL: ubsan + #include #include #include @@ -58,24 +61,24 @@ struct alignas(std::max_align_t) B {}; int main() { >>> >>> I think you're missing a call to reset() here. It looks like the >>> sanitizer runtimes happen to call 'operator new' before entering main. >>> >>> { -B *x = new B; +B *x = new B[2]; assert(0 == unsized_delete_called); assert(0 == unsized_delete_nothrow_called); assert(0 == aligned_delete_called); -delete x; +delete [] x; assert(1 == unsized_delete_called); assert(0 == unsized_delete_nothrow_called); assert(0 == aligned_delete_called); } reset(); { -A *x = new A; +A *x = new A[2]; assert(0 == unsized_delete_called); assert(0 == unsized_delete_nothrow_called); assert(0 == aligned_delete_called); -delete x; +delete [] x; assert(0 == unsized_delete_called); assert(0 == unsized_delete_nothrow_called); assert(1 == aligned_delete_called); Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.d elete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/la nguage.support/support.dynamic/new.delete/new.delete.array/n ew_align_val_t_nothrow_replace.pass.cpp?rev=284210&r1=284209 &r2=284210&view=diff == --- libcxx/trunk/test/std/language.support/support.dynamic/new.d elete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp (original) +++ libcxx/trunk/tes
Re: [libcxx] r284210 - XFAIL aligned allocation test failures with UBSAN
Oh, I have another idea: could it be that you're also turning some optimization on when UBSan is enabled? Note that the operator new/operator delete pair is elidable in each of these tests, and Clang will remove the calls when compiling with optimizations enabled. On Fri, Oct 14, 2016 at 2:38 PM, Eric Fiselier via cfe-commits < cfe-commits@lists.llvm.org> wrote: > UBSAN may not be replacing the function, but it is doing something weird > at the codegen level. I looked into this a while ago but never sorted it > out. > > Either way I'll clarify the comments and add the missing reset() calls. > Unfortunately the tests still fail in the same way. > > On Fri, Oct 14, 2016 at 11:49 AM, Richard Smith > wrote: > >> On Fri, Oct 14, 2016 at 12:49 AM, Eric Fiselier via cfe-commits < >> cfe-commits@lists.llvm.org> wrote: >> >>> Author: ericwf >>> Date: Fri Oct 14 02:49:15 2016 >>> New Revision: 284210 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=284210&view=rev >>> Log: >>> XFAIL aligned allocation test failures with UBSAN >>> >>> Modified: >>> libcxx/trunk/test/std/language.support/support.dynamic/new.d >>> elete/new.delete.array/delete_align_val_t_replace.pass.cpp >>> libcxx/trunk/test/std/language.support/support.dynamic/new.d >>> elete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp >>> libcxx/trunk/test/std/language.support/support.dynamic/new.d >>> elete/new.delete.single/delete_align_val_t_replace.pass.cpp >>> libcxx/trunk/test/std/language.support/support.dynamic/new.d >>> elete/new.delete.single/new_align_val_t_nothrow_replace.pass.cpp >>> >>> Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.d >>> elete/new.delete.array/delete_align_val_t_replace.pass.cpp >>> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/la >>> nguage.support/support.dynamic/new.delete/new.delete.array/d >>> elete_align_val_t_replace.pass.cpp?rev=284210&r1=284209&r2= >>> 284210&view=diff >>> >>> == >>> --- libcxx/trunk/test/std/language.support/support.dynamic/new.d >>> elete/new.delete.array/delete_align_val_t_replace.pass.cpp (original) >>> +++ libcxx/trunk/test/std/language.support/support.dynamic/new.d >>> elete/new.delete.array/delete_align_val_t_replace.pass.cpp Fri Oct 14 >>> 02:49:15 2016 >>> @@ -17,6 +17,9 @@ >>> // None of the current GCC compilers support this. >>> // XFAIL: gcc-4, gcc-5, gcc-6 >>> >>> +// UBSAN replaces certain new/delete functions which makes this test >>> fail >>> >> >> I don't think that's the problem; the UBSan runtime doesn't replace any >> functions. Instead... >> >> >>> +// XFAIL: ubsan >>> + >>> #include >>> #include >>> #include >>> @@ -58,24 +61,24 @@ struct alignas(std::max_align_t) B {}; >>> int main() >>> { >>> >> >> I think you're missing a call to reset() here. It looks like the >> sanitizer runtimes happen to call 'operator new' before entering main. >> >> >>> { >>> -B *x = new B; >>> +B *x = new B[2]; >>> assert(0 == unsized_delete_called); >>> assert(0 == unsized_delete_nothrow_called); >>> assert(0 == aligned_delete_called); >>> >>> -delete x; >>> +delete [] x; >>> assert(1 == unsized_delete_called); >>> assert(0 == unsized_delete_nothrow_called); >>> assert(0 == aligned_delete_called); >>> } >>> reset(); >>> { >>> -A *x = new A; >>> +A *x = new A[2]; >>> assert(0 == unsized_delete_called); >>> assert(0 == unsized_delete_nothrow_called); >>> assert(0 == aligned_delete_called); >>> >>> -delete x; >>> +delete [] x; >>> assert(0 == unsized_delete_called); >>> assert(0 == unsized_delete_nothrow_called); >>> assert(1 == aligned_delete_called); >>> >>> Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.d >>> elete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp >>> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/la >>> nguage.support/support.dynamic/new.delete/new.delete.array/n >>> ew_align_val_t_nothrow_replace.pass.cpp?rev=284210&r1=284209 >>> &r2=284210&view=diff >>> >>> == >>> --- libcxx/trunk/test/std/language.support/support.dynamic/new.d >>> elete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp >>> (original) >>> +++ libcxx/trunk/test/std/language.support/support.dynamic/new.d >>> elete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp Fri Oct >>> 14 02:49:15 2016 >>> @@ -13,9 +13,6 @@ >>> >>> // UNSUPPORTED: sanitizer-new-delete >>> >>> -// TODO Investigate why UBSAN prevents nothrow new from calling our >>> replacement. >>> -// XFAIL: ubsan >>> - >>> #include >>> #include >>> #include >>> >>> Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.d >>> elete/new.delete.single/delete_alig
Re: [libcxx] r284210 - XFAIL aligned allocation test failures with UBSAN
UBSAN may not be replacing the function, but it is doing something weird at the codegen level. I looked into this a while ago but never sorted it out. Either way I'll clarify the comments and add the missing reset() calls. Unfortunately the tests still fail in the same way. On Fri, Oct 14, 2016 at 11:49 AM, Richard Smith wrote: > On Fri, Oct 14, 2016 at 12:49 AM, Eric Fiselier via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > >> Author: ericwf >> Date: Fri Oct 14 02:49:15 2016 >> New Revision: 284210 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=284210&view=rev >> Log: >> XFAIL aligned allocation test failures with UBSAN >> >> Modified: >> libcxx/trunk/test/std/language.support/support.dynamic/new. >> delete/new.delete.array/delete_align_val_t_replace.pass.cpp >> libcxx/trunk/test/std/language.support/support.dynamic/new. >> delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp >> libcxx/trunk/test/std/language.support/support.dynamic/new. >> delete/new.delete.single/delete_align_val_t_replace.pass.cpp >> libcxx/trunk/test/std/language.support/support.dynamic/new. >> delete/new.delete.single/new_align_val_t_nothrow_replace.pass.cpp >> >> Modified: libcxx/trunk/test/std/language.support/support.dynamic/new. >> delete/new.delete.array/delete_align_val_t_replace.pass.cpp >> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/la >> nguage.support/support.dynamic/new.delete/new.delete.array/ >> delete_align_val_t_replace.pass.cpp?rev=284210&r1=284209& >> r2=284210&view=diff >> >> == >> --- libcxx/trunk/test/std/language.support/support.dynamic/new. >> delete/new.delete.array/delete_align_val_t_replace.pass.cpp (original) >> +++ libcxx/trunk/test/std/language.support/support.dynamic/new. >> delete/new.delete.array/delete_align_val_t_replace.pass.cpp Fri Oct 14 >> 02:49:15 2016 >> @@ -17,6 +17,9 @@ >> // None of the current GCC compilers support this. >> // XFAIL: gcc-4, gcc-5, gcc-6 >> >> +// UBSAN replaces certain new/delete functions which makes this test fail >> > > I don't think that's the problem; the UBSan runtime doesn't replace any > functions. Instead... > > >> +// XFAIL: ubsan >> + >> #include >> #include >> #include >> @@ -58,24 +61,24 @@ struct alignas(std::max_align_t) B {}; >> int main() >> { >> > > I think you're missing a call to reset() here. It looks like the sanitizer > runtimes happen to call 'operator new' before entering main. > > >> { >> -B *x = new B; >> +B *x = new B[2]; >> assert(0 == unsized_delete_called); >> assert(0 == unsized_delete_nothrow_called); >> assert(0 == aligned_delete_called); >> >> -delete x; >> +delete [] x; >> assert(1 == unsized_delete_called); >> assert(0 == unsized_delete_nothrow_called); >> assert(0 == aligned_delete_called); >> } >> reset(); >> { >> -A *x = new A; >> +A *x = new A[2]; >> assert(0 == unsized_delete_called); >> assert(0 == unsized_delete_nothrow_called); >> assert(0 == aligned_delete_called); >> >> -delete x; >> +delete [] x; >> assert(0 == unsized_delete_called); >> assert(0 == unsized_delete_nothrow_called); >> assert(1 == aligned_delete_called); >> >> Modified: libcxx/trunk/test/std/language.support/support.dynamic/new. >> delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp >> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/la >> nguage.support/support.dynamic/new.delete/new.delete.array/ >> new_align_val_t_nothrow_replace.pass.cpp?rev=284210&r1= >> 284209&r2=284210&view=diff >> >> == >> --- libcxx/trunk/test/std/language.support/support.dynamic/new. >> delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp >> (original) >> +++ libcxx/trunk/test/std/language.support/support.dynamic/new. >> delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp Fri Oct >> 14 02:49:15 2016 >> @@ -13,9 +13,6 @@ >> >> // UNSUPPORTED: sanitizer-new-delete >> >> -// TODO Investigate why UBSAN prevents nothrow new from calling our >> replacement. >> -// XFAIL: ubsan >> - >> #include >> #include >> #include >> >> Modified: libcxx/trunk/test/std/language.support/support.dynamic/new. >> delete/new.delete.single/delete_align_val_t_replace.pass.cpp >> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/la >> nguage.support/support.dynamic/new.delete/new.delete.single/ >> delete_align_val_t_replace.pass.cpp?rev=284210&r1=284209& >> r2=284210&view=diff >> >> == >> --- libcxx/trunk/test/std/language.support/support.dynamic/new. >> delete/new.delete.single/delete_align_val_t_replace.pass.cpp (original) >> +++ libcxx/trunk/test/std/lan
Re: [libcxx] r284210 - XFAIL aligned allocation test failures with UBSAN
On Fri, Oct 14, 2016 at 12:49 AM, Eric Fiselier via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Author: ericwf > Date: Fri Oct 14 02:49:15 2016 > New Revision: 284210 > > URL: http://llvm.org/viewvc/llvm-project?rev=284210&view=rev > Log: > XFAIL aligned allocation test failures with UBSAN > > Modified: > libcxx/trunk/test/std/language.support/support. > dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp > libcxx/trunk/test/std/language.support/support. > dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_ > replace.pass.cpp > libcxx/trunk/test/std/language.support/support. > dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp > libcxx/trunk/test/std/language.support/support. > dynamic/new.delete/new.delete.single/new_align_val_t_ > nothrow_replace.pass.cpp > > Modified: libcxx/trunk/test/std/language.support/support. > dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp > URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/ > language.support/support.dynamic/new.delete/new.delete. > array/delete_align_val_t_replace.pass.cpp?rev=284210& > r1=284209&r2=284210&view=diff > > == > --- libcxx/trunk/test/std/language.support/support. > dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp > (original) > +++ libcxx/trunk/test/std/language.support/support. > dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp > Fri Oct 14 02:49:15 2016 > @@ -17,6 +17,9 @@ > // None of the current GCC compilers support this. > // XFAIL: gcc-4, gcc-5, gcc-6 > > +// UBSAN replaces certain new/delete functions which makes this test fail > I don't think that's the problem; the UBSan runtime doesn't replace any functions. Instead... > +// XFAIL: ubsan > + > #include > #include > #include > @@ -58,24 +61,24 @@ struct alignas(std::max_align_t) B {}; > int main() > { > I think you're missing a call to reset() here. It looks like the sanitizer runtimes happen to call 'operator new' before entering main. > { > -B *x = new B; > +B *x = new B[2]; > assert(0 == unsized_delete_called); > assert(0 == unsized_delete_nothrow_called); > assert(0 == aligned_delete_called); > > -delete x; > +delete [] x; > assert(1 == unsized_delete_called); > assert(0 == unsized_delete_nothrow_called); > assert(0 == aligned_delete_called); > } > reset(); > { > -A *x = new A; > +A *x = new A[2]; > assert(0 == unsized_delete_called); > assert(0 == unsized_delete_nothrow_called); > assert(0 == aligned_delete_called); > > -delete x; > +delete [] x; > assert(0 == unsized_delete_called); > assert(0 == unsized_delete_nothrow_called); > assert(1 == aligned_delete_called); > > Modified: libcxx/trunk/test/std/language.support/support. > dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_ > replace.pass.cpp > URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/ > language.support/support.dynamic/new.delete/new.delete. > array/new_align_val_t_nothrow_replace.pass.cpp?rev=284210& > r1=284209&r2=284210&view=diff > > == > --- libcxx/trunk/test/std/language.support/support. > dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp > (original) > +++ libcxx/trunk/test/std/language.support/support. > dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp > Fri Oct 14 02:49:15 2016 > @@ -13,9 +13,6 @@ > > // UNSUPPORTED: sanitizer-new-delete > > -// TODO Investigate why UBSAN prevents nothrow new from calling our > replacement. > -// XFAIL: ubsan > - > #include > #include > #include > > Modified: libcxx/trunk/test/std/language.support/support. > dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp > URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/ > language.support/support.dynamic/new.delete/new.delete. > single/delete_align_val_t_replace.pass.cpp?rev=284210& > r1=284209&r2=284210&view=diff > > == > --- libcxx/trunk/test/std/language.support/support. > dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp > (original) > +++ libcxx/trunk/test/std/language.support/support. > dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp > Fri Oct 14 02:49:15 2016 > @@ -17,6 +17,9 @@ > // None of the current GCC compilers support this. > // XFAIL: gcc-4, gcc-5, gcc-6 > > +// UBSAN replaces certain new/delete functions which makes this test fail > +// XFAIL: ubsan > + > #include > #include > #include > > Modified: libcxx/trunk/test/std/language.support/support. > dynamic/new.d
[libcxx] r284210 - XFAIL aligned allocation test failures with UBSAN
Author: ericwf Date: Fri Oct 14 02:49:15 2016 New Revision: 284210 URL: http://llvm.org/viewvc/llvm-project?rev=284210&view=rev Log: XFAIL aligned allocation test failures with UBSAN Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_nothrow_replace.pass.cpp Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp?rev=284210&r1=284209&r2=284210&view=diff == --- libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp (original) +++ libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp Fri Oct 14 02:49:15 2016 @@ -17,6 +17,9 @@ // None of the current GCC compilers support this. // XFAIL: gcc-4, gcc-5, gcc-6 +// UBSAN replaces certain new/delete functions which makes this test fail +// XFAIL: ubsan + #include #include #include @@ -58,24 +61,24 @@ struct alignas(std::max_align_t) B {}; int main() { { -B *x = new B; +B *x = new B[2]; assert(0 == unsized_delete_called); assert(0 == unsized_delete_nothrow_called); assert(0 == aligned_delete_called); -delete x; +delete [] x; assert(1 == unsized_delete_called); assert(0 == unsized_delete_nothrow_called); assert(0 == aligned_delete_called); } reset(); { -A *x = new A; +A *x = new A[2]; assert(0 == unsized_delete_called); assert(0 == unsized_delete_nothrow_called); assert(0 == aligned_delete_called); -delete x; +delete [] x; assert(0 == unsized_delete_called); assert(0 == unsized_delete_nothrow_called); assert(1 == aligned_delete_called); Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp?rev=284210&r1=284209&r2=284210&view=diff == --- libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp (original) +++ libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp Fri Oct 14 02:49:15 2016 @@ -13,9 +13,6 @@ // UNSUPPORTED: sanitizer-new-delete -// TODO Investigate why UBSAN prevents nothrow new from calling our replacement. -// XFAIL: ubsan - #include #include #include Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp?rev=284210&r1=284209&r2=284210&view=diff == --- libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp (original) +++ libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp Fri Oct 14 02:49:15 2016 @@ -17,6 +17,9 @@ // None of the current GCC compilers support this. // XFAIL: gcc-4, gcc-5, gcc-6 +// UBSAN replaces certain new/delete functions which makes this test fail +// XFAIL: ubsan + #include #include #include Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_nothrow_replace.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_nothrow_replace.pass.cpp?rev=284210&r1=284209&r2=284210&view=diff == --- libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_nothrow_replace.pass.cpp (original) +++ libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/ne