Skip to content

Commit a9f64ba

Browse files
authored
Fix nullary operator= segfault (#340)
Fixes #337.
1 parent 089b785 commit a9f64ba

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

source/parse.h

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2218,9 +2218,9 @@ auto function_type_node::is_assignment() const
22182218
{
22192219
if (
22202220
my_decl->has_name("operator=")
2221+
&& (*parameters).ssize() > 1
22212222
&& (*parameters)[0]->has_name("this")
22222223
&& (*parameters)[0]->direction() == passing_style::inout
2223-
&& (*parameters).ssize() > 1
22242224
)
22252225
{
22262226
return true;
@@ -2266,9 +2266,9 @@ auto function_type_node::is_destructor() const
22662266
{
22672267
if (
22682268
my_decl->has_name("operator=")
2269+
&& (*parameters).ssize() == 1
22692270
&& (*parameters)[0]->has_name("this")
22702271
&& (*parameters)[0]->direction() == passing_style::move
2271-
&& (*parameters).ssize() == 1
22722272
)
22732273
{
22742274
return true;
@@ -5865,9 +5865,12 @@ class parser
58655865
return {};
58665866
}
58675867

5868-
if (
5869-
func->parameters->ssize() > 0
5870-
&& (*func->parameters)[0]->has_name("this")
5868+
if (func->parameters->ssize() == 0)
5869+
{
5870+
error( "an operator= function must have a parameter", false );
5871+
}
5872+
else if (
5873+
(*func->parameters)[0]->has_name("this")
58715874
&& (*func->parameters)[0]->pass != passing_style::inout
58725875
&& (*func->parameters)[0]->pass != passing_style::out
58735876
&& (*func->parameters)[0]->pass != passing_style::move

0 commit comments

Comments
 (0)