Changing a function to pure does not update function to pure in child blueprints

In my parent blueprint, I have implemented a function. In a child blueprint, that function is overriden and used in event graph. Now I set function to pure in parent BP. However, in child blueprint where overriden function is used in event graph, function node still has an execution input.
workaround to get rid of execution input was to delete function in child blueprint and to create override function again. Then, execution input was gone.

Hi Theokoles,

I’m not seeing this occur in 4.8.0. Can you show me an image of what your function looks like in parent BP, and what it looks like in your child BP, both before and after switching cast to a pure cast? Thanks!

So I have reproduced this in a new project. In parent BP I have created a function that is overridden in child BP. Then I switched function to pure in parent BP. I recompiled and saved both BPs. In child BP, overridden function node still has execution pins, even if I delete function node and create it again or if I click refresh node.

Thanks for repro steps! I see same behavior, however I don’t believe this is a bug. Once you override a function in a Child BP, only part that references Parent’s function is Parent: Function node (in your case, Parent: Some Fun). When calling function in Event Graph, you’re calling your overridden function rather than that of Parent, and as such it expects execution pins.

only potential bug I’m seeing is that menu is still switching overridden function in context menu to green (pure). I’ll go ahead and enter it if that’s only thing wrong here.

Am I missing something, or does that make sense to you?

In my case I wanted implementation in child BP also to become pure. I did not find a button to do this. only workaround I found was to delete function in child BP, and to override it again (now it inherited pureness from parent function) and to implement behavior again from scratch. So i assumed that overridden function failed to automatically become pure when pureness of parent function changed.
If this is not a bug, how do I change pureness of child function in my example without deleting it and overriding it again?
If behavior in my screenshots is really intended, then there is a button missing to toggle pureness of child function independently from pureness of parent function.
Or think about it this way: When I override a function, I don’t have a choice if child function shall be pure, because it automatically inherits pureness from parent function, and there is no way to change it (it says “Graph not editable” in details panel).
Is pureness something that is inherited from a parent function to a child function? It seems to me that answer right now is “sometimes”, which is not very consistent.

Hey Theokoles,

Ah, I see what you’re saying. In overridden functions, you don’t have ability to toggle between pure/not pure. That seems like an oversight to me, so I’ve entered a bug report for issue (UE-17804). I’ll let you know when I see any change in its status.

Inheritance of functions should be simple: child receives all changes to function from parent. If you override function in child at any point, it no longer inherits changes to function from parent. So a pure function will remain pure in overridden function, even if you make function not pure in parent. If you delete that override, then override function in child again, new overridden child will inherit current state of parent. That’s all pretty consistent, but without being able to make any changes to details of overridden function, I can see how that might be confusing. Hopefully we’ll get that fixed. Thanks for report!

Yes, that’s what I was trying to say. If you implement button to toggle between pure and not pure, everything should be fine.