xref: /openbsd-src/gnu/llvm/clang/lib/Testing/CommandLineArgs.cpp (revision 12c855180aad702bbcca06e0398d774beeafb155)
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