[LLVM-C] Add Bindings For Module Flags
Summary:
The first foray into merging debug info into the echo tests.
- Add bindings to Module::getModuleFlagsMetadata() in the form of LLVMCopyModuleFlagsMetadata
- Add the opaque type LLVMModuleFlagEntry to represent Module::ModuleFlagEntry
- Add accessors for LLVMModuleFlagEntry's behavior, key, and metadata node.
Reviewers: whitequark, deadalnix
Reviewed By: whitequark
Subscribers: aprantl, JDevlieghere, llvm-commits, harlanhaskins
Differential Revision: https://reviews.llvm.org/D46792
llvm-svn: 332219
diff --git a/llvm/tools/llvm-c-test/echo.cpp b/llvm/tools/llvm-c-test/echo.cpp
index 19ad5bd..fb7a4d7 100644
--- a/llvm/tools/llvm-c-test/echo.cpp
+++ b/llvm/tools/llvm-c-test/echo.cpp
@@ -997,6 +997,18 @@
LLVMSetSourceFileName(M, SourceFileName, SourceFileLen);
LLVMSetModuleIdentifier(M, ModuleName, ModuleIdentLen);
+ size_t SourceFlagsLen;
+ LLVMModuleFlagEntry *ModuleFlags =
+ LLVMCopyModuleFlagsMetadata(Src, &SourceFlagsLen);
+ for (unsigned i = 0; i < SourceFlagsLen; ++i) {
+ size_t EntryNameLen;
+ const char *EntryName =
+ LLVMModuleFlagEntriesGetKey(ModuleFlags, i, &EntryNameLen);
+ LLVMAddModuleFlag(M, LLVMModuleFlagEntriesGetFlagBehavior(ModuleFlags, i),
+ EntryName, EntryNameLen,
+ LLVMModuleFlagEntriesGetMetadata(ModuleFlags, i));
+ }
+
LLVMSetTarget(M, LLVMGetTarget(Src));
LLVMSetModuleDataLayout(M, LLVMGetModuleDataLayout(Src));
if (strcmp(LLVMGetDataLayoutStr(M), LLVMGetDataLayoutStr(Src)))
@@ -1011,6 +1023,7 @@
char *Str = LLVMPrintModuleToString(M);
fputs(Str, stdout);
+ LLVMDisposeModuleFlagsMetadata(ModuleFlags);
LLVMDisposeMessage(Str);
LLVMDisposeModule(Src);
LLVMDisposeModule(M);