Skip to content

Commit

Permalink
lto.h: Use lto_bool_t instead of int to restore the ABI
Browse files Browse the repository at this point in the history
This reverts commit r193255 and instead creates an lto_bool_t typedef
that points to bool, _Bool, or unsigned char depending on what is
available.  Only recent versions of MSVC provide a stdbool.h header.

Reviewers: rafael.espindola

Differential Revision: http://llvm-reviews.chandlerc.com/D2019

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193377 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
rnk committed Oct 24, 2013
1 parent 9e39e0d commit 07d5aef
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 18 deletions.
32 changes: 23 additions & 9 deletions include/llvm-c/lto.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,20 @@
#include <stddef.h>
#include <sys/types.h>

#ifndef __cplusplus
#if !defined(_MSC_VER)
#include <stdbool.h>
typedef bool lto_bool_t;
#else
// MSVC in particular does not have anything like _Bool or bool in C, but we can
// at least make sure the type is the same size. The implementation side will
// use C++ bool.
typedef unsigned char lto_bool_t;
#endif
#else
typedef bool lto_bool_t;
#endif

/**
* @defgroup LLVMCLTO LTO
* @ingroup LLVMC
Expand Down Expand Up @@ -86,29 +100,29 @@ lto_get_error_message(void);
/**
* Checks if a file is a loadable object file.
*/
extern int
extern lto_bool_t
lto_module_is_object_file(const char* path);


/**
* Checks if a file is a loadable object compiled for requested target.
*/
extern int
extern lto_bool_t
lto_module_is_object_file_for_target(const char* path,
const char* target_triple_prefix);


/**
* Checks if a buffer is a loadable object file.
*/
extern int
extern lto_bool_t
lto_module_is_object_file_in_memory(const void* mem, size_t length);


/**
* Checks if a buffer is a loadable object compiled for requested target.
*/
extern int
extern lto_bool_t
lto_module_is_object_file_in_memory_for_target(const void* mem, size_t length,
const char* target_triple_prefix);

Expand Down Expand Up @@ -207,7 +221,7 @@ lto_codegen_dispose(lto_code_gen_t);
* Add an object module to the set of modules for which code will be generated.
* Returns true on error (check lto_get_error_message() for details).
*/
extern int
extern lto_bool_t
lto_codegen_add_module(lto_code_gen_t cg, lto_module_t mod);


Expand All @@ -216,15 +230,15 @@ lto_codegen_add_module(lto_code_gen_t cg, lto_module_t mod);
* Sets if debug info should be generated.
* Returns true on error (check lto_get_error_message() for details).
*/
extern int
extern lto_bool_t
lto_codegen_set_debug_model(lto_code_gen_t cg, lto_debug_model);


/**
* Sets which PIC code model to generated.
* Returns true on error (check lto_get_error_message() for details).
*/
extern int
extern lto_bool_t
lto_codegen_set_pic_model(lto_code_gen_t cg, lto_codegen_model);


Expand Down Expand Up @@ -270,7 +284,7 @@ extern void lto_codegen_add_dso_symbol(lto_code_gen_t cg, const char *symbol);
* merged contents of all modules added so far.
* Returns true on error (check lto_get_error_message() for details).
*/
extern int
extern lto_bool_t
lto_codegen_write_merged_modules(lto_code_gen_t cg, const char* path);

/**
Expand All @@ -288,7 +302,7 @@ lto_codegen_compile(lto_code_gen_t cg, size_t* length);
* Generates code for all added modules into one native object file.
* The name of the file is written to name. Returns true on error.
*/
extern int
extern lto_bool_t
lto_codegen_compile_to_file(lto_code_gen_t cg, const char** name);


Expand Down
18 changes: 9 additions & 9 deletions tools/lto/lto.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,26 +90,26 @@ const char* lto_get_error_message() {
}

/// lto_module_is_object_file - Validates if a file is a loadable object file.
int lto_module_is_object_file(const char* path) {
bool lto_module_is_object_file(const char* path) {
return LTOModule::isBitcodeFile(path);
}

/// lto_module_is_object_file_for_target - Validates if a file is a loadable
/// object file compilable for requested target.
int lto_module_is_object_file_for_target(const char* path,
bool lto_module_is_object_file_for_target(const char* path,
const char* target_triplet_prefix) {
return LTOModule::isBitcodeFileForTarget(path, target_triplet_prefix);
}

/// lto_module_is_object_file_in_memory - Validates if a buffer is a loadable
/// object file.
int lto_module_is_object_file_in_memory(const void* mem, size_t length) {
bool lto_module_is_object_file_in_memory(const void* mem, size_t length) {
return LTOModule::isBitcodeFile(mem, length);
}

/// lto_module_is_object_file_in_memory_for_target - Validates if a buffer is a
/// loadable object file compilable for the target.
int
bool
lto_module_is_object_file_in_memory_for_target(const void* mem,
size_t length,
const char* target_triplet_prefix) {
Expand Down Expand Up @@ -216,21 +216,21 @@ void lto_codegen_dispose(lto_code_gen_t cg) {
/// lto_codegen_add_module - Add an object module to the set of modules for
/// which code will be generated. Returns true on error (check
/// lto_get_error_message() for details).
int lto_codegen_add_module(lto_code_gen_t cg, lto_module_t mod) {
bool lto_codegen_add_module(lto_code_gen_t cg, lto_module_t mod) {
return !cg->addModule(mod, sLastErrorString);
}

/// lto_codegen_set_debug_model - Sets what if any format of debug info should
/// be generated. Returns true on error (check lto_get_error_message() for
/// details).
int lto_codegen_set_debug_model(lto_code_gen_t cg, lto_debug_model debug) {
bool lto_codegen_set_debug_model(lto_code_gen_t cg, lto_debug_model debug) {
cg->setDebugInfo(debug);
return false;
}

/// lto_codegen_set_pic_model - Sets what code model to generated. Returns true
/// on error (check lto_get_error_message() for details).
int lto_codegen_set_pic_model(lto_code_gen_t cg, lto_codegen_model model) {
bool lto_codegen_set_pic_model(lto_code_gen_t cg, lto_codegen_model model) {
cg->setCodePICModel(model);
return false;
}
Expand Down Expand Up @@ -267,7 +267,7 @@ void lto_codegen_add_dso_symbol(lto_code_gen_t cg, const char *symbol) {
/// lto_codegen_write_merged_modules - Writes a new file at the specified path
/// that contains the merged contents of all modules added so far. Returns true
/// on error (check lto_get_error_message() for details).
int lto_codegen_write_merged_modules(lto_code_gen_t cg, const char *path) {
bool lto_codegen_write_merged_modules(lto_code_gen_t cg, const char *path) {
if (!parsedOptions) {
cg->parseCodeGenDebugOptions();
parsedOptions = true;
Expand All @@ -293,7 +293,7 @@ const void *lto_codegen_compile(lto_code_gen_t cg, size_t *length) {
/// lto_codegen_compile_to_file - Generates code for all added modules into one
/// native object file. The name of the file is written to name. Returns true on
/// error.
int lto_codegen_compile_to_file(lto_code_gen_t cg, const char **name) {
bool lto_codegen_compile_to_file(lto_code_gen_t cg, const char **name) {
if (!parsedOptions) {
cg->parseCodeGenDebugOptions();
parsedOptions = true;
Expand Down

0 comments on commit 07d5aef

Please sign in to comment.