Path: blob/main/contrib/llvm-project/clang/lib/Testing/CommandLineArgs.cpp
35232 views
//===--- CommandLineArgs.cpp ----------------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "clang/Testing/CommandLineArgs.h"9#include "llvm/MC/TargetRegistry.h"10#include "llvm/Support/ErrorHandling.h"1112namespace clang {1314std::vector<std::string> getCommandLineArgsForTesting(TestLanguage Lang) {15std::vector<std::string> Args;16// Test with basic arguments.17switch (Lang) {18case Lang_C89:19Args = {"-x", "c", "-std=c89"};20break;21case Lang_C99:22Args = {"-x", "c", "-std=c99"};23break;24case Lang_CXX03:25Args = {"-std=c++03", "-frtti"};26break;27case Lang_CXX11:28Args = {"-std=c++11", "-frtti"};29break;30case Lang_CXX14:31Args = {"-std=c++14", "-frtti"};32break;33case Lang_CXX17:34Args = {"-std=c++17", "-frtti"};35break;36case Lang_CXX20:37Args = {"-std=c++20", "-frtti"};38break;39case Lang_CXX23:40Args = {"-std=c++23", "-frtti"};41break;42case Lang_OBJC:43Args = {"-x", "objective-c", "-frtti", "-fobjc-nonfragile-abi"};44break;45case Lang_OBJCXX:46Args = {"-x", "objective-c++", "-frtti"};47break;48case Lang_OpenCL:49llvm_unreachable("Not implemented yet!");50}51return Args;52}5354std::vector<std::string> getCC1ArgsForTesting(TestLanguage Lang) {55std::vector<std::string> Args;56switch (Lang) {57case Lang_C89:58Args = {"-xc", "-std=c89"};59break;60case Lang_C99:61Args = {"-xc", "-std=c99"};62break;63case Lang_CXX03:64Args = {"-std=c++03"};65break;66case Lang_CXX11:67Args = {"-std=c++11"};68break;69case Lang_CXX14:70Args = {"-std=c++14"};71break;72case Lang_CXX17:73Args = {"-std=c++17"};74break;75case Lang_CXX20:76Args = {"-std=c++20"};77break;78case Lang_CXX23:79Args = {"-std=c++23"};80break;81case Lang_OBJC:82Args = {"-xobjective-c"};83break;84case Lang_OBJCXX:85Args = {"-xobjective-c++"};86break;87case Lang_OpenCL:88llvm_unreachable("Not implemented yet!");89}90return Args;91}9293StringRef getFilenameForTesting(TestLanguage Lang) {94switch (Lang) {95case Lang_C89:96case Lang_C99:97return "input.c";9899case Lang_CXX03:100case Lang_CXX11:101case Lang_CXX14:102case Lang_CXX17:103case Lang_CXX20:104case Lang_CXX23:105return "input.cc";106107case Lang_OpenCL:108return "input.cl";109110case Lang_OBJC:111return "input.m";112113case Lang_OBJCXX:114return "input.mm";115}116llvm_unreachable("Unhandled TestLanguage enum");117}118119std::string getAnyTargetForTesting() {120for (const auto &Target : llvm::TargetRegistry::targets()) {121std::string Error;122StringRef TargetName(Target.getName());123if (TargetName == "x86-64")124TargetName = "x86_64";125if (llvm::TargetRegistry::lookupTarget(std::string(TargetName), Error) ==126&Target) {127return std::string(TargetName);128}129}130return "";131}132133} // end namespace clang134135136