ilya-biryukov created this revision.
ilya-biryukov added reviewers: thakis, ioeric.
Herald added a reviewer: EricWF.
Herald added subscribers: llvm-commits, arphaman.
Herald added a project: clang.
Specifically, the version of libc++ that lives alongside the c-index-test
binary. After r348365 driver relies on a correct value of argv[0] to find
libc++ and 'c-index-test' did not pass proper argv[0] when calling the
driver.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D57532
Files:
clang/test/Index/record-completion-invocation.c
clang/test/Index/record-parsing-invocation.c
clang/tools/c-index-test/c-index-test.c
Index: clang/tools/c-index-test/c-index-test.c
===================================================================
--- clang/tools/c-index-test/c-index-test.c
+++ clang/tools/c-index-test/c-index-test.c
@@ -1,15 +1,16 @@
/* c-index-test.c */
-#include "clang/Config/config.h"
-#include "clang-c/Index.h"
-#include "clang-c/CXCompilationDatabase.h"
#include "clang-c/BuildSystem.h"
+#include "clang-c/CXCompilationDatabase.h"
#include "clang-c/Documentation.h"
+#include "clang-c/Index.h"
+#include "clang/Config/config.h"
+#include <assert.h>
#include <ctype.h>
-#include <stdlib.h>
+#include <memory.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
-#include <assert.h>
#ifdef CLANG_HAVE_LIBXML
#include <libxml/parser.h>
@@ -64,6 +65,15 @@
extern char *dirname(char *);
#endif
+static void PrependArgv0(const char *argv0, int argc, const char **argv,
+ const char **Out) {
+ int I;
+ assert(Out != 0);
+ Out[0] = argv0;
+ for (I = 1; I < argc + 1; ++I)
+ Out[I] = argv[I - 1];
+}
+
/** Return the default parsing options. */
static unsigned getDefaultParsingOptions() {
unsigned options = CXTranslationUnit_DetailedPreprocessingRecord;
@@ -1834,7 +1844,7 @@
/* Target information testing. */
/******************************************************************************/
-static int print_target_info(int argc, const char **argv) {
+static int print_target_info(const char *argv0, int argc, const char **argv) {
CXIndex Idx;
CXTranslationUnit TU;
CXTargetInfo TargetInfo;
@@ -1842,6 +1852,8 @@
const char *FileName;
enum CXErrorCode Err;
int PointerWidth;
+ const char **ParseArgv;
+ int ParseArgc;
if (argc == 0) {
fprintf(stderr, "No filename specified\n");
@@ -1850,13 +1862,19 @@
FileName = argv[1];
+ ParseArgc = argc + 1;
+ ParseArgv = malloc(sizeof(char *) * ParseArgc);
+ PrependArgv0(argv0, ParseArgc - 1, argv, ParseArgv);
+
Idx = clang_createIndex(0, 1);
- Err = clang_parseTranslationUnit2(Idx, FileName, argv, argc, NULL, 0,
- getDefaultParsingOptions(), &TU);
+ Err = clang_parseTranslationUnit2FullArgv(Idx, FileName, ParseArgv, ParseArgc,
+ NULL, 0, getDefaultParsingOptions(),
+ &TU);
if (Err != CXError_Success) {
fprintf(stderr, "Couldn't parse translation unit!\n");
describeLibclangFailure(Err);
clang_disposeIndex(Idx);
+ free(ParseArgv);
return 1;
}
@@ -1872,6 +1890,7 @@
clang_TargetInfo_dispose(TargetInfo);
clang_disposeTranslationUnit(TU);
clang_disposeIndex(Idx);
+ free(ParseArgv);
return 0;
}
@@ -1956,7 +1975,7 @@
return result;
}
-int perform_test_load_source(int argc, const char **argv,
+int perform_test_load_source(const char *argv0, int argc, const char **argv,
const char *filter, CXCursorVisitor Visitor,
PostVisitTU PV) {
CXIndex Idx;
@@ -1969,6 +1988,8 @@
unsigned Repeats = 0;
unsigned I;
const char *InvocationPath;
+ const char **ParseArgv;
+ int ParseArgc;
Idx = clang_createIndex(/* excludeDeclsFromPCH */
(!strcmp(filter, "local") ||
@@ -1994,16 +2015,19 @@
if (getenv("CINDEXTEST_EDITING"))
Repeats = 5;
- Err = clang_parseTranslationUnit2(Idx, 0,
- argv + num_unsaved_files,
- argc - num_unsaved_files,
- unsaved_files, num_unsaved_files,
- getDefaultParsingOptions(), &TU);
+ ParseArgc = argc - num_unsaved_files + 1;
+ ParseArgv = malloc(sizeof(char *) * ParseArgc);
+ PrependArgv0(argv0, ParseArgc - 1, argv + num_unsaved_files, ParseArgv);
+
+ Err = clang_parseTranslationUnit2FullArgv(Idx, 0, ParseArgv, ParseArgc,
+ unsaved_files, num_unsaved_files,
+ getDefaultParsingOptions(), &TU);
if (Err != CXError_Success) {
fprintf(stderr, "Unable to load translation unit!\n");
describeLibclangFailure(Err);
free_remapped_files(unsaved_files, num_unsaved_files);
clang_disposeIndex(Idx);
+ free(ParseArgv);
return 1;
}
@@ -2020,6 +2044,7 @@
describeLibclangFailure(Err);
free_remapped_files(unsaved_files, num_unsaved_files);
clang_disposeIndex(Idx);
+ free(ParseArgv);
return 1;
}
}
@@ -2029,12 +2054,13 @@
CommentSchemaFile);
free_remapped_files(unsaved_files, num_unsaved_files);
clang_disposeIndex(Idx);
+ free(ParseArgv);
return result;
}
-int perform_test_reparse_source(int argc, const char **argv, int trials,
- const char *filter, CXCursorVisitor Visitor,
- PostVisitTU PV) {
+int perform_test_reparse_source(const char *argv0, int argc, const char **argv,
+ int trials, const char *filter,
+ CXCursorVisitor Visitor, PostVisitTU PV) {
CXIndex Idx;
CXTranslationUnit TU;
struct CXUnsavedFile *unsaved_files = 0;
@@ -2045,7 +2071,9 @@
int trial;
int remap_after_trial = 0;
char *endptr = 0;
-
+ const char **ParseArgv;
+ int ParseArgc;
+
Idx = clang_createIndex(/* excludeDeclsFromPCH */
!strcmp(filter, "local") ? 1 : 0,
/* displayDiagnostics=*/1);
@@ -2063,18 +2091,21 @@
compiler_arg_idx = i+1;
if (num_unsaved_files > compiler_arg_idx)
compiler_arg_idx = num_unsaved_files;
-
+
+ ParseArgc = argc - compiler_arg_idx + 1;
+ ParseArgv = malloc(sizeof(char *) * ParseArgc);
+ PrependArgv0(argv0, ParseArgc - 1, argv + compiler_arg_idx, ParseArgv);
+
/* Load the initial translation unit -- we do this without honoring remapped
* files, so that we have a way to test results after changing the source. */
- Err = clang_parseTranslationUnit2(Idx, 0,
- argv + compiler_arg_idx,
- argc - compiler_arg_idx,
- 0, 0, getDefaultParsingOptions(), &TU);
+ Err = clang_parseTranslationUnit2FullArgv(Idx, 0, ParseArgv, ParseArgc, 0, 0,
+ getDefaultParsingOptions(), &TU);
if (Err != CXError_Success) {
fprintf(stderr, "Unable to load translation unit!\n");
describeLibclangFailure(Err);
free_remapped_files(unsaved_files, num_unsaved_files);
clang_disposeIndex(Idx);
+ free(ParseArgv);
return 1;
}
@@ -2092,6 +2123,7 @@
&unsaved_files, &num_unsaved_files)) {
clang_disposeTranslationUnit(TU);
clang_disposeIndex(Idx);
+ free(ParseArgv);
return -1;
}
@@ -2106,6 +2138,7 @@
clang_disposeTranslationUnit(TU);
free_remapped_files(unsaved_files, num_unsaved_files);
clang_disposeIndex(Idx);
+ free(ParseArgv);
return -1;
}
@@ -2117,10 +2150,11 @@
free_remapped_files(unsaved_files, num_unsaved_files);
clang_disposeIndex(Idx);
+ free(ParseArgv);
return result;
}
-static int perform_single_file_parse(const char *filename) {
+static int perform_single_file_parse(const char *argv0, const char *filename) {
CXIndex Idx;
CXTranslationUnit TU;
enum CXErrorCode Err;
@@ -2129,12 +2163,11 @@
Idx = clang_createIndex(/* excludeDeclsFromPCH */1,
/* displayDiagnostics=*/1);
- Err = clang_parseTranslationUnit2(Idx, filename,
- /*command_line_args=*/NULL,
- /*num_command_line_args=*/0,
- /*unsaved_files=*/NULL,
- /*num_unsaved_files=*/0,
- CXTranslationUnit_SingleFileParse, &TU);
+ Err = clang_parseTranslationUnit2FullArgv(
+ Idx, filename, /*command_line_args=*/&argv0,
+ /*num_command_line_args=*/1,
+ /*unsaved_files=*/NULL,
+ /*num_unsaved_files=*/0, CXTranslationUnit_SingleFileParse, &TU);
if (Err != CXError_Success) {
fprintf(stderr, "Unable to load translation unit!\n");
describeLibclangFailure(Err);
@@ -2580,6 +2613,8 @@
unsigned I, Repeats = 1;
unsigned completionOptions = clang_defaultCodeCompleteOptions();
const char *InvocationPath;
+ const char **ParseArgv;
+ int ParseArgc;
if (getenv("CINDEXTEST_CODE_COMPLETE_PATTERNS"))
completionOptions |= CXCodeComplete_IncludeCodePatterns;
@@ -2610,13 +2645,16 @@
if (getenv("CINDEXTEST_EDITING"))
Repeats = 5;
- Err = clang_parseTranslationUnit2(CIdx, 0,
- argv + num_unsaved_files + 2,
- argc - num_unsaved_files - 2,
- 0, 0, getDefaultParsingOptions(), &TU);
+ ParseArgc = argc - num_unsaved_files - 1;
+ ParseArgv = malloc(sizeof(char *) * ParseArgc);
+ PrependArgv0(argv[0], ParseArgc - 1, argv + num_unsaved_files + 2, ParseArgv);
+
+ Err = clang_parseTranslationUnit2FullArgv(CIdx, 0, ParseArgv, ParseArgc, 0, 0,
+ getDefaultParsingOptions(), &TU);
if (Err != CXError_Success) {
fprintf(stderr, "Unable to load translation unit!\n");
describeLibclangFailure(Err);
+ free(ParseArgv);
return 1;
}
@@ -2627,6 +2665,7 @@
fprintf(stderr, "Unable to reparse translation unit!\n");
describeLibclangFailure(Err);
clang_disposeTranslationUnit(TU);
+ free(ParseArgv);
return 1;
}
@@ -2702,6 +2741,7 @@
free_remapped_files(unsaved_files, num_unsaved_files);
+ free(ParseArgv);
return 0;
}
@@ -2727,7 +2767,9 @@
unsigned NumLocations = 0, Loc;
unsigned Repeats = 1;
unsigned I;
-
+ int ParseArgc;
+ const char **ParseArgv;
+
/* Count the number of locations. */
while (strstr(argv[NumLocations+1], locations_flag) == argv[NumLocations+1])
++NumLocations;
@@ -2752,18 +2794,21 @@
if (getenv("CINDEXTEST_EDITING"))
Repeats = 5;
+ ParseArgc = argc - num_unsaved_files - 1 - NumLocations;
+ ParseArgv = malloc(sizeof(char *) * ParseArgc);
+ PrependArgv0(argv[0], ParseArgc - 1,
+ argv + num_unsaved_files + 1 + NumLocations, ParseArgv);
+
/* Parse the translation unit. When we're testing clang_getCursor() after
reparsing, don't remap unsaved files until the second parse. */
CIdx = clang_createIndex(1, 1);
- Err = clang_parseTranslationUnit2(CIdx, argv[argc - 1],
- argv + num_unsaved_files + 1 + NumLocations,
- argc - num_unsaved_files - 2 - NumLocations,
- unsaved_files,
- Repeats > 1? 0 : num_unsaved_files,
- getDefaultParsingOptions(), &TU);
+ Err = clang_parseTranslationUnit2FullArgv(
+ CIdx, argv[argc - 1], ParseArgv, ParseArgc, unsaved_files,
+ Repeats > 1 ? 0 : num_unsaved_files, getDefaultParsingOptions(), &TU);
if (Err != CXError_Success) {
fprintf(stderr, "unable to parse input\n");
describeLibclangFailure(Err);
+ free(ParseArgv);
return -1;
}
@@ -2777,6 +2822,7 @@
if (Err != CXError_Success) {
describeLibclangFailure(Err);
clang_disposeTranslationUnit(TU);
+ free(ParseArgv);
return 1;
}
}
@@ -2808,6 +2854,7 @@
clang_disposeIndex(CIdx);
free(Locations);
free_remapped_files(unsaved_files, num_unsaved_files);
+ free(ParseArgv);
return 0;
}
@@ -3021,7 +3068,9 @@
unsigned NumLocations = 0, Loc;
unsigned Repeats = 1;
unsigned I;
-
+ const char **ParseArgv;
+ int ParseArgc;
+
/* Count the number of locations. */
while (strstr(argv[NumLocations+1], "-file-refs-at=") == argv[NumLocations+1])
++NumLocations;
@@ -3046,19 +3095,22 @@
if (getenv("CINDEXTEST_EDITING"))
Repeats = 5;
+ ParseArgc = argc - num_unsaved_files - 1 - NumLocations;
+ ParseArgv = malloc(sizeof(char *) * ParseArgc);
+ PrependArgv0(argv[0], ParseArgc - 1,
+ argv + num_unsaved_files + 1 + NumLocations, ParseArgv);
+
/* Parse the translation unit. When we're testing clang_getCursor() after
reparsing, don't remap unsaved files until the second parse. */
CIdx = clang_createIndex(1, 1);
- Err = clang_parseTranslationUnit2(CIdx, argv[argc - 1],
- argv + num_unsaved_files + 1 + NumLocations,
- argc - num_unsaved_files - 2 - NumLocations,
- unsaved_files,
- Repeats > 1? 0 : num_unsaved_files,
- getDefaultParsingOptions(), &TU);
+ Err = clang_parseTranslationUnit2FullArgv(
+ CIdx, argv[argc - 1], ParseArgv, ParseArgc, unsaved_files,
+ Repeats > 1 ? 0 : num_unsaved_files, getDefaultParsingOptions(), &TU);
if (Err != CXError_Success) {
fprintf(stderr, "unable to parse input\n");
describeLibclangFailure(Err);
clang_disposeTranslationUnit(TU);
+ free(ParseArgv);
return -1;
}
@@ -3072,6 +3124,7 @@
if (Err != CXError_Success) {
describeLibclangFailure(Err);
clang_disposeTranslationUnit(TU);
+ free(ParseArgv);
return 1;
}
}
@@ -3109,6 +3162,7 @@
clang_disposeIndex(CIdx);
free(Locations);
free_remapped_files(unsaved_files, num_unsaved_files);
+ free(ParseArgv);
return 0;
}
@@ -3130,6 +3184,8 @@
unsigned NumFilenames = 0;
unsigned Repeats = 1;
unsigned I, FI;
+ const char **ParseArgv;
+ int ParseArgc;
/* Count the number of locations. */
while (strstr(argv[NumFilenames+1], "-file-includes-in=") == argv[NumFilenames+1])
@@ -3152,20 +3208,23 @@
if (getenv("CINDEXTEST_EDITING"))
Repeats = 2;
+ ParseArgc = argc - num_unsaved_files - 1 - NumFilenames;
+ ParseArgv = malloc(sizeof(char *) * ParseArgc);
+ PrependArgv0(argv[0], ParseArgc - 1,
+ argv + num_unsaved_files + 1 + NumFilenames, ParseArgv);
+
/* Parse the translation unit. When we're testing clang_getCursor() after
reparsing, don't remap unsaved files until the second parse. */
CIdx = clang_createIndex(1, 1);
- Err = clang_parseTranslationUnit2(
- CIdx, argv[argc - 1],
- argv + num_unsaved_files + 1 + NumFilenames,
- argc - num_unsaved_files - 2 - NumFilenames,
- unsaved_files,
+ Err = clang_parseTranslationUnit2FullArgv(
+ CIdx, argv[argc - 1], ParseArgv, ParseArgc, unsaved_files,
Repeats > 1 ? 0 : num_unsaved_files, getDefaultParsingOptions(), &TU);
if (Err != CXError_Success) {
fprintf(stderr, "unable to parse input\n");
describeLibclangFailure(Err);
clang_disposeTranslationUnit(TU);
+ free(ParseArgv);
return -1;
}
@@ -3179,6 +3238,7 @@
if (Err != CXError_Success) {
describeLibclangFailure(Err);
clang_disposeTranslationUnit(TU);
+ free(ParseArgv);
return 1;
}
}
@@ -3209,6 +3269,7 @@
clang_disposeIndex(CIdx);
free((void *)Filenames);
free_remapped_files(unsaved_files, num_unsaved_files);
+ free(ParseArgv);
return 0;
}
@@ -4060,6 +4121,8 @@
CXSourceRangeList *skipped_ranges = 0;
enum CXErrorCode Err;
unsigned i;
+ const char **ParseArgv;
+ int ParseArgc;
input += strlen("-test-annotate-tokens=");
if ((errorCode = parse_file_line_column(input, &filename, &line, &column,
@@ -4071,19 +4134,21 @@
return -1;
}
+ ParseArgc = argc - num_unsaved_files - 2;
+ ParseArgv = malloc(sizeof(char *) * ParseArgc);
+ PrependArgv0(argv[0], ParseArgc - 1, argv + num_unsaved_files + 2, ParseArgv);
+
CIdx = clang_createIndex(0, 1);
- Err = clang_parseTranslationUnit2(CIdx, argv[argc - 1],
- argv + num_unsaved_files + 2,
- argc - num_unsaved_files - 3,
- unsaved_files,
- num_unsaved_files,
- getDefaultParsingOptions(), &TU);
+ Err = clang_parseTranslationUnit2FullArgv(
+ CIdx, argv[argc - 1], ParseArgv, ParseArgc, unsaved_files,
+ num_unsaved_files, getDefaultParsingOptions(), &TU);
if (Err != CXError_Success) {
fprintf(stderr, "unable to parse input\n");
describeLibclangFailure(Err);
clang_disposeIndex(CIdx);
free(filename);
free_remapped_files(unsaved_files, num_unsaved_files);
+ free(ParseArgv);
return -1;
}
errorCode = 0;
@@ -4199,6 +4264,7 @@
clang_disposeIndex(CIdx);
free(filename);
free_remapped_files(unsaved_files, num_unsaved_files);
+ free(ParseArgv);
return errorCode;
}
@@ -4454,24 +4520,29 @@
/******************************************************************************/
/* Command line processing. */
/******************************************************************************/
-int write_pch_file(const char *filename, int argc, const char *argv[]) {
+int write_pch_file(const char *argv0, const char *filename, int argc,
+ const char *argv[]) {
CXIndex Idx;
CXTranslationUnit TU;
struct CXUnsavedFile *unsaved_files = 0;
int num_unsaved_files = 0;
enum CXErrorCode Err;
int result = 0;
-
+ const char **ParseArgv;
+ int ParseArgc;
+
Idx = clang_createIndex(/* excludeDeclsFromPCH */1, /* displayDiagnostics=*/1);
-
+
if (parse_remapped_files(argc, argv, 0, &unsaved_files, &num_unsaved_files)) {
clang_disposeIndex(Idx);
return -1;
}
+ ParseArgc = argc - num_unsaved_files + 1;
+ ParseArgv = malloc(sizeof(char *) * ParseArgc);
+ PrependArgv0(argv0, ParseArgc - 1, argv + num_unsaved_files, ParseArgv);
- Err = clang_parseTranslationUnit2(
- Idx, 0, argv + num_unsaved_files, argc - num_unsaved_files,
- unsaved_files, num_unsaved_files,
+ Err = clang_parseTranslationUnit2FullArgv(
+ Idx, 0, ParseArgv, ParseArgc, unsaved_files, num_unsaved_files,
CXTranslationUnit_Incomplete |
CXTranslationUnit_DetailedPreprocessingRecord |
CXTranslationUnit_ForSerialization,
@@ -4482,6 +4553,7 @@
free_remapped_files(unsaved_files, num_unsaved_files);
clang_disposeTranslationUnit(TU);
clang_disposeIndex(Idx);
+ free(ParseArgv);
return 1;
}
@@ -4512,6 +4584,7 @@
clang_disposeTranslationUnit(TU);
free_remapped_files(unsaved_files, num_unsaved_files);
clang_disposeIndex(Idx);
+ free(ParseArgv);
return result;
}
@@ -4798,8 +4871,8 @@
CXCursorVisitor I = GetVisitor(argv[1] + 25);
if (I) {
int trials = atoi(argv[2]);
- return perform_test_reparse_source(argc - 4, argv + 4, trials, argv[3], I,
- NULL);
+ return perform_test_reparse_source(argv[0], argc - 4, argv + 4, trials,
+ argv[3], I, NULL);
}
}
else if (argc >= 4 && strncmp(argv[1], "-test-load-source", 17) == 0) {
@@ -4810,49 +4883,49 @@
postVisit = PrintMemoryUsage;
if (I)
- return perform_test_load_source(argc - 3, argv + 3, argv[2], I,
+ return perform_test_load_source(argv[0], argc - 3, argv + 3, argv[2], I,
postVisit);
}
else if (argc >= 3 && strcmp(argv[1], "-single-file-parse") == 0)
- return perform_single_file_parse(argv[2]);
+ return perform_single_file_parse(argv[0], argv[2]);
else if (argc >= 4 && strcmp(argv[1], "-test-file-scan") == 0)
return perform_file_scan(argv[2], argv[3],
argc >= 5 ? argv[4] : 0);
else if (argc > 2 && strstr(argv[1], "-test-annotate-tokens=") == argv[1])
return perform_token_annotation(argc, argv);
else if (argc > 2 && strcmp(argv[1], "-test-inclusion-stack-source") == 0)
- return perform_test_load_source(argc - 2, argv + 2, "all", NULL,
+ return perform_test_load_source(argv[0], argc - 2, argv + 2, "all", NULL,
PrintInclusionStack);
else if (argc > 2 && strcmp(argv[1], "-test-inclusion-stack-tu") == 0)
return perform_test_load_tu(argv[2], "all", NULL, NULL,
PrintInclusionStack);
else if (argc > 2 && strcmp(argv[1], "-test-print-linkage-source") == 0)
- return perform_test_load_source(argc - 2, argv + 2, "all", PrintLinkage,
- NULL);
+ return perform_test_load_source(argv[0], argc - 2, argv + 2, "all",
+ PrintLinkage, NULL);
else if (argc > 2 && strcmp(argv[1], "-test-print-visibility") == 0)
- return perform_test_load_source(argc - 2, argv + 2, "all", PrintVisibility,
- NULL);
+ return perform_test_load_source(argv[0], argc - 2, argv + 2, "all",
+ PrintVisibility, NULL);
else if (argc > 2 && strcmp(argv[1], "-test-print-type") == 0)
- return perform_test_load_source(argc - 2, argv + 2, "all",
+ return perform_test_load_source(argv[0], argc - 2, argv + 2, "all",
PrintType, 0);
else if (argc > 2 && strcmp(argv[1], "-test-print-type-size") == 0)
- return perform_test_load_source(argc - 2, argv + 2, "all",
+ return perform_test_load_source(argv[0], argc - 2, argv + 2, "all",
PrintTypeSize, 0);
else if (argc > 2 && strcmp(argv[1], "-test-print-type-declaration") == 0)
- return perform_test_load_source(argc - 2, argv + 2, "all",
+ return perform_test_load_source(argv[0], argc - 2, argv + 2, "all",
PrintTypeDeclaration, 0);
else if (argc > 2 && strcmp(argv[1], "-test-print-decl-attributes") == 0)
- return perform_test_load_source(argc - 2, argv + 2, "all",
+ return perform_test_load_source(argv[0], argc - 2, argv + 2, "all",
PrintDeclAttributes, 0);
else if (argc > 2 && strcmp(argv[1], "-test-print-bitwidth") == 0)
- return perform_test_load_source(argc - 2, argv + 2, "all",
+ return perform_test_load_source(argv[0], argc - 2, argv + 2, "all",
PrintBitWidth, 0);
else if (argc > 2 && strcmp(argv[1], "-test-print-mangle") == 0)
return perform_test_load_tu(argv[2], "all", NULL, PrintMangledName, NULL);
else if (argc > 2 && strcmp(argv[1], "-test-print-manglings") == 0)
return perform_test_load_tu(argv[2], "all", NULL, PrintManglings, NULL);
else if (argc > 2 && strcmp(argv[1], "-test-print-target-info") == 0)
- return print_target_info(argc - 2, argv + 2);
+ return print_target_info(argv[0], argc - 2, argv + 2);
else if (argc > 1 && strcmp(argv[1], "-print-usr") == 0) {
if (argc > 2)
return print_usrs(argv + 2, argv + argc);
@@ -4864,7 +4937,7 @@
else if (argc > 2 && strcmp(argv[1], "-print-usr-file") == 0)
return print_usrs_file(argv[2]);
else if (argc > 2 && strcmp(argv[1], "-write-pch") == 0)
- return write_pch_file(argv[2], argc - 3, argv + 3);
+ return write_pch_file(argv[0], argv[2], argc - 3, argv + 3);
else if (argc > 2 && strcmp(argv[1], "-compilation-db") == 0)
return perform_test_compilation_db(argv[argc-1], argc - 3, argv + 2);
else if (argc == 2 && strcmp(argv[1], "-print-build-session-timestamp") == 0)
Index: clang/test/Index/record-parsing-invocation.c
===================================================================
--- clang/test/Index/record-parsing-invocation.c
+++ clang/test/Index/record-parsing-invocation.c
@@ -24,5 +24,5 @@
# pragma clang __debug parser_crash
#endif
-// CHECK: {"toolchain":"{{.*}}","libclang.operation":"parse","libclang.opts":1,"args":["clang","-fno-spell-checking","{{.*}}record-parsing-invocation.c","-Xclang","-detailed-preprocessing-record","-fallow-editor-placeholders"]}
-// CHECK-UNSAVED: {"toolchain":"{{.*}}","libclang.operation":"parse","libclang.opts":1,"args":["clang","-fno-spell-checking","{{.*}}record-parsing-invocation.c","-Xclang","-detailed-preprocessing-record","-fallow-editor-placeholders"],"unsaved_file_hashes":[{"name":"{{.*}}record-parsing-invocation.c","md5":"aee23773de90e665992b48209351d70e"}]}
+// CHECK: {"toolchain":"{{.*}}","libclang.operation":"parse","libclang.opts":1,"args":["{{.*}}c-index-test","-fno-spell-checking","{{.*}}record-parsing-invocation.c","-Xclang","-detailed-preprocessing-record","-fallow-editor-placeholders"]}
+// CHECK-UNSAVED: {"toolchain":"{{.*}}","libclang.operation":"parse","libclang.opts":1,"args":["{{.*}}c-index-test","-fno-spell-checking","{{.*}}record-parsing-invocation.c","-Xclang","-detailed-preprocessing-record","-fallow-editor-placeholders"],"unsaved_file_hashes":[{"name":"{{.*}}record-parsing-invocation.c","md5":"aee23773de90e665992b48209351d70e"}]}
Index: clang/test/Index/record-completion-invocation.c
===================================================================
--- clang/test/Index/record-completion-invocation.c
+++ clang/test/Index/record-completion-invocation.c
@@ -8,4 +8,4 @@
// RUN: env LIBCLANG_DISABLE_CRASH_RECOVERY=1 CINDEXTEST_INVOCATION_EMISSION_PATH=%t not --crash c-index-test -code-completion-at=%s:10:1 "-remap-file=%s,%S/Inputs/record-parsing-invocation-remap.c" %s
// RUN: cat %t/libclang-* | FileCheck %s
-// CHECK: {"toolchain":"{{.*}}","libclang.operation":"complete","libclang.opts":1,"args":["clang","-fno-spell-checking","{{.*}}record-completion-invocation.c","-Xclang","-detailed-preprocessing-record","-fallow-editor-placeholders"],"invocation-args":["-code-completion-at={{.*}}record-completion-invocation.c:10:1"],"unsaved_file_hashes":[{"name":"{{.*}}record-completion-invocation.c","md5":"aee23773de90e665992b48209351d70e"}]}
+// CHECK: {"toolchain":"{{.*}}","libclang.operation":"complete","libclang.opts":1,"args":["{{.*}}c-index-test","-fno-spell-checking","{{.*}}record-completion-invocation.c","-Xclang","-detailed-preprocessing-record","-fallow-editor-placeholders"],"invocation-args":["-code-completion-at={{.*}}record-completion-invocation.c:10:1"],"unsaved_file_hashes":[{"name":"{{.*}}record-completion-invocation.c","md5":"aee23773de90e665992b48209351d70e"}]}
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits