12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clang_msan -std=c99 -O0 -g %s -o %t && %run %t
22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// strerror_r under a weird set of circumstances can be redirected to
42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// __xpg_strerror_r. Test that MSan handles this correctly.
52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define _POSIX_C_SOURCE 200112
72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <assert.h>
82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <stdio.h>
92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <string.h>
102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <errno.h>
112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint main() {
132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  char buf[1000];
142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  int res = strerror_r(EINVAL, buf, sizeof(buf));
152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  assert(!res);
162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  volatile int z = strlen(buf);
172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  return 0;
182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}
19