Reid Kleckner 17e2521724 [InstrProf] Port test suite to Windows
Summary:
Before this change, check-profile would run, but all tests would be
marked unsupported on Windows. This is the new status of 'check-profile'
after this change:

Testing Time: 6.66s
  Expected Passes    : 29
  Expected Failures  : 5
  Unsupported Tests  : 39

I moved many tests that exercise posix-y features like dlopen and DSOs
into the Posix subdirectory, and ran the tests on Linux to validate my
changes.

These are the remaining tests that I handled on a case by case basis:
- instrprof-path.c
  Passes, Fixed some path portability issues
- instrprof-gcov-exceptions.test
  Passes, the FileCheck actually succeeds on Windows, so I RUNX'd it
- instrprof-icall-promo.test
  XFAILed, probably due to C++ ABI differences in vtables
- instrprof-merge-match.test
- instrprof-merge.c
- instrprof-merging.cpp
  XFAILed, These seem like real bugs that need fixing
- instrprof-version-mismatch.c
  XFAILed, Overriding the weak version symbol doesn't work
- instrprof-without-libc.c
  UNSUPPORTED, test needs an executable symbol table, Windows has none

Reviewers: davidxl, wmi, void

Subscribers: fedor.sergeev, #sanitizers, llvm-commits

Tags: #sanitizers

Differential Revision: https://reviews.llvm.org/D57853

llvm-svn: 353435
2019-02-07 17:52:05 +00:00

48 lines
1.3 KiB
C

// RUN: %clang_pgogen -O2 -o %t.0 %s
// RUN: %clang_pgogen=%/t.d1 -O2 -o %t.1 %s
// RUN: %clang_pgogen=%/t.d1/%:t.d2 -O2 -o %t.2 %s
//
// RUN: %run %t.0 ""
// RUN: env LLVM_PROFILE_FILE=%/t.d1/default.profraw %run %t.0 %/t.d1
// RUN: env LLVM_PROFILE_FILE=%/t.d1/%:t.d2/default.profraw %run %t.0 %/t.d1/%:t.d2
// RUN: %run %t.1 %/t.d1
// RUN: %run %t.2 %/t.d1/%:t.d2
// RUN: %run %t.2 %/t.d1/%:t.d2 %/t.d1/%:t.d2/%:t.d3/blah.profraw %/t.d1/%:t.d2/%:t.d3/
#include <string.h>
const char *__llvm_profile_get_path_prefix();
void __llvm_profile_set_filename(const char*);
int main(int argc, const char *argv[]) {
const char *expected;
const char *prefix;
if (argc < 2)
return 1;
expected = argv[1];
prefix = __llvm_profile_get_path_prefix();
// The last character should be a trailing slash. Ignore it in the comparison
// since it could be '/' or '\\'.
int slashpos = strlen(prefix);
if (slashpos > 0) {
--slashpos;
if (prefix[slashpos] != '/' && prefix[slashpos] != '\\')
return 1;
}
if (strncmp(prefix, expected, slashpos))
return 1;
if (argc == 4) {
__llvm_profile_set_filename(argv[2]);
prefix = __llvm_profile_get_path_prefix();
expected = argv[3];
if (strcmp(prefix, expected))
return 1;
}
return 0;
}