Skip to content

Commit a26f534

Browse files
committed
Fix nullary operator= segfault
Fixes hsutter#337.
1 parent 827ed79 commit a26f534

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
@@ -2080,9 +2080,9 @@ auto function_type_node::is_assignment() const
20802080
{
20812081
if (
20822082
my_decl->has_name("operator=")
2083+
&& (*parameters).ssize() > 1
20832084
&& (*parameters)[0]->has_name("this")
20842085
&& (*parameters)[0]->direction() == passing_style::inout
2085-
&& (*parameters).ssize() > 1
20862086
)
20872087
{
20882088
return true;
@@ -2128,9 +2128,9 @@ auto function_type_node::is_destructor() const
21282128
{
21292129
if (
21302130
my_decl->has_name("operator=")
2131+
&& (*parameters).ssize() == 1
21312132
&& (*parameters)[0]->has_name("this")
21322133
&& (*parameters)[0]->direction() == passing_style::move
2133-
&& (*parameters).ssize() == 1
21342134
)
21352135
{
21362136
return true;
@@ -5661,9 +5661,12 @@ class parser
56615661
return {};
56625662
}
56635663

5664-
if (
5665-
func->parameters->ssize() > 0
5666-
&& (*func->parameters)[0]->has_name("this")
5664+
if (func->parameters->ssize() == 0)
5665+
{
5666+
error( "an operator= function must have a parameter", false );
5667+
}
5668+
else if (
5669+
(*func->parameters)[0]->has_name("this")
56675670
&& (*func->parameters)[0]->pass != passing_style::inout
56685671
&& (*func->parameters)[0]->pass != passing_style::out
56695672
&& (*func->parameters)[0]->pass != passing_style::move

0 commit comments

Comments
 (0)