| // UNSUPPORTED: target={{.*-windows-gnu}} | 
 |  | 
 | // This is a host program for DLL tests. | 
 | // | 
 | // Just make sure we can compile this. | 
 | // The actual compile&run sequence is to be done by the DLL tests. | 
 | // RUN: %clang_cl_asan -Od %s -Fe%t | 
 |  | 
 | #include <stdio.h> | 
 | #include <windows.h> | 
 |  | 
 | int main(int argc, char **argv) { | 
 |   if (argc != 2) { | 
 |     printf("Usage: %s [client].dll\n", argv[0]); | 
 |     return 101; | 
 |   } | 
 |  | 
 |   const char *dll_name = argv[1]; | 
 |  | 
 |   HMODULE h = LoadLibrary(dll_name); | 
 |   if (!h) { | 
 |     DWORD err = GetLastError(); | 
 |     printf("Could not load DLL: %s (code: %lu)!\n", dll_name, err); | 
 |  | 
 |     LPSTR buf; | 
 |  | 
 |     FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | | 
 |                        FORMAT_MESSAGE_IGNORE_INSERTS, | 
 |                    NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buf, 0, | 
 |                    NULL); | 
 |  | 
 |     printf("Error: %s\n", buf); | 
 |  | 
 |     LocalFree(buf); | 
 |  | 
 |     return 102; | 
 |   } | 
 |  | 
 |   typedef int (*test_function)(); | 
 |   test_function gf = (test_function)GetProcAddress(h, "test_function"); | 
 |   if (!gf) { | 
 |     printf("Could not locate test_function in the DLL!\n"); | 
 |     FreeLibrary(h); | 
 |     return 103; | 
 |   } | 
 |  | 
 |   int ret = gf(); | 
 |  | 
 |   FreeLibrary(h); | 
 |   return ret; | 
 | } |