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

Reid Kleckner rnk at google.com
Thu Oct 24 17:21:22 PDT 2013


We will always use 'unsigned char' with MSVC.


On Thu, Oct 24, 2013 at 5:16 PM, Rafael EspĂ­ndola <
rafael.espindola at gmail.com> wrote:

> 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
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131024/039445a7/attachment.html>


More information about the llvm-commits mailing list