12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s
215832c2afc4f04fa558160441d1b01fb3f0ec08bAlexander Potapenko
3c754cd70347b33da0475b191a5d6bad9d5c4362cAlexander Potapenko// Test the time() interceptor.
415832c2afc4f04fa558160441d1b01fb3f0ec08bAlexander Potapenko
55d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// There's no interceptor for time() on Windows yet.
65d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// XFAIL: win32
75d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines
815832c2afc4f04fa558160441d1b01fb3f0ec08bAlexander Potapenko#include <stdio.h>
915832c2afc4f04fa558160441d1b01fb3f0ec08bAlexander Potapenko#include <stdlib.h>
1015832c2afc4f04fa558160441d1b01fb3f0ec08bAlexander Potapenko#include <time.h>
1115832c2afc4f04fa558160441d1b01fb3f0ec08bAlexander Potapenko
1215832c2afc4f04fa558160441d1b01fb3f0ec08bAlexander Potapenkoint main() {
1315832c2afc4f04fa558160441d1b01fb3f0ec08bAlexander Potapenko  time_t *tm = (time_t*)malloc(sizeof(time_t));
1415832c2afc4f04fa558160441d1b01fb3f0ec08bAlexander Potapenko  free(tm);
15c754cd70347b33da0475b191a5d6bad9d5c4362cAlexander Potapenko  time_t t = time(tm);
162c02f6327f51243fc0ba17992cecb2857fa8bdf8Kostya Serebryany  printf("Time: %s\n", ctime(&t));  // NOLINT
1715832c2afc4f04fa558160441d1b01fb3f0ec08bAlexander Potapenko  // CHECK: use-after-free
185d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines  // Regression check for
195d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines  // https://code.google.com/p/address-sanitizer/issues/detail?id=321
205d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines  // CHECK: SUMMARY
2115832c2afc4f04fa558160441d1b01fb3f0ec08bAlexander Potapenko  return 0;
2215832c2afc4f04fa558160441d1b01fb3f0ec08bAlexander Potapenko}
23