1ec727ea7Spatrick //===--- CommandLineArgs.cpp ----------------------------------------------===//
2ec727ea7Spatrick //
3ec727ea7Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4ec727ea7Spatrick // See https://llvm.org/LICENSE.txt for license information.
5ec727ea7Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6ec727ea7Spatrick //
7ec727ea7Spatrick //===----------------------------------------------------------------------===//
8ec727ea7Spatrick
9ec727ea7Spatrick #include "clang/Testing/CommandLineArgs.h"
10ec727ea7Spatrick #include "llvm/Support/ErrorHandling.h"
11ec727ea7Spatrick
12ec727ea7Spatrick namespace clang {
13ec727ea7Spatrick
getCommandLineArgsForTesting(TestLanguage Lang)14ec727ea7Spatrick std::vector<std::string> getCommandLineArgsForTesting(TestLanguage Lang) {
15ec727ea7Spatrick std::vector<std::string> Args;
16ec727ea7Spatrick // Test with basic arguments.
17ec727ea7Spatrick switch (Lang) {
18ec727ea7Spatrick case Lang_C89:
19ec727ea7Spatrick Args = {"-x", "c", "-std=c89"};
20ec727ea7Spatrick break;
21ec727ea7Spatrick case Lang_C99:
22ec727ea7Spatrick Args = {"-x", "c", "-std=c99"};
23ec727ea7Spatrick break;
24ec727ea7Spatrick case Lang_CXX03:
25ec727ea7Spatrick Args = {"-std=c++03", "-frtti"};
26ec727ea7Spatrick break;
27ec727ea7Spatrick case Lang_CXX11:
28ec727ea7Spatrick Args = {"-std=c++11", "-frtti"};
29ec727ea7Spatrick break;
30ec727ea7Spatrick case Lang_CXX14:
31ec727ea7Spatrick Args = {"-std=c++14", "-frtti"};
32ec727ea7Spatrick break;
33ec727ea7Spatrick case Lang_CXX17:
34ec727ea7Spatrick Args = {"-std=c++17", "-frtti"};
35ec727ea7Spatrick break;
36ec727ea7Spatrick case Lang_CXX20:
37ec727ea7Spatrick Args = {"-std=c++20", "-frtti"};
38ec727ea7Spatrick break;
39*12c85518Srobert case Lang_OBJC:
40*12c85518Srobert Args = {"-x", "objective-c", "-frtti", "-fobjc-nonfragile-abi"};
41*12c85518Srobert break;
42ec727ea7Spatrick case Lang_OBJCXX:
43ec727ea7Spatrick Args = {"-x", "objective-c++", "-frtti"};
44ec727ea7Spatrick break;
45ec727ea7Spatrick case Lang_OpenCL:
46ec727ea7Spatrick llvm_unreachable("Not implemented yet!");
47ec727ea7Spatrick }
48ec727ea7Spatrick return Args;
49ec727ea7Spatrick }
50ec727ea7Spatrick
getCC1ArgsForTesting(TestLanguage Lang)51*12c85518Srobert std::vector<std::string> getCC1ArgsForTesting(TestLanguage Lang) {
52*12c85518Srobert std::vector<std::string> Args;
53*12c85518Srobert switch (Lang) {
54*12c85518Srobert case Lang_C89:
55*12c85518Srobert Args = {"-xc", "-std=c89"};
56*12c85518Srobert break;
57*12c85518Srobert case Lang_C99:
58*12c85518Srobert Args = {"-xc", "-std=c99"};
59*12c85518Srobert break;
60*12c85518Srobert case Lang_CXX03:
61*12c85518Srobert Args = {"-std=c++03"};
62*12c85518Srobert break;
63*12c85518Srobert case Lang_CXX11:
64*12c85518Srobert Args = {"-std=c++11"};
65*12c85518Srobert break;
66*12c85518Srobert case Lang_CXX14:
67*12c85518Srobert Args = {"-std=c++14"};
68*12c85518Srobert break;
69*12c85518Srobert case Lang_CXX17:
70*12c85518Srobert Args = {"-std=c++17"};
71*12c85518Srobert break;
72*12c85518Srobert case Lang_CXX20:
73*12c85518Srobert Args = {"-std=c++20"};
74*12c85518Srobert break;
75*12c85518Srobert case Lang_OBJC:
76*12c85518Srobert Args = {"-xobjective-c"};
77*12c85518Srobert break;
78*12c85518Srobert case Lang_OBJCXX:
79*12c85518Srobert Args = {"-xobjective-c++"};
80*12c85518Srobert break;
81*12c85518Srobert case Lang_OpenCL:
82*12c85518Srobert llvm_unreachable("Not implemented yet!");
83*12c85518Srobert }
84*12c85518Srobert return Args;
85*12c85518Srobert }
86*12c85518Srobert
getFilenameForTesting(TestLanguage Lang)87ec727ea7Spatrick StringRef getFilenameForTesting(TestLanguage Lang) {
88ec727ea7Spatrick switch (Lang) {
89ec727ea7Spatrick case Lang_C89:
90ec727ea7Spatrick case Lang_C99:
91ec727ea7Spatrick return "input.c";
92ec727ea7Spatrick
93ec727ea7Spatrick case Lang_CXX03:
94ec727ea7Spatrick case Lang_CXX11:
95ec727ea7Spatrick case Lang_CXX14:
96ec727ea7Spatrick case Lang_CXX17:
97ec727ea7Spatrick case Lang_CXX20:
98ec727ea7Spatrick return "input.cc";
99ec727ea7Spatrick
100ec727ea7Spatrick case Lang_OpenCL:
101ec727ea7Spatrick return "input.cl";
102ec727ea7Spatrick
103*12c85518Srobert case Lang_OBJC:
104*12c85518Srobert return "input.m";
105*12c85518Srobert
106ec727ea7Spatrick case Lang_OBJCXX:
107ec727ea7Spatrick return "input.mm";
108ec727ea7Spatrick }
109ec727ea7Spatrick llvm_unreachable("Unhandled TestLanguage enum");
110ec727ea7Spatrick }
111ec727ea7Spatrick
112ec727ea7Spatrick } // end namespace clang
113