| 1 | // Note: %s must be preceded by --, otherwise it may be interpreted as a |
| 2 | // command-line option, e.g. on Mac where %s is commonly under /Users. |
| 3 | |
| 4 | // RUN: %clang_cl /TC -### -- %s 2>&1 | FileCheck -check-prefix=TC %s |
| 5 | // TC: "-x" "c" |
| 6 | // TC-NOT: warning |
| 7 | // TC-NOT: note |
| 8 | |
| 9 | // RUN: %clang_cl /TP -### -- %s 2>&1 | FileCheck -check-prefix=TP %s |
| 10 | // TP: "-x" "c++" |
| 11 | // TP-NOT: warning |
| 12 | // TP-NOT: note |
| 13 | |
| 14 | // RUN: %clang_cl -### /Tc%s /TP -- %s 2>&1 | FileCheck -check-prefix=Tc %s |
| 15 | // RUN: %clang_cl -### /TP /Tc%s -- %s 2>&1 | FileCheck -check-prefix=Tc %s |
| 16 | // Tc: "-x" "c" |
| 17 | // Tc: "-x" "c++" |
| 18 | // Tc-NOT: warning |
| 19 | // Tc-NOT: note |
| 20 | |
| 21 | // RUN: %clang_cl -### /Tp%s /TC -- %s 2>&1 | FileCheck -check-prefix=Tp %s |
| 22 | // RUN: %clang_cl -### /TC /Tp%s -- %s 2>&1 | FileCheck -check-prefix=Tp %s |
| 23 | // Tp: "-x" "c++" |
| 24 | // Tp: "-x" "c" |
| 25 | // Tp-NOT: warning |
| 26 | // Tp-NOT: note |
| 27 | |
| 28 | // RUN: %clang_cl /TP /TC /TP -### -- %s 2>&1 | FileCheck -check-prefix=WARN %s |
| 29 | // WARN: warning: overriding '/TP' option with '/TC' |
| 30 | // WARN: warning: overriding '/TC' option with '/TP' |
| 31 | // WARN: note: The last /TC or /TP option takes precedence over earlier instances |
| 32 | // WARN-NOT: note |
| 33 | |
| 34 | // MSYS2_ARG_CONV_EXCL tells MSYS2 to skip conversion of the specified argument. |
| 35 | // RUN: env LIB=%S/Inputs/cl-libs MSYS2_ARG_CONV_EXCL="/TP;/c" %clang_cl /c /TP cl-test.lib -### 2>&1 | FileCheck -check-prefix=TPlib %s |
| 36 | // TPlib: warning: cl-test.lib: 'linker' input unused |
| 37 | // TPlib: warning: argument unused during compilation: '/TP' |
| 38 | // TPlib-NOT: cl-test.lib |
| 39 | |
| 40 | // RUN: env LIB=%S/Inputs/cl-libs MSYS2_ARG_CONV_EXCL="/TC;/c" %clang_cl /c /TC cl-test.lib -### 2>&1 | FileCheck -check-prefix=TClib %s |
| 41 | // TClib: warning: cl-test.lib: 'linker' input unused |
| 42 | // TClib: warning: argument unused during compilation: '/TC' |
| 43 | // TClib-NOT: cl-test.lib |
| 44 | |
| 45 | // RUN: not %clang_cl - 2>&1 | FileCheck -check-prefix=STDIN %s |
| 46 | // STDIN: error: use /Tc or /Tp |
| 47 | |
| 48 | // RUN: %clang_cl -### /Tc - 2>&1 | FileCheck -check-prefix=STDINTc %s |
| 49 | // STDINTc: "-x" "c" |
| 50 | |
| 51 | // RUN: env LIB=%S/Inputs/cl-libs %clang_cl -### -- %s cl-test.lib 2>&1 | FileCheck -check-prefix=LIBINPUT %s |
| 52 | // LIBINPUT: link.exe" |
| 53 | // LIBINPUT: "cl-test.lib" |
| 54 | |
| 55 | // RUN: env LIB=%S/Inputs/cl-libs %clang_cl -### -- %s cl-test2.lib 2>&1 | FileCheck -check-prefix=LIBINPUT2 %s |
| 56 | // LIBINPUT2: error: no such file or directory: 'cl-test2.lib' |
| 57 | // LIBINPUT2: link.exe" |
| 58 | // LIBINPUT2-NOT: "cl-test2.lib" |
| 59 | |
| 60 | // RUN: %clang_cl -### -- %s /nonexisting.lib 2>&1 | FileCheck -check-prefix=LIBINPUT3 %s |
| 61 | // LIBINPUT3: error: no such file or directory: '/nonexisting.lib' |
| 62 | // LIBINPUT3: link.exe" |
| 63 | // LIBINPUT3-NOT: "/nonexisting.lib" |
| 64 | |
| 65 | void f(); |
| 66 | |