From b325686764c3f04c9c40427b27d563530844eb91 Mon Sep 17 00:00:00 2001 From: Amaury Sechet Date: Sun, 13 Mar 2016 00:58:25 +0000 Subject: [PATCH] Add echo test for constant data arrays in the LLVM C API llvm-svn: 263350 --- llvm/test/Bindings/llvm-c/echo.ll | 2 ++ llvm/tools/llvm-c-test/echo.cpp | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/llvm/test/Bindings/llvm-c/echo.ll b/llvm/test/Bindings/llvm-c/echo.ll index 0b6cf0c..689577a 100644 --- a/llvm/test/Bindings/llvm-c/echo.ll +++ b/llvm/test/Bindings/llvm-c/echo.ll @@ -11,6 +11,8 @@ target triple = "x86_64-apple-macosx10.11.0" @ext = external global i32* @cst = constant %S { i64 1, %S* @cst } @tl = thread_local global { i64, %S* } { i64 1, %S* @cst } +@arr = linkonce_odr global [5 x i8] [ i8 2, i8 3, i8 5, i8 7, i8 11 ] +@str = private unnamed_addr constant [13 x i8] c"hello world\0A\00" @hidden = hidden global i32 7 @protected = protected global i32 23 @section = global i32 27, section ".custom" diff --git a/llvm/tools/llvm-c-test/echo.cpp b/llvm/tools/llvm-c-test/echo.cpp index 35c73e2..a8f9baf 100644 --- a/llvm/tools/llvm-c-test/echo.cpp +++ b/llvm/tools/llvm-c-test/echo.cpp @@ -259,6 +259,16 @@ LLVMValueRef clone_constant(LLVMValueRef Cst, LLVMModuleRef M) { return LLVMConstArray(LLVMGetElementType(Ty), Elts.data(), EltCount); } + // Try contant data array + if (LLVMIsAConstantDataArray(Cst)) { + LLVMTypeRef Ty = TypeCloner(M).Clone(Cst); + unsigned EltCount = LLVMGetArrayLength(Ty); + SmallVector Elts; + for (unsigned i = 0; i < EltCount; i++) + Elts.push_back(clone_constant(LLVMGetElementAsConstant(Cst, i), M)); + return LLVMConstArray(LLVMGetElementType(Ty), Elts.data(), EltCount); + } + // Try constant struct if (LLVMIsAConstantStruct(Cst)) { LLVMTypeRef Ty = TypeCloner(M).Clone(Cst); -- 2.7.4