[compiler-rt] r327062 - [asan] Fix a false positive ODR violation due to LTO ConstantMerge pass [compiler-rt part, take 3]

Matt Morehouse via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 8 15:05:33 PST 2018


This seems to fail on Windows:
http://lab.llvm.org:8011/builders/sanitizer-windows/builds/25343/steps/run%20check-asan/logs/stdio

FAIL: AddressSanitizer-i386-windows :: TestCases/lto-constmerge-odr.cc
(488 of 602)
******************** TEST 'AddressSanitizer-i386-windows ::
TestCases/lto-constmerge-odr.cc' FAILED ********************
Script:
--
C:/b/slave/sanitizer-windows/build/./bin/clang.exe  -fsanitize=address
-mno-omit-leaf-frame-pointer -fno-omit-frame-pointer
-fno-optimize-sibling-calls -gline-tables-only -gcodeview
-gcolumn-info   -fms-compatibility-version=19.00.24215.1  -O3 -flto
C:\b\slave\sanitizer-windows\llvm\projects\compiler-rt\test\asan\TestCases\lto-constmerge-odr.cc
-o C:\b\slave\sanitizer-windows\build\projects\compiler-rt\test\asan\I386WindowsConfig\TestCases\Output\lto-constmerge-odr.cc.tmp
C:\b\slave\sanitizer-windows\build\projects\compiler-rt\test\asan\I386WindowsConfig\TestCases\Output\lto-constmerge-odr.cc.tmp
2>&1
--
Exit Code: 1107

Command Output (stdout):
--
$ "C:/b/slave/sanitizer-windows/build/./bin/clang.exe"
"-fsanitize=address" "-mno-omit-leaf-frame-pointer"
"-fno-omit-frame-pointer" "-fno-optimize-sibling-calls"
"-gline-tables-only" "-gcodeview" "-gcolumn-info"
"-fms-compatibility-version=19.00.24215.1" "-O3" "-flto"
"C:\b\slave\sanitizer-windows\llvm\projects\compiler-rt\test\asan\TestCases\lto-constmerge-odr.cc"
"-o" "C:\b\slave\sanitizer-windows\build\projects\compiler-rt\test\asan\I386WindowsConfig\TestCases\Output\lto-constmerge-odr.cc.tmp"
# command output:
c:\users\buildbot\appdata\local\temp\lit_tmp_q0kr73\lto-constmerge-odr-c755bc.o
: fatal error LNK1107: invalid or corrupt file: cannot read at 0x2F08


# command stderr:
clang.exe: error: linker command failed with exit code 1107 (use -v to
see invocation)


error: command failed with exit status: 1107



On Thu, Mar 8, 2018 at 1:02 PM, Kuba Mracek via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: kuba.brecka
> Date: Thu Mar  8 13:02:52 2018
> New Revision: 327062
>
> URL: http://llvm.org/viewvc/llvm-project?rev=327062&view=rev
> Log:
> [asan] Fix a false positive ODR violation due to LTO ConstantMerge pass
> [compiler-rt part, take 3]
>
> This fixes a false positive ODR violation that is reported by ASan when
> using LTO. In cases, where two constant globals have the same value, LTO
> will merge them, which breaks ASan's ODR detection. See the included
> testcase for an example.
>
> Differential Revision: https://reviews.llvm.org/D43959
>
>
> Added:
>     compiler-rt/trunk/test/asan/TestCases/lto-constmerge-odr.cc
> Modified:
>     compiler-rt/trunk/test/asan/TestCases/Darwin/odr-lto.cc
>
> Modified: compiler-rt/trunk/test/asan/TestCases/Darwin/odr-lto.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/
> test/asan/TestCases/Darwin/odr-lto.cc?rev=327062&r1=
> 327061&r2=327062&view=diff
> ============================================================
> ==================
> --- compiler-rt/trunk/test/asan/TestCases/Darwin/odr-lto.cc (original)
> +++ compiler-rt/trunk/test/asan/TestCases/Darwin/odr-lto.cc Thu Mar  8
> 13:02:52 2018
> @@ -3,15 +3,10 @@
>
>  // REQUIRES: lto
>
> -// RUN: %clangxx_asan -DPART=0 -c %s -o %t-1.o -flto
> -// RUN: %clangxx_asan -DPART=1 -c %s -o %t-2.o -flto
> -// RUN: %clangxx_asan %t-1.o %t-2.o -o %t -flto
> -// RUN: not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-ODR
> -
>  // RUN: %clangxx_asan -DPART=0 -c %s -o %t-1.o -flto -mllvm
> -asan-use-private-alias
>  // RUN: %clangxx_asan -DPART=1 -c %s -o %t-2.o -flto -mllvm
> -asan-use-private-alias
>  // RUN: %clangxx_asan %t-1.o %t-2.o -o %t -flto
> -// RUN: %env_asan_opts=use_odr_indicator=1 %run %t 2>&1 | FileCheck %s
> --check-prefix=CHECK-NO-ODR
> +// RUN: %env_asan_opts=use_odr_indicator=1 %run %t 2>&1 | FileCheck %s
>
>  #include <stdio.h>
>  #include <stdlib.h>
> @@ -40,6 +35,5 @@ void putstest()
>
>  #endif // PART == 1
>
> -// CHECK-ODR: ERROR: AddressSanitizer: odr-violation
> -// CHECK-NO-ODR-NOT: ERROR: AddressSanitizer: odr-violation
> -// CHECK-NO-ODR: Done.
> +// CHECK-NOT: ERROR: AddressSanitizer: odr-violation
> +// CHECK: Done.
>
> Added: compiler-rt/trunk/test/asan/TestCases/lto-constmerge-odr.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/
> test/asan/TestCases/lto-constmerge-odr.cc?rev=327062&view=auto
> ============================================================
> ==================
> --- compiler-rt/trunk/test/asan/TestCases/lto-constmerge-odr.cc (added)
> +++ compiler-rt/trunk/test/asan/TestCases/lto-constmerge-odr.cc Thu Mar
> 8 13:02:52 2018
> @@ -0,0 +1,14 @@
> +// RUN: %clangxx_asan -O3 -flto %s -o %t
> +// RUN: %run %t 2>&1
> +
> +// REQUIRES: lto
> +
> +int main(int argc, const char * argv[]) {
> +  struct { long width, height; } a = {16, 16};
> +  struct { long width, height; } b = {16, 16};
> +
> +  // Just to make sure 'a' and 'b' don't get optimized out.
> +  asm volatile("" : : "r" (&a), "r" (&b));
> +
> +  return 0;
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180308/5b38f394/attachment.html>


More information about the llvm-commits mailing list