From: Dmitri Gribenko Date: Wed, 19 Feb 2014 10:24:00 +0000 (+0000) Subject: libclang: ensure clang_createTranslationUnit2 always initializes *TU X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=69ca34421886443df2def063e5029439c3abead5;p=clang libclang: ensure clang_createTranslationUnit2 always initializes *TU git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@201657 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index c5f41a8a74..f217d795dc 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -2612,7 +2612,7 @@ void clang_toggleCrashRecovery(unsigned isEnabled) { CXTranslationUnit clang_createTranslationUnit(CXIndex CIdx, const char *ast_filename) { - CXTranslationUnit TU = NULL; + CXTranslationUnit TU; enum CXErrorCode Result = clang_createTranslationUnit2(CIdx, ast_filename, &TU); (void)Result; @@ -2624,6 +2624,9 @@ CXTranslationUnit clang_createTranslationUnit(CXIndex CIdx, enum CXErrorCode clang_createTranslationUnit2(CXIndex CIdx, const char *ast_filename, CXTranslationUnit *out_TU) { + if (out_TU) + *out_TU = NULL; + if (!CIdx || !ast_filename || !out_TU) return CXError_InvalidArguments; diff --git a/unittests/libclang/LibclangTest.cpp b/unittests/libclang/LibclangTest.cpp index 7048af9584..4278d10a1f 100644 --- a/unittests/libclang/LibclangTest.cpp +++ b/unittests/libclang/LibclangTest.cpp @@ -10,8 +10,21 @@ #include "clang-c/Index.h" #include "gtest/gtest.h" -TEST(libclang, TestInvalidArgs) { +TEST(libclang, clang_parseTranslationUnit2_InvalidArgs) { EXPECT_EQ(CXError_InvalidArguments, clang_parseTranslationUnit2(0, 0, 0, 0, 0, 0, 0, 0)); } +TEST(libclang, clang_createTranslationUnit_InvalidArgs) { + EXPECT_EQ(0, clang_createTranslationUnit(0, 0)); +} + +TEST(libclang, clang_createTranslationUnit2_InvalidArgs) { + EXPECT_EQ(CXError_InvalidArguments, + clang_createTranslationUnit2(0, 0, 0)); + + CXTranslationUnit TU = reinterpret_cast(1); + EXPECT_EQ(CXError_InvalidArguments, + clang_createTranslationUnit2(0, 0, &TU)); + EXPECT_EQ(0, TU); +}