1 | // UNSUPPORTED: target={{.*-windows-gnu}} |
---|---|
2 | // XFAIL: msvc |
3 | |
4 | // This is a host program for DLL tests. |
5 | // |
6 | // Just make sure we can compile this. |
7 | // The actual compile&run sequence is to be done by the DLL tests. |
8 | // RUN: %clang_cl_asan -Od %s -Fe%t |
9 | |
10 | #include <stdio.h> |
11 | #include <windows.h> |
12 | |
13 | int main(int argc, char **argv) { |
14 | if (argc != 2) { |
15 | printf(format: "Usage: %s [client].dll\n", argv[0]); |
16 | return 101; |
17 | } |
18 | |
19 | const char *dll_name = argv[1]; |
20 | |
21 | HMODULE h = LoadLibrary(dll_name); |
22 | if (!h) { |
23 | DWORD err = GetLastError(); |
24 | printf("Could not load DLL: %s (code: %lu)!\n", dll_name, err); |
25 | |
26 | LPSTR buf; |
27 | |
28 | FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | |
29 | FORMAT_MESSAGE_IGNORE_INSERTS, |
30 | NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buf, 0, |
31 | NULL); |
32 | |
33 | printf("Error: %s\n", buf); |
34 | |
35 | LocalFree(buf); |
36 | |
37 | return 102; |
38 | } |
39 | |
40 | typedef int (*test_function)(); |
41 | test_function gf = (test_function)GetProcAddress(h, "test_function"); |
42 | if (!gf) { |
43 | printf(format: "Could not locate test_function in the DLL!\n"); |
44 | FreeLibrary(h); |
45 | return 103; |
46 | } |
47 | |
48 | int ret = gf(); |
49 | |
50 | FreeLibrary(h); |
51 | return ret; |
52 | } |
53 |