diff --git a/Userland/Libraries/LibCpp/AST.cpp b/Userland/Libraries/LibCpp/AST.cpp index 8e7eee4cf7..9243099f90 100644 --- a/Userland/Libraries/LibCpp/AST.cpp +++ b/Userland/Libraries/LibCpp/AST.cpp @@ -249,7 +249,8 @@ void StringLiteral::dump(size_t indent) const void ReturnStatement::dump(size_t indent) const { ASTNode::dump(indent); - m_value->dump(indent + 1); + if(m_value) + m_value->dump(indent + 1); } void EnumDeclaration::dump(size_t indent) const diff --git a/Userland/Libraries/LibCpp/Parser.cpp b/Userland/Libraries/LibCpp/Parser.cpp index ea5b4b98b9..647adc9f75 100644 --- a/Userland/Libraries/LibCpp/Parser.cpp +++ b/Userland/Libraries/LibCpp/Parser.cpp @@ -901,9 +901,11 @@ NonnullRefPtr Parser::parse_return_statement(ASTNode& parent) SCOPE_LOGGER(); auto return_statement = create_ast_node(parent, position(), {}); consume(Token::Type::Keyword); - auto expression = parse_expression(*return_statement); - return_statement->m_value = expression; - return_statement->set_end(expression->end()); + if(!peek(Token::Type::Semicolon).has_value()) { + auto expression = parse_expression(*return_statement); + return_statement->m_value = expression; + } + return_statement->set_end(position()); return return_statement; }