Skip to content

Refactor utils api to clean up warnings #166

@K20shores

Description

@K20shores

When building musica, several warnings are generated

[ 89%] Building CXX object src/CMakeFiles/musica.dir/util.cpp.o
In file included from /Users/kshores/Documents/musica/src/util.cpp:3:
/Users/kshores/Documents/musica/include/musica/util.hpp:45:12: warning: 'CreateString' has C-linkage specified, but returns user-defined type 'String' which is incompatible with C [-Wreturn-type-c-linkage]
    String CreateString(const char* value);
           ^
/Users/kshores/Documents/musica/include/musica/util.hpp:53:11: warning: 'NoError' has C-linkage specified, but returns user-defined type 'Error' which is incompatible with C [-Wreturn-type-c-linkage]
    Error NoError();
          ^
/Users/kshores/Documents/musica/include/musica/util.hpp:60:11: warning: 'ToError' has C-linkage specified, but returns user-defined type 'Error' which is incompatible with C [-Wreturn-type-c-linkage]
    Error ToError(const char* category, int code, const char* message);
          ^
3 warnings generated.
[ 90%] Building CXX object src/CMakeFiles/musica.dir/component_versions.cpp.o
[ 90%] Building CXX object src/CMakeFiles/musica.dir/__/version.cpp.o
[ 91%] Building CXX object src/CMakeFiles/musica.dir/micm/micm.cpp.o
In file included from /Users/kshores/Documents/musica/src/micm/micm.cpp:7:
In file included from /Users/kshores/Documents/musica/include/musica/micm.hpp:8:
/Users/kshores/Documents/musica/include/musica/util.hpp:45:12: warning: 'CreateString' has C-linkage specified, but returns user-defined type 'String' which is incompatible with C [-Wreturn-type-c-linkage]
    String CreateString(const char* value);
           ^
/Users/kshores/Documents/musica/include/musica/util.hpp:53:11: warning: 'NoError' has C-linkage specified, but returns user-defined type 'Error' which is incompatible with C [-Wreturn-type-c-linkage]
    Error NoError();
          ^
/Users/kshores/Documents/musica/include/musica/util.hpp:60:11: warning: 'ToError' has C-linkage specified, but returns user-defined type 'Error' which is incompatible with C [-Wreturn-type-c-linkage]
    Error ToError(const char* category, int code, const char* message);
          ^
In file included from /Users/kshores/Documents/musica/src/micm/micm.cpp:7:
/Users/kshores/Documents/musica/include/musica/micm.hpp:31:12: warning: 'get_micm_version' has C-linkage specified, but returns user-defined type 'String' which is incompatible with C [-Wreturn-type-c-linkage]
    String get_micm_version(void);
           ^
/Users/kshores/Documents/musica/include/musica/micm.hpp:47:12: warning: 'GetSpeciesPropertyString' has C-linkage specified, but returns user-defined type 'String' which is incompatible with C [-Wreturn-type-c-linkage]
    String GetSpeciesPropertyString(MICM *micm, const char *species_name, const char *property_name, Error *error);
           ^
5 warnings generated.
[ 92%] Building CXX object src/CMakeFiles/musica.dir/tuvx/tuvx.cpp.o
In file included from /Users/kshores/Documents/musica/src/tuvx/tuvx.cpp:6:
In file included from /Users/kshores/Documents/musica/include/musica/tuvx.hpp:8:
/Users/kshores/Documents/musica/include/musica/util.hpp:45:12: warning: 'CreateString' has C-linkage specified, but returns user-defined type 'String' which is incompatible with C [-Wreturn-type-c-linkage]
    String CreateString(const char* value);
           ^
/Users/kshores/Documents/musica/include/musica/util.hpp:53:11: warning: 'NoError' has C-linkage specified, but returns user-defined type 'Error' which is incompatible with C [-Wreturn-type-c-linkage]
    Error NoError();
          ^
/Users/kshores/Documents/musica/include/musica/util.hpp:60:11: warning: 'ToError' has C-linkage specified, but returns user-defined type 'Error' which is incompatible with C [-Wreturn-type-c-linkage]
    Error ToError(const char* category, int code, const char* message);
          ^
3 warnings generated.

Acceptance criteria

  • -Wno-return-type-c-linkage is removed from the compile definitions
    • this would mean the warning is NOT silenced
    • Also means rmeoving
      function(silence_warnings target)
      set(clang_gnu_warnings
      -Wno-return-type-c-linkage
      )
      set(msvc_warnings
      /wd4190
      )
      set(intel_llvm_warnings
      -Wno-return-type-c-linkage # Suppress the warning for Intel compilers
      )
      if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU")
      target_compile_options(${target} PRIVATE ${clang_gnu_warnings})
      elseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
      target_compile_options(${target} PRIVATE ${msvc_warnings})
      elseif (CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM")
      target_compile_options(${target} PRIVATE ${intel_llvm_warnings})
      endif()
      endfunction()

Ideas

  • The C functions return pointers, not stack objects
    • Read more on this topic here
  • The functions return void and accept a pointer to an object that must be filled in the function

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions