Add echo test for constant data arrays in the LLVM C API
authorAmaury Sechet <deadalnix@gmail.com>
Sun, 13 Mar 2016 00:58:25 +0000 (00:58 +0000)
committerAmaury Sechet <deadalnix@gmail.com>
Sun, 13 Mar 2016 00:58:25 +0000 (00:58 +0000)
llvm-svn: 263350

llvm/test/Bindings/llvm-c/echo.ll
llvm/tools/llvm-c-test/echo.cpp

index 0b6cf0c..689577a 100644 (file)
@@ -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"
index 35c73e2..a8f9baf 100644 (file)
@@ -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<LLVMValueRef, 8> 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);