[llvm] r193377 - lto.h: Use lto_bool_t instead of int to restore the ABI

Rafael EspĂ­ndola rafael.espindola at gmail.com
Thu Oct 24 17:16:05 PDT 2013


I missed the last bits of the discussion on IRC. So the idea is that
we will always use int with msvc or we don't care as much about ABI
compatibility on windows (yet)?

On 24 October 2013 18:26, Reid Kleckner <reid at kleckner.net> wrote:
> Author: rnk
> Date: Thu Oct 24 17:26:04 2013
> New Revision: 193377
>
> URL: http://llvm.org/viewvc/llvm-project?rev=193377&view=rev
> Log:
> lto.h: Use lto_bool_t instead of int to restore the ABI
>
> 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
>
> Modified:
>     llvm/trunk/include/llvm-c/lto.h
>     llvm/trunk/tools/lto/lto.cpp
>
> Modified: llvm/trunk/include/llvm-c/lto.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/lto.h?rev=193377&r1=193376&r2=193377&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm-c/lto.h (original)
> +++ llvm/trunk/include/llvm-c/lto.h Thu Oct 24 17:26:04 2013
> @@ -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
> @@ -86,14 +100,14 @@ 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);
>
> @@ -101,14 +115,14 @@ lto_module_is_object_file_for_target(con
>  /**
>   * 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);
>
> @@ -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);
>
>
> @@ -216,7 +230,7 @@ lto_codegen_add_module(lto_code_gen_t cg
>   * 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);
>
>
> @@ -224,7 +238,7 @@ lto_codegen_set_debug_model(lto_code_gen
>   * 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);
>
>
> @@ -270,7 +284,7 @@ extern void lto_codegen_add_dso_symbol(l
>   * 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);
>
>  /**
> @@ -288,7 +302,7 @@ lto_codegen_compile(lto_code_gen_t cg, s
>   * 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);
>
>
>
> Modified: llvm/trunk/tools/lto/lto.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/lto.cpp?rev=193377&r1=193376&r2=193377&view=diff
> ==============================================================================
> --- llvm/trunk/tools/lto/lto.cpp (original)
> +++ llvm/trunk/tools/lto/lto.cpp Thu Oct 24 17:26:04 2013
> @@ -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) {
> @@ -216,21 +216,21 @@ void lto_codegen_dispose(lto_code_gen_t
>  /// 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;
>  }
> @@ -267,7 +267,7 @@ void lto_codegen_add_dso_symbol(lto_code
>  /// 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;
> @@ -293,7 +293,7 @@ const void *lto_codegen_compile(lto_code
>  /// 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;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list