WheretIB / nullc

Fast C-like programming language with advanced features
MIT License
163 stars 13 forks source link

memset can't be used on non-trivial types, resulting in a warning #38

Closed zeux closed 1 year ago

zeux commented 1 year ago

STR: make test on Linux (gcc 11.3)

Compilation succeeds and tests run, but the resulting output contains 229 warnings of this form:

tests/../NULLC/DenseMap.h:380:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct DirectChainedMap<TypeLookupResult>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
  380 |                 memset(data, 0, sizeof(Node) * bucketCount);

Here's the list of unique warnings:

NULLC/Array.h:172:31: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct ExecutorX86::Breakpoint’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/Array.h:172:31: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct NULLC::Range’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/Array.h:172:31: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct RegVmCmd’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/Array.h:172:31: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct UnsatisfiedJump’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/Array.h:172:31: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct x86Instruction’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/CodeGenRegVm_X86.cpp:1266:15: warning: ‘void* memcpy(void*, const void*, size_t)’ copying an object of non-trivial type ‘struct RegVmCmd’ from an array of ‘unsigned int [2]’ [-Wclass-memaccess]
NULLC/CodeGenRegVm_X86.cpp:1312:15: warning: ‘void* memcpy(void*, const void*, size_t)’ copying an object of non-trivial type ‘struct RegVmCmd’ from an array of ‘unsigned int [2]’ [-Wclass-memaccess]
NULLC/CodeGenRegVm_X86.cpp:2731:15: warning: ‘void* memcpy(void*, const void*, size_t)’ copying an object of non-trivial type ‘struct RegVmCmd’ from an array of ‘unsigned int [2]’ [-Wclass-memaccess]
NULLC/CodeGenRegVm_X86.cpp:4001:15: warning: ‘void* memcpy(void*, const void*, size_t)’ copying an object of non-trivial type ‘struct RegVmCmd’ from an array of ‘unsigned int [2]’ [-Wclass-memaccess]
NULLC/CodeGenRegVm_X86.cpp:4041:15: warning: ‘void* memcpy(void*, const void*, size_t)’ copying an object of non-trivial type ‘struct RegVmCmd’ from an array of ‘unsigned int [2]’ [-Wclass-memaccess]
NULLC/CodeGen_X86.h:17:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct x86Argument’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/CodeGen_X86.h:21:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct x86Argument’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/CodeGen_X86.h:25:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct CodeGenGenericContext::MemCache’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:128:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct SmallDenseMap<GenericFunctionInstanceTypeRequest, GenericFunctionInstanceTypeResponse, GenericFunctionInstanceTypeRequestHasher, 32>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:128:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct SmallDenseMap<InplaceStr, ModuleData*, InplaceStrHasher, 128>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:128:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct SmallDenseMap<InplaceStr, VariableData*, InplaceStrHasher, 128>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:128:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct SmallDenseMap<TypedFunctionInstanceRequest, ExprBase*, TypedFunctionInstanceRequestHasher, 32>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:128:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct SmallDenseMap<TypeModulePair, TypeBase*, TypeModulePairHasher, 32>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:185:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘class InplaceStr’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:185:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct TypePair’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:211:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct TypePair’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:27:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct SmallDenseMap<GenericFunctionInstanceTypeRequest, GenericFunctionInstanceTypeResponse, GenericFunctionInstanceTypeRequestHasher, 32>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:27:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct SmallDenseMap<InplaceStr, ModuleData*, InplaceStrHasher, 128>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:27:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct SmallDenseMap<InplaceStr, VariableData*, InplaceStrHasher, 128>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:27:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct SmallDenseMap<TypedFunctionInstanceRequest, ExprBase*, TypedFunctionInstanceRequestHasher, 32>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:27:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct SmallDenseMap<TypeModulePair, TypeBase*, TypeModulePairHasher, 32>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:282:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘class InplaceStr’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:282:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct TypePair’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:380:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct DirectChainedMap<FunctionData*>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:380:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct DirectChainedMap<IdentifierLookupResult>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:380:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct DirectChainedMap<TypeFunction*>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:380:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct DirectChainedMap<TypeLookupResult>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:572:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct DirectChainedMap<FunctionData*>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:572:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct DirectChainedMap<IdentifierLookupResult>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:572:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct DirectChainedMap<TypeFunction*>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/DenseMap.h:572:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct DirectChainedMap<TypeLookupResult>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/Executor_X86.cpp:1217:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct x86Instruction’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/Executor_X86.cpp:1282:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct x86Instruction’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/includes/../../NULLC/DenseMap.h:185:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘class InplaceStr’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/includes/../../NULLC/DenseMap.h:380:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct DirectChainedMap<FunctionData*>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/includes/../../NULLC/DenseMap.h:380:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct DirectChainedMap<IdentifierLookupResult>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/includes/../../NULLC/DenseMap.h:380:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct DirectChainedMap<TypeLookupResult>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/Instruction_X86.h:278:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct x86Argument’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/Translator_X86.cpp:3966:15: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct x86Instruction’; use assignment or value-initialization instead [-Wclass-memaccess]
tests/../NULLC/DenseMap.h:185:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘class InplaceStr’; use assignment or value-initialization instead [-Wclass-memaccess]
tests/../NULLC/DenseMap.h:380:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct DirectChainedMap<FunctionData*>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
tests/../NULLC/DenseMap.h:380:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct DirectChainedMap<IdentifierLookupResult>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
tests/../NULLC/DenseMap.h:380:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct DirectChainedMap<TypeLookupResult>::Node’; use assignment or value-initialization instead [-Wclass-memaccess]
WheretIB commented 1 year ago

Should be fixed with https://github.com/WheretIB/nullc/pull/39

zeux commented 1 year ago

Thanks! This fixes most of the memset warnings but three remain:

NULLC/CodeGen_X86.h:17:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct x86Argument’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/CodeGen_X86.h:21:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct x86Argument’; use assignment or value-initialization instead [-Wclass-memaccess]
NULLC/CodeGen_X86.h:25:23: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct CodeGenGenericContext::MemCache’; use assignment or value-initialization instead [-Wclass-memaccess]