Fix struct assign in constexpr

This commit is contained in:
drmortalwombat 2023-10-03 12:47:24 +02:00
parent 4e6769d81c
commit 313b6dcf93
2 changed files with 10 additions and 3 deletions

View File

@ -418,8 +418,13 @@ void ConstexprInterpreter::Value::Assign(const Value& v)
case DT_TYPE_STRUCT: case DT_TYPE_STRUCT:
case DT_TYPE_UNION: case DT_TYPE_UNION:
case DT_TYPE_ARRAY: case DT_TYPE_ARRAY:
memcpy(GetAddr(), v.GetAddr(), mDecType->mSize); {
break; const ConstexprInterpreter::ValueItem* sp = v.GetAddr();
ConstexprInterpreter::ValueItem* dp = GetAddr();
for (int i = 0; i < mDecType->mSize; i++)
dp[i] = sp[i];
} break;
case DT_TYPE_POINTER: case DT_TYPE_POINTER:
PutPtr(v.GetPtr()); PutPtr(v.GetPtr());
break; break;
@ -1260,7 +1265,7 @@ ConstexprInterpreter::Value ConstexprInterpreter::Eval(Expression* exp)
mErrors->Error(exp->mLocation, EERR_INVALID_CONSTEXPR, "Invalid constexpr"); mErrors->Error(exp->mLocation, EERR_INVALID_CONSTEXPR, "Invalid constexpr");
return exp; return Value();
} }
ConstexprInterpreter::Flow ConstexprInterpreter::Execute(Expression* exp) ConstexprInterpreter::Flow ConstexprInterpreter::Execute(Expression* exp)

View File

@ -6301,6 +6301,8 @@ Expression* Parser::ParsePostfixExpression(bool lhs)
if (exp->mDecType->ValueType() == DT_TYPE_STRUCT) if (exp->mDecType->ValueType() == DT_TYPE_STRUCT)
{ {
nexp = CheckOperatorOverload(nexp); nexp = CheckOperatorOverload(nexp);
if (nexp->mType == EX_INDEX)
mErrors->Error(mScanner->mLocation, EERR_INVALID_INDEX, "No indexing operator found");
} }
else if (exp->mDecType->mType == DT_TYPE_ARRAY || exp->mDecType->mType == DT_TYPE_POINTER) else if (exp->mDecType->mType == DT_TYPE_ARRAY || exp->mDecType->mType == DT_TYPE_POINTER)
{ {