Skip to content

Commit

Permalink
WIP - CLANGD CRASHES SO MUCH AAAAAAAAAAAAA
Browse files Browse the repository at this point in the history
  • Loading branch information
emneo-dev committed Jul 4, 2024
1 parent e64d289 commit dce53da
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 43 deletions.
45 changes: 24 additions & 21 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -27,30 +27,31 @@ CXXFLAGS := -Wall
CXXFLAGS += -Wextra
CXXFLAGS += -Wconversion
CXXFLAGS += -std=c++17
CXXFLAGS += -Wp,-U_FORTIFY_SOURCE
CXXFLAGS += -Wformat=2
CXXFLAGS += -MMD -MP
CXXFLAGS += -fno-builtin
CXXFLAGS += -pipe
CXXFLAGS += -march=native -mtune=native
CXXFLAGS += -Wcast-qual
CXXFLAGS += -Wconversion
CXXFLAGS += -Wdisabled-optimization
##CXXFLAGS += -Wp,-U_FORTIFY_SOURCE
##CXXFLAGS += -Wformat=2
##CXXFLAGS += -MMD -MP
##CXXFLAGS += -fno-builtin
##CXXFLAGS += -pipe
##CXXFLAGS += -march=native -mtune=native
##CXXFLAGS += -Wcast-qual
##CXXFLAGS += -Wconversion
##CXXFLAGS += -Wdisabled-optimization
##CXXFLAGS += -Werror=return-type
##CXXFLAGS += -Winit-self
##CXXFLAGS += -Winline
##CXXFLAGS += -Wredundant-decls
##CXXFLAGS += -Wshadow
##CXXFLAGS += -Wundef
##CXXFLAGS += -Wunreachable-code
##CXXFLAGS += -Wwrite-strings
##CXXFLAGS += -Wno-missing-field-initializers

ifeq ($(CXX), g++)
CXXFLAGS += -Wduplicated-branches
CXXFLAGS += -Wduplicated-cond
CXXFLAGS += -Werror=return-type
CXXFLAGS += -Werror=vla-larger-than=0
CXXFLAGS += -Winit-self
CXXFLAGS += -Winline
CXXFLAGS += -Wlogical-op
CXXFLAGS += -Wredundant-decls
CXXFLAGS += -Wshadow
CXXFLAGS += -Wsuggest-attribute=pure
CXXFLAGS += -Wsuggest-attribute=const
CXXFLAGS += -Wundef
CXXFLAGS += -Wunreachable-code
CXXFLAGS += -Wwrite-strings
CXXFLAGS += -Wno-missing-field-initializers
endif

LDFLAGS := -Llibs/cubic-protocol -lcubic-protocol

Expand All @@ -75,13 +76,15 @@ endif

ifeq ($(ASAN), 1)
CXXFLAGS += -fsanitize=address,leak,undefined
LDFLAGS += -lasan -lubsan -fsanitize=address,leak,undefined
LDFLAGS += -fsanitize=address,leak,undefined
endif

# -fanalyzer is quite broken in g++, deactivate by default
ifeq ($(ANALYZER), 1)
ifeq ($(CXX), g++)
CXXFLAGS += -fanalyzer
CXXFLAGS += -Wno-analyzer-use-of-uninitialized-value
endif
endif

.PHONY: all
Expand Down
45 changes: 24 additions & 21 deletions libs/cubic-protocol/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -27,30 +27,31 @@ CXXFLAGS := -Wall
CXXFLAGS += -Wextra
CXXFLAGS += -Wconversion
CXXFLAGS += -std=c++17
CXXFLAGS += -Wp,-U_FORTIFY_SOURCE
CXXFLAGS += -Wformat=2
CXXFLAGS += -MMD -MP
CXXFLAGS += -fno-builtin
CXXFLAGS += -pipe
CXXFLAGS += -march=native -mtune=native
CXXFLAGS += -Wcast-qual
CXXFLAGS += -Wconversion
CXXFLAGS += -Wdisabled-optimization
##CXXFLAGS += -Wp,-U_FORTIFY_SOURCE
##CXXFLAGS += -Wformat=2
##CXXFLAGS += -MMD -MP
##CXXFLAGS += -fno-builtin
##CXXFLAGS += -pipe
##CXXFLAGS += -march=native -mtune=native
##CXXFLAGS += -Wcast-qual
##CXXFLAGS += -Wconversion
##CXXFLAGS += -Wdisabled-optimization
##CXXFLAGS += -Werror=return-type
##CXXFLAGS += -Winit-self
##CXXFLAGS += -Winline
##CXXFLAGS += -Wredundant-decls
##CXXFLAGS += -Wshadow
##CXXFLAGS += -Wundef
##CXXFLAGS += -Wunreachable-code
##CXXFLAGS += -Wwrite-strings
##CXXFLAGS += -Wno-missing-field-initializers

