10e265e31SDmitri Gribenko //===--- CommandLineArgs.cpp ----------------------------------------------===//
20e265e31SDmitri Gribenko //
30e265e31SDmitri Gribenko // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40e265e31SDmitri Gribenko // See https://llvm.org/LICENSE.txt for license information.
50e265e31SDmitri Gribenko // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60e265e31SDmitri Gribenko //
70e265e31SDmitri Gribenko //===----------------------------------------------------------------------===//
80e265e31SDmitri Gribenko 
90e265e31SDmitri Gribenko #include "clang/Testing/CommandLineArgs.h"
100e265e31SDmitri Gribenko #include "llvm/Support/ErrorHandling.h"
110e265e31SDmitri Gribenko 
120e265e31SDmitri Gribenko namespace clang {
130e265e31SDmitri Gribenko 
getCommandLineArgsForTesting(TestLanguage Lang)140e265e31SDmitri Gribenko std::vector<std::string> getCommandLineArgsForTesting(TestLanguage Lang) {
150e265e31SDmitri Gribenko   std::vector<std::string> Args;
160e265e31SDmitri Gribenko   // Test with basic arguments.
170e265e31SDmitri Gribenko   switch (Lang) {
180e265e31SDmitri Gribenko   case Lang_C89:
190e265e31SDmitri Gribenko     Args = {"-x", "c", "-std=c89"};
200e265e31SDmitri Gribenko     break;
21d559185aSDmitri Gribenko   case Lang_C99:
22d559185aSDmitri Gribenko     Args = {"-x", "c", "-std=c99"};
23d559185aSDmitri Gribenko     break;
24d559185aSDmitri Gribenko   case Lang_CXX03:
25d559185aSDmitri Gribenko     Args = {"-std=c++03", "-frtti"};
260e265e31SDmitri Gribenko     break;
270e265e31SDmitri Gribenko   case Lang_CXX11:
280e265e31SDmitri Gribenko     Args = {"-std=c++11", "-frtti"};
290e265e31SDmitri Gribenko     break;
300e265e31SDmitri Gribenko   case Lang_CXX14:
310e265e31SDmitri Gribenko     Args = {"-std=c++14", "-frtti"};
320e265e31SDmitri Gribenko     break;
330e265e31SDmitri Gribenko   case Lang_CXX17:
340e265e31SDmitri Gribenko     Args = {"-std=c++17", "-frtti"};
350e265e31SDmitri Gribenko     break;
36d559185aSDmitri Gribenko   case Lang_CXX20:
37d559185aSDmitri Gribenko     Args = {"-std=c++20", "-frtti"};
380e265e31SDmitri Gribenko     break;
394604db94SVolodymyr Sapsai   case Lang_OBJC:
404604db94SVolodymyr Sapsai     Args = {"-x", "objective-c", "-frtti", "-fobjc-nonfragile-abi"};
414604db94SVolodymyr Sapsai     break;
420e265e31SDmitri Gribenko   case Lang_OBJCXX:
430e265e31SDmitri Gribenko     Args = {"-x", "objective-c++", "-frtti"};
440e265e31SDmitri Gribenko     break;
450e265e31SDmitri Gribenko   case Lang_OpenCL:
460e265e31SDmitri Gribenko     llvm_unreachable("Not implemented yet!");
470e265e31SDmitri Gribenko   }
480e265e31SDmitri Gribenko   return Args;
490e265e31SDmitri Gribenko }
500e265e31SDmitri Gribenko 
getCC1ArgsForTesting(TestLanguage Lang)51a7691deeSSam McCall std::vector<std::string> getCC1ArgsForTesting(TestLanguage Lang) {
52a7691deeSSam McCall   std::vector<std::string> Args;
53a7691deeSSam McCall   switch (Lang) {
54a7691deeSSam McCall   case Lang_C89:
55a7691deeSSam McCall     Args = {"-xc", "-std=c89"};
56a7691deeSSam McCall     break;
57a7691deeSSam McCall   case Lang_C99:
58a7691deeSSam McCall     Args = {"-xc", "-std=c99"};
59a7691deeSSam McCall     break;
60a7691deeSSam McCall   case Lang_CXX03:
61a7691deeSSam McCall     Args = {"-std=c++03"};
62a7691deeSSam McCall     break;
63a7691deeSSam McCall   case Lang_CXX11:
64a7691deeSSam McCall     Args = {"-std=c++11"};
65a7691deeSSam McCall     break;
66a7691deeSSam McCall   case Lang_CXX14:
67a7691deeSSam McCall     Args = {"-std=c++14"};
68a7691deeSSam McCall     break;
69a7691deeSSam McCall   case Lang_CXX17:
70a7691deeSSam McCall     Args = {"-std=c++17"};
71a7691deeSSam McCall     break;
72a7691deeSSam McCall   case Lang_CXX20:
73a7691deeSSam McCall     Args = {"-std=c++20"};
74a7691deeSSam McCall     break;
75*a7f9f2feSVolodymyr Sapsai   case Lang_OBJC:
76*a7f9f2feSVolodymyr Sapsai     Args = {"-xobjective-c"};
77*a7f9f2feSVolodymyr Sapsai     break;
78a7691deeSSam McCall   case Lang_OBJCXX:
79a7691deeSSam McCall     Args = {"-xobjective-c++"};
80a7691deeSSam McCall     break;
81a7691deeSSam McCall   case Lang_OpenCL:
82a7691deeSSam McCall     llvm_unreachable("Not implemented yet!");
83a7691deeSSam McCall   }
84a7691deeSSam McCall   return Args;
85a7691deeSSam McCall }
86a7691deeSSam McCall 
getFilenameForTesting(TestLanguage Lang)87b5fc1debSDmitri Gribenko StringRef getFilenameForTesting(TestLanguage Lang) {
88b5fc1debSDmitri Gribenko   switch (Lang) {
89b5fc1debSDmitri Gribenko   case Lang_C89:
90b5fc1debSDmitri Gribenko   case Lang_C99:
91b5fc1debSDmitri Gribenko     return "input.c";
92b5fc1debSDmitri Gribenko 
93b5fc1debSDmitri Gribenko   case Lang_CXX03:
94b5fc1debSDmitri Gribenko   case Lang_CXX11:
95b5fc1debSDmitri Gribenko   case Lang_CXX14:
96b5fc1debSDmitri Gribenko   case Lang_CXX17:
97b5fc1debSDmitri Gribenko   case Lang_CXX20:
98b5fc1debSDmitri Gribenko     return "input.cc";
99b5fc1debSDmitri Gribenko 
100b5fc1debSDmitri Gribenko   case Lang_OpenCL:
101b5fc1debSDmitri Gribenko     return "input.cl";
102b5fc1debSDmitri Gribenko 
1034604db94SVolodymyr Sapsai   case Lang_OBJC:
1044604db94SVolodymyr Sapsai     return "input.m";
1054604db94SVolodymyr Sapsai 
106b5fc1debSDmitri Gribenko   case Lang_OBJCXX:
107b5fc1debSDmitri Gribenko     return "input.mm";
108b5fc1debSDmitri Gribenko   }
109a30b5c5aSSimon Pilgrim   llvm_unreachable("Unhandled TestLanguage enum");
110b5fc1debSDmitri Gribenko }
111b5fc1debSDmitri Gribenko 
1120e265e31SDmitri Gribenko } // end namespace clang
113