reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
// Check that -asan-use-private-alias silence the false
// positive ODR violation on Darwin with LTO.

// REQUIRES: lto

// 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: %run %t 2>&1 | FileCheck %s

#include <stdio.h>
#include <stdlib.h>
void putstest();

#if PART == 1

static const char *my_global = "test\n\00abc";

int main()
{
  fputs(my_global, stderr);
  putstest();
  fprintf(stderr, "Done.\n");
  return 0;
}

#else // PART == 1

static const char *my_other_global = "test\n\00abc";

void putstest()
{
  fputs(my_other_global, stderr);
}

#endif // PART == 1

// CHECK-NOT: ERROR: AddressSanitizer: odr-violation
// CHECK: Done.