ifeq ($(CXX), g++)
CXXFLAGS += -Wduplicated-branches
CXXFLAGS += -Wduplicated-cond
CXXFLAGS += -Werror=return-type
CXXFLAGS += -Werror=vla-larger-than=0
CXXFLAGS += -Winit-self
CXXFLAGS += -Winline
CXXFLAGS += -Wlogical-op
CXXFLAGS += -Wredundant-decls
CXXFLAGS += -Wshadow
CXXFLAGS += -Wsuggest-attribute=pure
CXXFLAGS += -Wsuggest-attribute=const
CXXFLAGS += -Wundef
CXXFLAGS += -Wunreachable-code
CXXFLAGS += -Wwrite-strings
CXXFLAGS += -Wno-missing-field-initializers
endif

AR := ar

Expand All @@ -70,13 +71,15 @@ endif

ifeq ($(ASAN), 1)
CXXFLAGS += -fsanitize=address,leak,undefined
LDFLAGS += -lasan -lubsan -fsanitize=address,leak,undefined
LDFLAGS += -fsanitize=address,leak,undefined
endif

# -fanalyzer is quite broken in g++, deactivate by default
ifeq ($(ANALYZER), 1)
ifeq ($(CXX), g++)
CXXFLAGS += -fanalyzer
CXXFLAGS += -Wno-analyzer-use-of-uninitialized-value
endif
endif

$(TARGET_LIB): $(BUILD_DIR)/$(TARGET_LIB)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,18 @@
#include <cstdint>
// TODO: Check if we want to use std::string for string parsing
#include <string>
#include <vector>

namespace cubic::protocol::primitives::string {

/**
* Tries to serialize the given value to a byte buffer
*
* @param out Byte buffer where the data will be appended to
* @param value Value to be serialized
*/
auto serialize(std::vector<uint8_t> &out, const std::string_view &value) -> void;

/**
* Tries to parse a string
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,14 @@ auto get_num_bytes(int32_t value) -> uint8_t;
*/
auto serialize(std::vector<uint8_t> &out, int32_t value) -> void;

/**
* Tries to serialize the given value to a byte buffer
*
* @param out Byte buffer where the data will be written to
* @param value Value to be serialized
*/
auto serialize(uint8_t *out, int32_t value) -> void;

/**
* Tries to parse a varint
*
Expand Down
8 changes: 8 additions & 0 deletions libs/cubic-protocol/src/primitives/string.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@

namespace cubic::protocol::primitives::string {

// TODO: Test
auto serialize(std::vector<uint8_t> &out, const std::string_view &value) -> void
{
const uint32_t varint_size = varint::get_num_bytes((int32_t) value.size());
const auto total_size = (uint32_t) (varint_size + value.size());
out.resize(out.size() + total_size);
}

auto parse(const uint8_t *data, uint32_t available_bytes, std::string *value) -> uint32_t
{
int32_t size;
Expand Down
4 changes: 3 additions & 1 deletion libs/cubic-protocol/src/primitives/varint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace cubic::protocol::primitives::varint {
#endif
#endif

__attribute__((const)) auto get_num_bytes(int32_t value) -> uint8_t
auto get_num_bytes(int32_t value) -> uint8_t
{
if (value == 0)
return 1; // Special case to go around undefined gcc builtin behaviour
Expand Down Expand Up @@ -49,6 +49,8 @@ auto serialize(std::vector<uint8_t> &out, int32_t value) -> void
}
}

auto serialize(

auto parse(const uint8_t *data, uint32_t available_bytes, int32_t *value) -> uint32_t
{
int position = 0;
Expand Down

0 comments on commit dce53da

Please sign in to comment.