[compiler-rt] r230172 - Fix gc-test.cc to work under higher -O levels

David Blaikie dblaikie at gmail.com
Sun Feb 22 12:51:58 PST 2015


On Sun, Feb 22, 2015 at 3:12 AM, Kuba Brecka <kuba.brecka at gmail.com> wrote:

> Author: kuba.brecka
> Date: Sun Feb 22 05:12:17 2015
> New Revision: 230172
>
> URL: http://llvm.org/viewvc/llvm-project?rev=230172&view=rev
> Log:
> Fix gc-test.cc to work under higher -O levels
>
> The gc-test.cc tries underflows of a variable up to -32 bytes, but on
> i386, the left redzone is not 32 bytes, it’s only 16 bytes and therefore
> the access to var[-32] is completely off. The reason why this test didn’t
> fail before is that we’ve been lucky and there was another variable before
> the var array, which was also instrumented. This fix uses “-32” for 64-bit
> systems and “-16” for 32-bit.
>
> Reviewed at http://reviews.llvm.org/D7809
>
>
> Modified:
>     compiler-rt/trunk/test/asan/TestCases/gc-test.cc
>
> Modified: compiler-rt/trunk/test/asan/TestCases/gc-test.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/gc-test.cc?rev=230172&r1=230171&r2=230172&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/test/asan/TestCases/gc-test.cc (original)
> +++ compiler-rt/trunk/test/asan/TestCases/gc-test.cc Sun Feb 22 05:12:17
> 2015
> @@ -1,6 +1,9 @@
>  // RUN: %clangxx_asan %s -pthread -o %t
>  // RUN: env ASAN_OPTIONS=detect_stack_use_after_return=1 %run %t 2>&1 |
> FileCheck %s --check-prefix=CHECK1
>  // RUN: env ASAN_OPTIONS=detect_stack_use_after_return=0 %run %t 2>&1 |
> FileCheck %s --check-prefix=CHECK0
> +// RUN: %clangxx_asan -O3 %s -pthread -o %t
> +// RUN: env ASAN_OPTIONS=detect_stack_use_after_return=1 %run %t 2>&1 |
> FileCheck %s --check-prefix=CHECK1
> +// RUN: env ASAN_OPTIONS=detect_stack_use_after_return=0 %run %t 2>&1 |
> FileCheck %s --check-prefix=CHECK0
>  // REQUIRES: stable-runtime
>
>  #include <assert.h>
> @@ -9,6 +12,7 @@
>  #include <sanitizer/asan_interface.h>
>
>  static const int kNumThreads = 2;
> +static const int kLeftRedzoneSize = sizeof(void *) *Â 4;
>

non-ascii character here (after the '*' before the space)?


>
>  void *Thread(void *unused)  {
>    void *fake_stack = __asan_get_current_fake_stack();
> @@ -23,7 +27,7 @@ void *Thread(void *unused)  {
>      assert(real_stack);
>      assert((char*)beg <= (char*)&var[0]);
>      assert((char*)end > (char*)&var[0]);
> -    for (int i = -32; i < 15; i++) {
> +    for (int i = -kLeftRedzoneSize; i < 15; i++) {
>        void *beg1, *end1;
>        char *ptr = &var[0] + i;
>        void *real_stack1 =
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150222/878690ad/attachment.html>


More information about the llvm-commits mailing list