From 5c38f7637dd0ebf9e83d2994cf01e63441250be5 Mon Sep 17 00:00:00 2001 From: Vern Paxson Date: Wed, 11 Sep 2024 16:28:20 +0200 Subject: [PATCH] -O gen-C++ fix for run-time warnings for "when" lambdas --- src/script_opt/CPP/InitsInfo.cc | 2 ++ src/script_opt/CPP/InitsInfo.h | 1 + src/script_opt/CPP/RuntimeInits.cc | 5 ++++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/script_opt/CPP/InitsInfo.cc b/src/script_opt/CPP/InitsInfo.cc index 8cd2039494..b28a7f9b66 100644 --- a/src/script_opt/CPP/InitsInfo.cc +++ b/src/script_opt/CPP/InitsInfo.cc @@ -511,6 +511,7 @@ FuncTypeInfo::FuncTypeInfo(CPPCompile* _c, TypePtr _t) : AbstractTypeInfo(_c, st flavor = f->Flavor(); params = f->Params(); yield = f->Yield(); + expressionless_return_okay = f->ExpressionlessReturnOkay(); auto gi = c->RegisterType(params); if ( gi ) @@ -527,6 +528,7 @@ void FuncTypeInfo::AddInitializerVals(std::vector& ivs) const { ivs.emplace_back(Fmt(c->TypeOffset(params))); ivs.emplace_back(Fmt(yield ? c->TypeOffset(yield) : -1)); ivs.emplace_back(Fmt(static_cast(flavor))); + ivs.emplace_back(Fmt(static_cast(expressionless_return_okay))); } RecordTypeInfo::RecordTypeInfo(CPPCompile* _c, TypePtr _t) : AbstractTypeInfo(_c, std::move(_t)) { diff --git a/src/script_opt/CPP/InitsInfo.h b/src/script_opt/CPP/InitsInfo.h index d2b097a304..a9ae9ed37b 100644 --- a/src/script_opt/CPP/InitsInfo.h +++ b/src/script_opt/CPP/InitsInfo.h @@ -624,6 +624,7 @@ private: FunctionFlavor flavor; RecordTypePtr params; TypePtr yield; + bool expressionless_return_okay; }; class RecordTypeInfo : public AbstractTypeInfo { diff --git a/src/script_opt/CPP/RuntimeInits.cc b/src/script_opt/CPP/RuntimeInits.cc index 99837d08e4..d8b73626c5 100644 --- a/src/script_opt/CPP/RuntimeInits.cc +++ b/src/script_opt/CPP/RuntimeInits.cc @@ -357,6 +357,7 @@ TypePtr CPP_TypeInits::BuildFuncType(InitsManager* im, ValElemVec& init_vals) co auto p = cast_intrusive(im->Types(init_vals[1])); auto yield_i = init_vals[2]; auto flavor = static_cast(init_vals[3]); + auto expressionless_return_okay = static_cast(init_vals[4]); TypePtr y; @@ -366,7 +367,9 @@ TypePtr CPP_TypeInits::BuildFuncType(InitsManager* im, ValElemVec& init_vals) co else if ( flavor == FUNC_FLAVOR_FUNCTION || flavor == FUNC_FLAVOR_HOOK ) y = base_type(TYPE_VOID); - return make_intrusive(p, y, flavor); + auto ft = make_intrusive(p, y, flavor); + ft->SetExpressionlessReturnOkay(expressionless_return_okay); + return ft; } TypePtr CPP_TypeInits::BuildRecordType(InitsManager* im, ValElemVec& init_vals, int offset) const {