diff --git a/llvm/include/llvm-c/Core.h b/llvm/include/llvm-c/Core.h --- a/llvm/include/llvm-c/Core.h +++ b/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); diff --git a/llvm/lib/IR/Core.cpp b/llvm/lib/IR/Core.cpp --- a/llvm/lib/IR/Core.cpp +++ b/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) { diff --git a/llvm/unittests/IR/CMakeLists.txt b/llvm/unittests/IR/CMakeLists.txt --- a/llvm/unittests/IR/CMakeLists.txt +++ b/llvm/unittests/IR/CMakeLists.txt @@ -46,6 +46,7 @@ VectorTypesTest.cpp VerifierTest.cpp VPIntrinsicTest.cpp + CoreBindings.cpp ) target_link_libraries(IRTests PRIVATE LLVMTestingSupport) diff --git a/llvm/unittests/IR/CoreBindings.cpp b/llvm/unittests/IR/CoreBindings.cpp new file mode 100644 --- /dev/null +++ b/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