Files
clang-p2996/compiler-rt/test/msan/dtor-member.cpp
Harini0924 643a2080ec [llvm-lit] Fix error in compiler-rt tests when using lit internal shell with env (#102069)
When running tests in compiler-rt using the lit internal shell with the
following command:
```
LIT_USE_INTERNAL_SHELL=1 ninja check-compiler-rt
```
one common error that occurs is:
```
'XRAY_OPTIONS=patch_premain=false:verbosity=1': command not found
```
This error, along with over 50 similar "environment variable not found"
errors, appears across 35 files in complier-rt. These errors happen
because the environment variables are not being set correctly when the
internal shell is used, leading to commands failing due to unrecognized
environment variables.

This patch addresses the issue by using the `env` command to properly
set the environment variables before running the tests. By explicitly
setting the environment variables through `env`, the internal shell can
correctly interpret and apply them, allowing the tests to pass.
fixes: #102395 
[link to
RFC](https://discourse.llvm.org/t/rfc-enabling-the-lit-internal-shell-by-default/80179)
2024-08-13 15:13:51 -07:00

49 lines
1.5 KiB
C++

// RUN: %clangxx_msan %s -fsanitize=memory -fsanitize-memory-use-after-dtor -o %t && %run %t >%t.out 2>&1
// RUN: FileCheck %s < %t.out
// RUN: %clangxx_msan %s -O1 -fsanitize=memory -fsanitize-memory-use-after-dtor -o %t && %run %t >%t.out 2>&1
// RUN: FileCheck %s < %t.out
// RUN: %clangxx_msan %s -O2 -fsanitize=memory -fsanitize-memory-use-after-dtor -o %t && %run %t >%t.out 2>&1
// RUN: FileCheck %s < %t.out
// RUN: %clangxx_msan %s -fsanitize=memory -fno-sanitize-memory-use-after-dtor -o %t && %run %t >%t.out 2>&1
// RUN: FileCheck %s --check-prefix=CHECK-NO-FLAG < %t.out
// RUN: %clangxx_msan -fsanitize=memory -fsanitize-memory-use-after-dtor %s -o %t && env MSAN_OPTIONS=poison_in_dtor=0 %run %t >%t.out 2>&1
// RUN: FileCheck %s --check-prefix=CHECK-NO-FLAG < %t.out
#include <sanitizer/msan_interface.h>
#include <assert.h>
#include <stdio.h>
#include <new>
struct Simple {
int x_;
Simple() {
x_ = 5;
}
~Simple() { }
};
int main() {
unsigned long buf[1];
assert(sizeof(Simple) <= sizeof(buf));
// The placement new operator forces the object to be constructed in the
// memory location &buf. Since objects made in this way must be explicitly
// destroyed, there are no implicit calls inserted that would interfere with
// test behavior.
Simple *s = new(&buf) Simple();
s->~Simple();
if (__msan_test_shadow(s, sizeof(*s)) != -1)
printf("s is poisoned\n");
else
printf("s is not poisoned\n");
// CHECK: s is poisoned
// CHECK-NO-FLAG: s is not poisoned
return 0;
}