Home | History | Annotate | Download | only in Windows
      1 // Make sure everything works even if the main module doesn't have any stack
      2 // variables, thus doesn't explicitly reference any symbol exported by the
      3 // runtime thunk.
      4 //
      5 // RUN: %clang_cl_asan -LD -O0 -DDLL1 %s -Fe%t1.dll
      6 // RUN: %clang_cl_asan -LD -O0 -DDLL2 %s -Fe%t2.dll
      7 // RUN: %clang_cl_asan -O0 -DEXE %s %t1.lib %t2.lib -Fe%t
      8 // RUN: not %run %t 2>&1 | FileCheck %s
      9 
     10 #include <malloc.h>
     11 #include <string.h>
     12 
     13 extern "C" {
     14 #if defined(EXE)
     15 __declspec(dllimport) void foo1();
     16 __declspec(dllimport) void foo2();
     17 
     18 int main() {
     19   foo1();
     20   foo2();
     21 }
     22 #elif defined(DLL1)
     23 __declspec(dllexport) void foo1() {}
     24 #elif defined(DLL2)
     25 __attribute__((noinline))
     26 static void NullDeref(int *ptr) {
     27   // CHECK: ERROR: AddressSanitizer: access-violation on unknown address
     28   // CHECK:   {{0x0*000.. .*pc 0x.*}}
     29   ptr[10]++;  // BOOM
     30 }
     31 
     32 __declspec(dllexport) void foo2() {
     33   NullDeref((int*)0);
     34   // CHECK: {{    #1 0x.* in foo2.*null_deref_multiple_dlls.cc:}}[[@LINE-1]]
     35   // CHECK: AddressSanitizer can not provide additional info.
     36 }
     37 #else
     38 # error oops!
     39 #endif
     40 }
     41