summaryrefslogtreecommitdiffstats
path: root/tools/c-index-test
diff options
context:
space:
mode:
authorEmilio Cobos Alvarez <emilio@crisal.io>2017-04-28 15:56:39 +0000
committerEmilio Cobos Alvarez <emilio@crisal.io>2017-04-28 15:56:39 +0000
commit1b98417fe9692b0550e51a763a961344110adf99 (patch)
tree14dd66e078ae399f90710f48a312554ea70fc267 /tools/c-index-test
parentde4f6266fade0d8f77731f96f027c7a10b6f36e2 (diff)
[libclang] Expose some target information via the C API.
This allows users to query the target triple and target pointer width, which would make me able to fix https://github.com/servo/rust-bindgen/issues/593 and other related bugs in an elegant way (without having to manually parse the target triple in the command line arguments). Differential Revision: https://reviews.llvm.org/D32389 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@301648 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/c-index-test')
-rw-r--r--tools/c-index-test/c-index-test.c52
1 files changed, 50 insertions, 2 deletions
diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c
index 0978ccb28d..1179fbf391 100644
--- a/tools/c-index-test/c-index-test.c
+++ b/tools/c-index-test/c-index-test.c
@@ -1560,6 +1560,51 @@ static enum CXChildVisitResult PrintTypeDeclaration(CXCursor cursor, CXCursor p,
}
/******************************************************************************/
+/* Target information testing. */
+/******************************************************************************/
+
+static int print_target_info(int argc, const char **argv) {
+ CXIndex Idx;
+ CXTranslationUnit TU;
+ CXTargetInfo TargetInfo;
+ CXString Triple;
+ const char *FileName;
+ enum CXErrorCode Err;
+ int PointerWidth;
+
+ if (argc == 0) {
+ fprintf(stderr, "No filename specified\n");
+ return 1;
+ }
+
+ FileName = argv[1];
+
+ Idx = clang_createIndex(0, 1);
+ Err = clang_parseTranslationUnit2(Idx, FileName, argv, argc, NULL, 0,
+ getDefaultParsingOptions(), &TU);
+ if (Err != CXError_Success) {
+ fprintf(stderr, "Couldn't parse translation unit!\n");
+ describeLibclangFailure(Err);
+ clang_disposeIndex(Idx);
+ return 1;
+ }
+
+ TargetInfo = clang_getTranslationUnitTargetInfo(TU);
+
+ Triple = clang_TargetInfo_getTriple(TargetInfo);
+ printf("TargetTriple: %s\n", clang_getCString(Triple));
+ clang_disposeString(Triple);
+
+ PointerWidth = clang_TargetInfo_getPointerWidth(TargetInfo);
+ printf("PointerWidth: %d\n", PointerWidth);
+
+ clang_TargetInfo_dispose(TargetInfo);
+ clang_disposeTranslationUnit(TU);
+ clang_disposeIndex(Idx);
+ return 0;
+}
+
+/******************************************************************************/
/* Loading ASTs/source. */
/******************************************************************************/
@@ -4301,11 +4346,12 @@ static void print_usage(void) {
" c-index-test -test-print-type {<args>}*\n"
" c-index-test -test-print-type-size {<args>}*\n"
" c-index-test -test-print-bitwidth {<args>}*\n"
+ " c-index-test -test-print-target-info {<args>}*\n"
" c-index-test -test-print-type-declaration {<args>}*\n"
" c-index-test -print-usr [<CursorKind> {<args>}]*\n"
- " c-index-test -print-usr-file <file>\n"
- " c-index-test -write-pch <file> <compiler arguments>\n");
+ " c-index-test -print-usr-file <file>\n");
fprintf(stderr,
+ " c-index-test -write-pch <file> <compiler arguments>\n"
" c-index-test -compilation-db [lookup <filename>] database\n");
fprintf(stderr,
" c-index-test -print-build-session-timestamp\n");
@@ -4411,6 +4457,8 @@ int cindextest_main(int argc, const char **argv) {
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);
else if (argc > 1 && strcmp(argv[1], "-print-usr") == 0) {
if (argc > 2)
return print_usrs(argv + 2, argv + argc);