From 9f991addfcbdadfa6d9b772ab175669cacdf0a72 Mon Sep 17 00:00:00 2001
From: David Li
Date: Wed, 13 Mar 2024 08:20:22 -0400
Subject: [PATCH] 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 69a8c1aa82..8c9c37ee61 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 87390ce351..83d2d61106 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 7d24aac02e..59f3f3f9a3 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(malloc(ADBC_ERROR_1_0_0_SIZE));
+ auto* error = reinterpret_cast(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(error);
+ old_error->release(old_error);
free(error);
}