1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00

[LLVM-C] Add Accessors For A Module's Source File Name

Summary: Also unblocks some cleanup in the echo-test.

Reviewers: whitequark, deadalnix

Reviewed By: whitequark

Subscribers: harlanhaskins, llvm-commits

Differential Revision: https://reviews.llvm.org/D42618

llvm-svn: 323819
This commit is contained in:
Robert Widmann 2018-01-30 21:34:29 +00:00
parent b9e1305d4a
commit ad5ddca21c
4 changed files with 37 additions and 9 deletions

View File

@ -565,6 +565,27 @@ const char *LLVMGetModuleIdentifier(LLVMModuleRef M, size_t *Len);
*/
void LLVMSetModuleIdentifier(LLVMModuleRef M, const char *Ident, size_t Len);
/**
* Obtain the module's original source file name.
*
* @param M Module to obtain the name of
* @param Len Out parameter which holds the length of the returned string
* @return The original source file name of M
* @see Module::getSourceFileName()
*/
const char *LLVMGetSourceFileName(LLVMModuleRef M, size_t *Len);
/**
* Set the original source file name of a module to a string Name with length
* Len.
*
* @param M The module to set the source file name of
* @param Name The string to set M's source file name to
* @param Len Length of Name
* @see Module::setSourceFileName()
*/
void LLVMSetSourceFileName(LLVMModuleRef M, const char *Name, size_t Len);
/**
* Obtain the data layout for a module.
*

View File

@ -234,6 +234,15 @@ void LLVMSetModuleIdentifier(LLVMModuleRef M, const char *Ident, size_t Len) {
unwrap(M)->setModuleIdentifier(StringRef(Ident, Len));
}
const char *LLVMGetSourceFileName(LLVMModuleRef M, size_t *Len) {
auto &Str = unwrap(M)->getSourceFileName();
*Len = Str.length();
return Str.c_str();
}
void LLVMSetSourceFileName(LLVMModuleRef M, const char *Name, size_t Len) {
unwrap(M)->setSourceFileName(StringRef(Name, Len));
}
/*--.. Data layout .........................................................--*/
const char *LLVMGetDataLayoutStr(LLVMModuleRef M) {

View File

@ -2,6 +2,7 @@
; RUN: llvm-as < %s | llvm-c-test --echo > %t.echo
; RUN: diff -w %t.orig %t.echo
source_filename = "/test/Bindings/echo.ll"
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.11.0"

View File

@ -927,18 +927,15 @@ int llvm_echo(void) {
LLVMEnablePrettyStackTrace();
LLVMModuleRef Src = llvm_load_module(false, true);
size_t Len;
const char *ModuleName = LLVMGetModuleIdentifier(Src, &Len);
size_t SourceFileLen;
const char *SourceFileName = LLVMGetSourceFileName(Src, &SourceFileLen);
size_t ModuleIdentLen;
const char *ModuleName = LLVMGetModuleIdentifier(Src, &ModuleIdentLen);
LLVMContextRef Ctx = LLVMContextCreate();
LLVMModuleRef M = LLVMModuleCreateWithNameInContext(ModuleName, Ctx);
// This whole switcharound is done because the C API has no way to
// set the source_filename
LLVMSetModuleIdentifier(M, "", 0);
LLVMGetModuleIdentifier(M, &Len);
if (Len != 0)
report_fatal_error("LLVM{Set,Get}ModuleIdentifier failed");
LLVMSetModuleIdentifier(M, ModuleName, strlen(ModuleName));
LLVMSetSourceFileName(M, SourceFileName, SourceFileLen);
LLVMSetModuleIdentifier(M, ModuleName, ModuleIdentLen);
LLVMSetTarget(M, LLVMGetTarget(Src));
LLVMSetModuleDataLayout(M, LLVMGetModuleDataLayout(Src));