1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
//===---- DriverTest.cpp --------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "clang-c/Driver.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Support/Debug.h"
#include "gtest/gtest.h"
#define DEBUG_TYPE "driver-test"
TEST(DriverTests, Basic) {
const char *ArgV[] = {"clang", "-w", "t.cpp", "-o", "t.ll"};
CXExternalActionList *EAL = clang_Driver_getExternalActionsForCommand_v0(
GTEST_ARRAY_SIZE_(ArgV), ArgV, nullptr, nullptr, nullptr);
ASSERT_NE(EAL, nullptr);
ASSERT_EQ(EAL->Count, 2);
auto *CompileAction = EAL->Actions[0];
ASSERT_GE(CompileAction->ArgC, 2);
EXPECT_STREQ(CompileAction->ArgV[0], "clang");
EXPECT_STREQ(CompileAction->ArgV[1], "-cc1");
clang_Driver_ExternalActionList_dispose(EAL);
}
TEST(DriverTests, WorkingDirectory) {
const char *ArgV[] = {"clang", "-c", "t.cpp", "-o", "t.o"};
CXExternalActionList *EAL = clang_Driver_getExternalActionsForCommand_v0(
GTEST_ARRAY_SIZE_(ArgV), ArgV, nullptr, "/", nullptr);
ASSERT_NE(EAL, nullptr);
ASSERT_EQ(EAL->Count, 1);
auto *CompileAction = EAL->Actions[0];
const char **FDCD = std::find(CompileAction->ArgV, CompileAction->ArgV +
CompileAction->ArgC,
llvm::StringRef("-fdebug-compilation-dir=/"));
ASSERT_NE(FDCD, CompileAction->ArgV + CompileAction->ArgC);
ASSERT_NE(FDCD + 1, CompileAction->ArgV + CompileAction->ArgC);
EXPECT_STREQ(*FDCD, "-fdebug-compilation-dir=/");
clang_Driver_ExternalActionList_dispose(EAL);
}
TEST(DriverTests, Diagnostics) {
const char *ArgV[] = {"clang", "-c", "nosuchfile.cpp", "-o", "t.o"};
CXExternalActionList *EAL = clang_Driver_getExternalActionsForCommand_v0(
GTEST_ARRAY_SIZE_(ArgV), ArgV, nullptr, "/no/such/working/dir", nullptr);
EXPECT_EQ(nullptr, EAL);
clang_Driver_ExternalActionList_dispose(EAL);
CXDiagnosticSet Diags;
EAL = clang_Driver_getExternalActionsForCommand_v0(
GTEST_ARRAY_SIZE_(ArgV), ArgV, nullptr, "/no/such/working/dir", &Diags);
EXPECT_EQ(nullptr, EAL);
ASSERT_NE(nullptr, Diags);
unsigned NumDiags = clang_getNumDiagnosticsInSet(Diags);
ASSERT_EQ(1u, NumDiags);
CXDiagnostic Diag = clang_getDiagnosticInSet(Diags, 0);
CXString Str = clang_formatDiagnostic(Diag, 0);
EXPECT_STREQ(clang_getCString(Str),
"error: unable to set working directory: /no/such/working/dir");
clang_disposeString(Str);
clang_disposeDiagnosticSet(Diags);
clang_Driver_ExternalActionList_dispose(EAL);
}
TEST(DriverTests, LanguageDiagnostics) {
const char *ArgV[] = {"clang", "-c", "-x", "objective-swift++",
"-", "-o", "t.o"};
CXExternalActionList *EAL = clang_Driver_getExternalActionsForCommand_v0(
GTEST_ARRAY_SIZE_(ArgV), ArgV, nullptr, "/", nullptr);
EXPECT_EQ(nullptr, EAL);
clang_Driver_ExternalActionList_dispose(EAL);
CXDiagnosticSet Diags;
EAL = clang_Driver_getExternalActionsForCommand_v0(
GTEST_ARRAY_SIZE_(ArgV), ArgV, nullptr, "/", &Diags);
EXPECT_EQ(nullptr, EAL);
ASSERT_NE(nullptr, Diags);
unsigned NumDiags = clang_getNumDiagnosticsInSet(Diags);
ASSERT_EQ(1u, NumDiags);
CXDiagnostic Diag = clang_getDiagnosticInSet(Diags, 0);
CXString Str = clang_formatDiagnostic(Diag, 0);
EXPECT_STREQ(clang_getCString(Str),
"error: language not recognized: 'objective-swift++'");
clang_disposeString(Str);
clang_disposeDiagnosticSet(Diags);
clang_Driver_ExternalActionList_dispose(EAL);
}
TEST(DriverTests, DriverParsesDiagnosticsOptions) {
const char *ArgV[] = {"clang",
"-x",
"objective-c",
"-target",
"i386-apple-ios14.0-simulator",
"-c",
"t.m",
"-o",
"t.o",
"-Wno-error=invalid-ios-deployment-target"};
CXDiagnosticSet Diags;
CXExternalActionList *EAL = clang_Driver_getExternalActionsForCommand_v0(
GTEST_ARRAY_SIZE_(ArgV), ArgV, nullptr, "/", &Diags);
ASSERT_NE(EAL, nullptr);
ASSERT_EQ(EAL->Count, 1);
ASSERT_EQ(nullptr, Diags);
auto *CompileAction = EAL->Actions[0];
ASSERT_GE(CompileAction->ArgC, 2);
EXPECT_STREQ(CompileAction->ArgV[0], "clang");
EXPECT_STREQ(CompileAction->ArgV[1], "-cc1");
clang_disposeDiagnosticSet(Diags);
clang_Driver_ExternalActionList_dispose(EAL);
}
|