the logic isn't quite the same, if you look at FuncDeclaration::semantic()