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:
parent
b9e1305d4a
commit
ad5ddca21c
@ -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.
|
||||
*
|
||||
|
@ -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) {
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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));
|
||||
|
Loading…
x
Reference in New Issue
Block a user