1*67e74705SXin Li // Note: %s and %S must be preceded by --, otherwise it may be interpreted as a 2*67e74705SXin Li // command-line option, e.g. on Mac where %s is commonly under /Users. 3*67e74705SXin Li 4*67e74705SXin Li // /Yc 5*67e74705SXin Li // RUN: %clang_cl -Werror /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \ 6*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YC %s 7*67e74705SXin Li // 1. Build .pch file. 8*67e74705SXin Li // CHECK-YC: cc1 9*67e74705SXin Li // CHECK-YC: -emit-pch 10*67e74705SXin Li // CHECK-YC: -o 11*67e74705SXin Li // CHECK-YC: pchfile.pch 12*67e74705SXin Li // CHECK-YC: -x 13*67e74705SXin Li // CHECK-YC: "c++" 14*67e74705SXin Li // 2. Use .pch file. 15*67e74705SXin Li // CHECK-YC: cc1 16*67e74705SXin Li // CHECK-YC: -emit-obj 17*67e74705SXin Li // CHECK-YC: -include-pch 18*67e74705SXin Li // CHECK-YC: pchfile.pch 19*67e74705SXin Li 20*67e74705SXin Li // /Yc /Fo 21*67e74705SXin Li // /Fo overrides the .obj output filename, but not the .pch filename 22*67e74705SXin Li // RUN: %clang_cl -Werror /Fomyobj.obj /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \ 23*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YCO %s 24*67e74705SXin Li // 1. Build .pch file. 25*67e74705SXin Li // CHECK-YCO: cc1 26*67e74705SXin Li // CHECK-YCO: -emit-pch 27*67e74705SXin Li // CHECK-YCO: -o 28*67e74705SXin Li // CHECK-YCO: pchfile.pch 29*67e74705SXin Li // 2. Use .pch file. 30*67e74705SXin Li // CHECK-YCO: cc1 31*67e74705SXin Li // CHECK-YCO: -emit-obj 32*67e74705SXin Li // CHECK-YCO: -include-pch 33*67e74705SXin Li // CHECK-YCO: pchfile.pch 34*67e74705SXin Li // CHECK-YCO: -o 35*67e74705SXin Li // CHECK-YCO: myobj.obj 36*67e74705SXin Li 37*67e74705SXin Li // /Yc /Y- 38*67e74705SXin Li // /Y- disables pch generation 39*67e74705SXin Li // RUN: %clang_cl -Werror /Y- /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \ 40*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YC-Y_ %s 41*67e74705SXin Li // CHECK-YC-Y_-NOT: -emit-pch 42*67e74705SXin Li // CHECK-YC-Y_-NOT: -include-pch 43*67e74705SXin Li 44*67e74705SXin Li // /Yu 45*67e74705SXin Li // RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /c -### -- %s 2>&1 \ 46*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YU %s 47*67e74705SXin Li // Use .pch file, but don't build it. 48*67e74705SXin Li // CHECK-YU-NOT: -emit-pch 49*67e74705SXin Li // CHECK-YU: cc1 50*67e74705SXin Li // CHECK-YU: -emit-obj 51*67e74705SXin Li // CHECK-YU: -include-pch 52*67e74705SXin Li // CHECK-YU: pchfile.pch 53*67e74705SXin Li 54*67e74705SXin Li // /Yu /Y- 55*67e74705SXin Li // RUN: %clang_cl -Werror /Y- /Yupchfile.h /FIpchfile.h /c -### -- %s 2>&1 \ 56*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YU-Y_ %s 57*67e74705SXin Li // CHECK-YU-Y_-NOT: -emit-pch 58*67e74705SXin Li // CHECK-YU-Y_-NOT: -include-pch 59*67e74705SXin Li 60*67e74705SXin Li // /Yc /Yu -- /Yc overrides /Yc if they both refer to the same file 61*67e74705SXin Li // RUN: %clang_cl -Werror /Ycpchfile.h /Yupchfile.h /FIpchfile.h /c -### -- %s 2>&1 \ 62*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YC-YU %s 63*67e74705SXin Li // 1. Build .pch file. 64*67e74705SXin Li // CHECK-YC-YU: cc1 65*67e74705SXin Li // CHECK-YC-YU: -emit-pch 66*67e74705SXin Li // CHECK-YC-YU: -o 67*67e74705SXin Li // CHECK-YC-YU: pchfile.pch 68*67e74705SXin Li // 2. Use .pch file. 69*67e74705SXin Li // CHECK-YC-YU: cc1 70*67e74705SXin Li // CHECK-YC-YU: -emit-obj 71*67e74705SXin Li // CHECK-YC-YU: -include-pch 72*67e74705SXin Li // CHECK-YC-YU: pchfile.pch 73*67e74705SXin Li 74*67e74705SXin Li // If /Yc /Yu refer to different files, semantics are pretty wonky. Since this 75*67e74705SXin Li // doesn't seem like something that's important in practice, just punt for now. 76*67e74705SXin Li // RUN: %clang_cl -Werror /Ycfoo1.h /Yufoo2.h /FIfoo1.h /FIfoo2.h /c -### -- %s 2>&1 \ 77*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YC-YU-MISMATCH %s 78*67e74705SXin Li // CHECK-YC-YU-MISMATCH: error: support for '/Yc' and '/Yu' with different filenames not implemented yet; flags ignored 79*67e74705SXin Li 80*67e74705SXin Li // Similarly, punt on /Yc with more than one input file. 81*67e74705SXin Li // RUN: %clang_cl -Werror /Ycfoo1.h /FIfoo1.h /c -### -- %s %s 2>&1 \ 82*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YC-MULTIINPUT %s 83*67e74705SXin Li // CHECK-YC-MULTIINPUT: error: support for '/Yc' with more than one source file not implemented yet; flag ignored 84*67e74705SXin Li 85*67e74705SXin Li // /Yc /Yu /Y- 86*67e74705SXin Li // RUN: %clang_cl -Werror /Ycpchfile.h /Yupchfile.h /FIpchfile.h /Y- /c -### -- %s 2>&1 \ 87*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YC-YU-Y_ %s 88*67e74705SXin Li // CHECK-YC-YU-Y_-NOT: -emit-pch 89*67e74705SXin Li // CHECK-YC-YU-Y_-NOT: -include-pch 90*67e74705SXin Li 91*67e74705SXin Li // Test computation of pch filename in various cases. 92*67e74705SXin Li 93*67e74705SXin Li // /Yu /Fpout.pch => out.pch is filename 94*67e74705SXin Li // RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /Fpout.pch /c -### -- %s 2>&1 \ 95*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YUFP1 %s 96*67e74705SXin Li // Use .pch file, but don't build it. 97*67e74705SXin Li // CHECK-YUFP1: -include-pch 98*67e74705SXin Li // CHECK-YUFP1: out.pch 99*67e74705SXin Li 100*67e74705SXin Li // /Yu /Fpout => out.pch is filename (.pch gets added if no extension present) 101*67e74705SXin Li // RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /Fpout.pch /c -### -- %s 2>&1 \ 102*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YUFP2 %s 103*67e74705SXin Li // Use .pch file, but don't build it. 104*67e74705SXin Li // CHECK-YUFP2: -include-pch 105*67e74705SXin Li // CHECK-YUFP2: out.pch 106*67e74705SXin Li 107*67e74705SXin Li // /Yu /Fpout.bmp => out.bmp is filename (.pch not added when extension present) 108*67e74705SXin Li // RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /Fpout.bmp /c -### -- %s 2>&1 \ 109*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YUFP3 %s 110*67e74705SXin Li // Use .pch file, but don't build it. 111*67e74705SXin Li // CHECK-YUFP3: -include-pch 112*67e74705SXin Li // CHECK-YUFP3: out.bmp 113*67e74705SXin Li 114*67e74705SXin Li // /Yusub/dir.h => sub/dir.pch 115*67e74705SXin Li // RUN: %clang_cl -Werror /Yusub/pchfile.h /FIsub/pchfile.h /c -### -- %s 2>&1 \ 116*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YUFP4 %s 117*67e74705SXin Li // Use .pch file, but don't build it. 118*67e74705SXin Li // CHECK-YUFP4: -include-pch 119*67e74705SXin Li // CHECK-YUFP4: sub/pchfile.pch 120*67e74705SXin Li 121*67e74705SXin Li // /Yudir.h /Isub => dir.pch 122*67e74705SXin Li // RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /Isub /c -### -- %s 2>&1 \ 123*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YUFP5 %s 124*67e74705SXin Li // Use .pch file, but don't build it. 125*67e74705SXin Li // CHECK-YUFP5: -include-pch 126*67e74705SXin Li // CHECK-YUFP5: pchfile.pch 127*67e74705SXin Li 128*67e74705SXin Li // FIXME: /Fpdir: use dir/VCx0.pch when dir is directory, where x is major MSVS 129*67e74705SXin Li // version in use. 130*67e74705SXin Li 131*67e74705SXin Li // Spot-check one use of /Fp with /Yc too, else trust the /Yu test cases above 132*67e74705SXin Li // also all assume to /Yc. 133*67e74705SXin Li // RUN: %clang_cl -Werror /Ycpchfile.h /FIpchfile.h /Fpsub/file.pch /c -### -- %s 2>&1 \ 134*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YCFP %s 135*67e74705SXin Li // 1. Build .pch file. 136*67e74705SXin Li // CHECK-YCFP: cc1 137*67e74705SXin Li // CHECK-YCFP: -emit-pch 138*67e74705SXin Li // CHECK-YCFP: -o 139*67e74705SXin Li // CHECK-YCFP: sub/file.pch 140*67e74705SXin Li // 2. Use .pch file. 141*67e74705SXin Li // CHECK-YCFP: cc1 142*67e74705SXin Li // CHECK-YCFP: -emit-obj 143*67e74705SXin Li // CHECK-YCFP: -include-pch 144*67e74705SXin Li // CHECK-YCFP: sub/file.pch 145*67e74705SXin Li 146*67e74705SXin Li // /Ycfoo2.h /FIfoo1.h /FIfoo2.h /FIfoo3.h 147*67e74705SXin Li // => foo1 and foo2 go into pch, foo3 into main compilation 148*67e74705SXin Li // /Yc 149*67e74705SXin Li // RUN: %clang_cl -Werror /Ycfoo2.h /FIfoo1.h /FIfoo2.h /FIfoo3.h /c -### -- %s 2>&1 \ 150*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YCFIFIFI %s 151*67e74705SXin Li // 1. Build .pch file: Includes foo1.h (but NOT foo3.h) and compiles foo2.h 152*67e74705SXin Li // CHECK-YCFIFIFI: cc1 153*67e74705SXin Li // CHECK-YCFIFIFI: -emit-pch 154*67e74705SXin Li // CHECK-YCFIFIFI: -include 155*67e74705SXin Li // CHECK-YCFIFIFI: foo1.h 156*67e74705SXin Li // CHECK-YCFIFIFI-NOT: foo2.h 157*67e74705SXin Li // CHECK-YCFIFIFI-NOT: foo3.h 158*67e74705SXin Li // CHECK-YCFIFIFI: -o 159*67e74705SXin Li // CHECK-YCFIFIFI: foo2.pch 160*67e74705SXin Li // CHECK-YCFIFIFI: -x 161*67e74705SXin Li // CHECK-YCFIFIFI: "c++" 162*67e74705SXin Li // CHECK-YCFIFIFI: foo2.h 163*67e74705SXin Li // 2. Use .pch file: Inlucdes foo2.pch and foo3.h 164*67e74705SXin Li // CHECK-YCFIFIFI: cc1 165*67e74705SXin Li // CHECK-YCFIFIFI: -emit-obj 166*67e74705SXin Li // CHECK-YCFIFIFI-NOT: foo1.h 167*67e74705SXin Li // CHECK-YCFIFIFI-NOT: foo2.h 168*67e74705SXin Li // CHECK-YCFIFIFI: -include-pch 169*67e74705SXin Li // CHECK-YCFIFIFI: foo2.pch 170*67e74705SXin Li // CHECK-YCFIFIFI: -include 171*67e74705SXin Li // CHECK-YCFIFIFI: foo3.h 172*67e74705SXin Li 173*67e74705SXin Li // /Yucfoo2.h /FIfoo1.h /FIfoo2.h /FIfoo3.h 174*67e74705SXin Li // => foo1 foo2 filtered out, foo3 into main compilation 175*67e74705SXin Li // RUN: %clang_cl -Werror /Yufoo2.h /FIfoo1.h /FIfoo2.h /FIfoo3.h /c -### -- %s 2>&1 \ 176*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YUFIFIFI %s 177*67e74705SXin Li // Use .pch file, but don't build it. 178*67e74705SXin Li // CHECK-YUFIFIFI-NOT: -emit-pch 179*67e74705SXin Li // CHECK-YUFIFIFI: cc1 180*67e74705SXin Li // CHECK-YUFIFIFI: -emit-obj 181*67e74705SXin Li // CHECK-YUFIFIFI-NOT: foo1.h 182*67e74705SXin Li // CHECK-YUFIFIFI-NOT: foo2.h 183*67e74705SXin Li // CHECK-YUFIFIFI: -include-pch 184*67e74705SXin Li // CHECK-YUFIFIFI: foo2.pch 185*67e74705SXin Li // CHECK-YUFIFIFI: -include 186*67e74705SXin Li // CHECK-YUFIFIFI: foo3.h 187*67e74705SXin Li 188*67e74705SXin Li // FIXME: Implement support for /Ycfoo.h / /Yufoo.h without /FIfoo.h 189*67e74705SXin Li // RUN: %clang_cl -Werror /Ycfoo.h /c -### -- %s 2>&1 \ 190*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YC-NOFI %s 191*67e74705SXin Li // CHECK-YC-NOFI: error: support for '/Yc' without a corresponding /FI flag not implemented yet; flag ignored 192*67e74705SXin Li // RUN: %clang_cl -Werror /Yufoo.h /c -### -- %s 2>&1 \ 193*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YU-NOFI %s 194*67e74705SXin Li // CHECK-YU-NOFI: error: support for '/Yu' without a corresponding /FI flag not implemented yet; flag ignored 195*67e74705SXin Li 196*67e74705SXin Li // /Yc and /FI relative to /I paths... 197*67e74705SXin Li // The rules are: 198*67e74705SXin Li // Yu/Yc and FI parameter must match exactly, else it's not found 199*67e74705SXin Li // Must match literally exactly: /FI./foo.h /Ycfoo.h does _not_ work. 200*67e74705SXin Li // However, the path can be relative to /I paths. 201*67e74705SXin Li // FIXME: Update the error messages below once /FI is no longer required, but 202*67e74705SXin Li // these test cases all should stay failures as they fail with cl.exe. 203*67e74705SXin Li 204*67e74705SXin Li // Check that ./ isn't canonicalized away. 205*67e74705SXin Li // RUN: %clang_cl -Werror /Ycpchfile.h /FI./pchfile.h /c -### -- %s 2>&1 \ 206*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YC-I1 %s 207*67e74705SXin Li // CHECK-YC-I1: support for '/Yc' without a corresponding /FI flag not implemented yet; flag ignored 208*67e74705SXin Li 209*67e74705SXin Li // Check that ./ isn't canonicalized away. 210*67e74705SXin Li // RUN: %clang_cl -Werror /Yc./pchfile.h /FIpchfile.h /c -### -- %s 2>&1 \ 211*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YC-I2 %s 212*67e74705SXin Li // CHECK-YC-I2: support for '/Yc' without a corresponding /FI flag not implemented yet; flag ignored 213*67e74705SXin Li 214*67e74705SXin Li // With an actual /I argument. 215*67e74705SXin Li // RUN: %clang_cl -Werror /Ifoo /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \ 216*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YC-I3 %s 217*67e74705SXin Li // 1. This writes pchfile.pch into the root dir, even if this will pick up 218*67e74705SXin Li // foo/pchfile.h 219*67e74705SXin Li // CHECK-YC-I3: cc1 220*67e74705SXin Li // CHECK-YC-I3: -emit-pch 221*67e74705SXin Li // CHECK-YC-I3: -o 222*67e74705SXin Li // CHECK-YC-I3: pchfile.pch 223*67e74705SXin Li // 2. Use .pch file. 224*67e74705SXin Li // CHECK-YC-I3: cc1 225*67e74705SXin Li // CHECK-YC-I3: -emit-obj 226*67e74705SXin Li // CHECK-YC-I3: -include-pch 227*67e74705SXin Li // CHECK-YC-I3: pchfile.pch 228*67e74705SXin Li 229*67e74705SXin Li // Check that ./ isn't canonicalized away for /Yu either. 230*67e74705SXin Li // RUN: %clang_cl -Werror /Yupchfile.h /FI./pchfile.h /c -### -- %s 2>&1 \ 231*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YU-I1 %s 232*67e74705SXin Li // CHECK-YU-I1: support for '/Yu' without a corresponding /FI flag not implemented yet; flag ignored 233*67e74705SXin Li 234*67e74705SXin Li // But /FIfoo/bar.h /Ycfoo\bar.h does work, as does /FIfOo.h /Ycfoo.H 235*67e74705SXin Li // FIXME: This part isn't implemented yet. The following two tests should not 236*67e74705SXin Li // show an error but do regular /Yu handling. 237*67e74705SXin Li // RUN: %clang_cl -Werror /YupchFILE.h /FI./pchfile.h /c -### -- %s 2>&1 \ 238*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YU-CASE %s 239*67e74705SXin Li // CHECK-YU-CASE: support for '/Yu' without a corresponding /FI flag not implemented yet; flag ignored 240*67e74705SXin Li // RUN: %clang_cl -Werror /Yu./pchfile.h /FI.\pchfile.h /c -### -- %s 2>&1 \ 241*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YU-SLASH %s 242*67e74705SXin Li // CHECK-YU-SLASH: support for '/Yu' without a corresponding /FI flag not implemented yet; flag ignored 243*67e74705SXin Li 244*67e74705SXin Li // cl.exe warns on multiple /Yc, /Yu, /Fp arguments, but clang-cl silently just 245*67e74705SXin Li // uses the last one. This is true for e.g. /Fo too, so not warning on this 246*67e74705SXin Li // is self-consistent with clang-cl's flag handling. 247*67e74705SXin Li 248*67e74705SXin Li // Interaction with /fallback 249*67e74705SXin Li 250*67e74705SXin Li // /Yc /fallback => /Yc not passed on (but /FI is) 251*67e74705SXin Li // RUN: %clang_cl -Werror /Ycpchfile.h /FIpchfile.h /Fpfoo.pch /fallback /c -### -- %s 2>&1 \ 252*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YC-FALLBACK %s 253*67e74705SXin Li // Note that in /fallback builds, if creation of the pch fails the main compile 254*67e74705SXin Li // does still run so that /fallback can have an effect (this part is not tested) 255*67e74705SXin Li // CHECK-YC-FALLBACK: cc1 256*67e74705SXin Li // CHECK-YC-FALLBACK: -emit-obj 257*67e74705SXin Li // CHECK-YC-FALLBACK: -include-pch 258*67e74705SXin Li // CHECK-YC-FALLBACK: foo.pch 259*67e74705SXin Li // CHECK-YC-FALLBACK: || 260*67e74705SXin Li // CHECK-YC-FALLBACK: cl.exe 261*67e74705SXin Li // CHECK-YC-FALLBACK-NOT: -include-pch 262*67e74705SXin Li // CHECK-YC-FALLBACK-NOT: /Ycpchfile.h 263*67e74705SXin Li // CHECK-YC-FALLBACK: /FIpchfile.h 264*67e74705SXin Li // CHECK-YC-FALLBACK-NOT: /Fpfoo.pch 265*67e74705SXin Li 266*67e74705SXin Li // /Yu /fallback => /Yu not passed on (but /FI is) 267*67e74705SXin Li // RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /Fpfoo.pch /fallback /c -### -- %s 2>&1 \ 268*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YU-FALLBACK %s 269*67e74705SXin Li // CHECK-YU-FALLBACK-NOT: -emit-pch 270*67e74705SXin Li // CHECK-YU-FALLBACK: cc1 271*67e74705SXin Li // CHECK-YU-FALLBACK: -emit-obj 272*67e74705SXin Li // CHECK-YU-FALLBACK: -include-pch 273*67e74705SXin Li // CHECK-YU-FALLBACK: foo.pch 274*67e74705SXin Li // CHECK-YU-FALLBACK: || 275*67e74705SXin Li // CHECK-YU-FALLBACK: cl.exe 276*67e74705SXin Li // CHECK-YU-FALLBACK-NOT: -include-pch 277*67e74705SXin Li // CHECK-YU-FALLBACK-NOT: /Yupchfile.h 278*67e74705SXin Li // CHECK-YU-FALLBACK: /FIpchfile.h 279*67e74705SXin Li // CHECK-YU-FALLBACK-NOT: /Fpfoo.pch 280*67e74705SXin Li 281*67e74705SXin Li // /FI without /Yu => pch file not used, even if it exists (different from 282*67e74705SXin Li // -include, which picks up .gch files if they exist). 283*67e74705SXin Li // RUN: touch %t.pch 284*67e74705SXin Li // RUN: %clang_cl -Werror /FI%t.pch /Fp%t.pch /c -### -- %s 2>&1 \ 285*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-FI %s 286*67e74705SXin Li // CHECK-FI-NOT: -include-pch 287*67e74705SXin Li // CHECK-FI: -include 288*67e74705SXin Li 289*67e74705SXin Li // Test interaction of /Yc with language mode flags. 290*67e74705SXin Li 291*67e74705SXin Li // If /TC changes the input language to C, a c pch file should be produced. 292*67e74705SXin Li // RUN: %clang_cl /TC -Werror /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \ 293*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YCTC %s 294*67e74705SXin Li // CHECK-YCTC: cc1 295*67e74705SXin Li // CHECK-YCTC: -emit-pch 296*67e74705SXin Li // CHECK-YCTC: -o 297*67e74705SXin Li // CHECK-YCTC: pchfile.pch 298*67e74705SXin Li // CHECK-YCTC: -x 299*67e74705SXin Li // CHECK-YCTC: "c" 300*67e74705SXin Li 301*67e74705SXin Li // Also check lower-case /Tc variant. 302*67e74705SXin Li // RUN: %clang_cl -Werror /Ycpchfile.h /FIpchfile.h /c -### /Tc%s 2>&1 \ 303*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-YCTc %s 304*67e74705SXin Li // CHECK-YCTc: cc1 305*67e74705SXin Li // CHECK-YCTc: -emit-pch 306*67e74705SXin Li // CHECK-YCTc: -o 307*67e74705SXin Li // CHECK-YCTc: pchfile.pch 308*67e74705SXin Li // CHECK-YCTc: -x 309*67e74705SXin Li // CHECK-YCTc: "c" 310*67e74705SXin Li 311*67e74705SXin Li // Don't crash when a non-source file is passed. 312*67e74705SXin Li // RUN: %clang_cl -Werror /Ycpchfile.h /FIpchfile.h /c -### -- %S/Inputs/file.prof 2>&1 \ 313*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-NoSource %s 314*67e74705SXin Li // CHECK-NoSource: file.prof:{{.*}}input unused 315*67e74705SXin Li 316*67e74705SXin Li // ...but if an explicit file turns the file into a source file, handle it: 317*67e74705SXin Li // RUN: %clang_cl /TP -Werror /Ycpchfile.h /FIpchfile.h /c -### -- %S/Inputs/file.prof 2>&1 \ 318*67e74705SXin Li // RUN: | FileCheck -check-prefix=CHECK-NoSourceTP %s 319*67e74705SXin Li // CHECK-NoSourceTP: cc1 320*67e74705SXin Li // CHECK-NoSourceTP: -emit-pch 321*67e74705SXin Li // CHECK-NoSourceTP: -o 322*67e74705SXin Li // CHECK-NoSourceTP: pchfile.pch 323*67e74705SXin Li // CHECK-NoSourceTP: -x 324*67e74705SXin Li // CHECK-NoSourceTP: "c++" 325