This is an automated email from the ASF dual-hosted git repository.

lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git


The following commit(s) were added to refs/heads/main by this push:
     new 9f991addf build(c): set -g3 in debug/relwithdebuginfo builds (#1609)
9f991addf is described below

commit 9f991addfcbdadfa6d9b772ab175669cacdf0a72
Author: David Li <[email protected]>
AuthorDate: Wed Mar 13 08:20:22 2024 -0400

    build(c): set -g3 in debug/relwithdebuginfo builds (#1609)
    
    Fixes #1608.
---
 c/cmake_modules/AdbcDefines.cmake         | 22 +++++++++++++++++++++-
 c/driver/sqlite/sqlite.c                  |  2 +-
 c/validation/adbc_validation_statement.cc | 13 +++++++++++--
 3 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/c/cmake_modules/AdbcDefines.cmake 
b/c/cmake_modules/AdbcDefines.cmake
index 69a8c1aa8..8c9c37ee6 100644
--- a/c/cmake_modules/AdbcDefines.cmake
+++ b/c/cmake_modules/AdbcDefines.cmake
@@ -60,8 +60,8 @@ if(CXX_LINKER_SUPPORTS_VERSION_SCRIPT)
 endif()
 
 # Set common build options
+string(TOLOWER "${CMAKE_BUILD_TYPE}" _lower_build_type)
 if("${ADBC_BUILD_WARNING_LEVEL}" STREQUAL "")
-  string(TOLOWER "${CMAKE_BUILD_TYPE}" _lower_build_type)
   if("${_lower_build_type}" STREQUAL "release")
     set(ADBC_BUILD_WARNING_LEVEL "PRODUCTION")
   else()
@@ -92,6 +92,26 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang"
       -Werror
       -Wno-unused-parameter)
   set(ADBC_C_CXX_FLAGS_PRODUCTION -Wall)
+
+  if(NOT CMAKE_C_FLAGS_DEBUG MATCHES "-O")
+    string(APPEND CMAKE_C_FLAGS_DEBUG " -Og")
+  endif()
+  if(NOT CMAKE_CXX_FLAGS_DEBUG MATCHES "-O")
+    string(APPEND CMAKE_CXX_FLAGS_DEBUG " -Og")
+  endif()
+
+  if(NOT CMAKE_C_FLAGS_DEBUG MATCHES "-g")
+    string(APPEND CMAKE_C_FLAGS_DEBUG " -g3")
+  endif()
+  if(NOT CMAKE_CXX_FLAGS_DEBUG MATCHES "-g")
+    string(APPEND CMAKE_CXX_FLAGS_DEBUG " -g3")
+  endif()
+  if(NOT CMAKE_C_FLAGS_RELWITHDEBINFO MATCHES "-g")
+    string(APPEND CMAKE_C_FLAGS_RELWITHDEBINFO " -g3")
+  endif()
+  if(NOT CMAKE_CXX_FLAGS_RELWITHDEBINFO MATCHES "-g")
+    string(APPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO " -g3")
+  endif()
 else()
   message(WARNING "Unknown compiler: ${CMAKE_CXX_COMPILER_ID}")
 endif()
diff --git a/c/driver/sqlite/sqlite.c b/c/driver/sqlite/sqlite.c
index 87390ce35..83d2d6110 100644
--- a/c/driver/sqlite/sqlite.c
+++ b/c/driver/sqlite/sqlite.c
@@ -1584,7 +1584,7 @@ AdbcStatusCode SqliteStatementGetParameterSchema(struct 
AdbcStatement* statement
   ArrowSchemaInit(schema);
   CHECK_NA(INTERNAL, ArrowSchemaSetType(schema, NANOARROW_TYPE_STRUCT), error);
   CHECK_NA(INTERNAL, ArrowSchemaAllocateChildren(schema, num_params), error);
-  char buffer[11];
+  char buffer[12];
   for (int i = 0; i < num_params; i++) {
     const char* name = sqlite3_bind_parameter_name(stmt->stmt, i + 1);
     if (name == NULL) {
diff --git a/c/validation/adbc_validation_statement.cc 
b/c/validation/adbc_validation_statement.cc
index 7d24aac02..59f3f3f9a 100644
--- a/c/validation/adbc_validation_statement.cc
+++ b/c/validation/adbc_validation_statement.cc
@@ -2591,10 +2591,18 @@ void StatementTest::TestConcurrentStatements() {
   ASSERT_NO_FATAL_FAILURE(reader1.GetSchema());
 }
 
+struct ADBC_EXPORT AdbcError100 {
+  char* message;
+  int32_t vendor_code;
+  char sqlstate[5];
+  void (*release)(struct AdbcError100* error);
+};
+
 // Test that an ADBC 1.0.0-sized error still works
 void StatementTest::TestErrorCompatibility() {
+  static_assert(sizeof(AdbcError100) == ADBC_ERROR_1_0_0_SIZE, "Wrong size");
   // XXX: sketchy cast
-  auto* error = static_cast<struct AdbcError*>(malloc(ADBC_ERROR_1_0_0_SIZE));
+  auto* error = reinterpret_cast<struct 
AdbcError*>(malloc(ADBC_ERROR_1_0_0_SIZE));
   std::memset(error, 0, ADBC_ERROR_1_0_0_SIZE);
 
   ASSERT_THAT(AdbcStatementNew(&connection, &statement, error), 
IsOkStatus(error));
@@ -2605,7 +2613,8 @@ void StatementTest::TestErrorCompatibility() {
   ASSERT_THAT(AdbcStatementExecuteQuery(&statement, &reader.stream.value,
                                         &reader.rows_affected, error),
               ::testing::Not(IsOkStatus(error)));
-  error->release(error);
+  auto* old_error = reinterpret_cast<AdbcError100*>(error);
+  old_error->release(old_error);
   free(error);
 }
 

Reply via email to