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