Index: llvm/include/llvm-c/Core.h =================================================================== --- llvm/include/llvm-c/Core.h +++ llvm/include/llvm-c/Core.h @@ -479,6 +479,16 @@ @see ManagedStatic */ void LLVMShutdown(void); +/*===-- Version query -----------------------------------------------------===*/ + +/** + * Return the major, minor, and patch version of LLVM + * + * The version components are returned via the function's three output + * parameters or skipped if a NULL pointer was supplied. + */ +void LLVMGetVersion(unsigned *Major, unsigned *Minor, unsigned *Patch); + /*===-- Error handling ----------------------------------------------------===*/ char *LLVMCreateMessage(const char *Message); Index: llvm/lib/IR/Core.cpp =================================================================== --- llvm/lib/IR/Core.cpp +++ llvm/lib/IR/Core.cpp @@ -61,6 +61,17 @@ llvm_shutdown(); } +/*===-- Version query -----------------------------------------------------===*/ + +void LLVMGetVersion(unsigned *Major, unsigned *Minor, unsigned *Patch) { + if (Major) + *Major = LLVM_VERSION_MAJOR; + if (Minor) + *Minor = LLVM_VERSION_MINOR; + if (Patch) + *Patch = LLVM_VERSION_PATCH; +} + /*===-- Error handling ----------------------------------------------------===*/ char *LLVMCreateMessage(const char *Message) { Index: llvm/unittests/IR/CMakeLists.txt =================================================================== --- llvm/unittests/IR/CMakeLists.txt +++ llvm/unittests/IR/CMakeLists.txt @@ -46,6 +46,7 @@ VectorTypesTest.cpp VerifierTest.cpp VPIntrinsicTest.cpp + CoreBindings.cpp ) target_link_libraries(IRTests PRIVATE LLVMTestingSupport) Index: llvm/unittests/IR/CoreBindings.cpp =================================================================== --- /dev/null +++ llvm/unittests/IR/CoreBindings.cpp @@ -0,0 +1,26 @@ +//===- llvm/unittest/IR/CoreBindings.cpp - Tests for C-API bindings -------===// +// +// 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 "llvm-c/Core.h" +#include "llvm/Config/llvm-config.h" +#include "gtest/gtest.h" + +namespace { + +TEST(CoreBindings, VersionTest) { + // Test ability to ignore output parameters + LLVMGetVersion(nullptr, nullptr, nullptr); + + unsigned Major, Minor, Patch; + LLVMGetVersion(&major, &Minor, &Patch); + EXPECT_EQ(Major, (unsigned)LLVM_VERSION_MAJOR); + EXPECT_EQ(Minor, (unsigned)LLVM_VERSION_MINOR); + EXPECT_EQ(Patch, (unsigned)LLVM_VERSION_PATCH); +} + +} // end anonymous namespace