Bootstrapped and tested on x86_64-linux with no regressions. I originally threw this e-mail together last night, but threw in the towel when I thought I saw tests failing and went to sleep. I did a proper bootstrap and comparison and whatnot and found that there were thankfully no regressions. Anyhow, the first patch feels ready for trunk, the second needs at least one review, I'll write more on that in the second e-mail though. I put quite a lot into the commit message, in hindsight I think I may have gone overboard, but that isn't something I'm going to rewrite at the moment. I really want to get these patches up for review so they can be finalized. I'm also including my usual musings on things that came up as I was polishing off the patches. I reckon some of them aren't all that important right now but I would rather toss them in here than forget about them. I'm starting to think that we should have a general macro that indicates whether an implicit object argument should be passed in the call. It might be more clear than what is currently present. I've also noticed that there's a fair amount of places where instead of using DECL_NONSTATIC_MEMBER_FUNCTION_P the code checks if tree_code of the type is a METHOD_TYPE, which is exactly what the aforementioned macro does. In build_min_non_dep_op_overload I reversed the branches of a condition because it made more sense with METHOD_TYPE first so it doesn't have to take xobj member functions into account on both branches. I am slightly concerned that flipping the branch around might have consequences, hence why I am mentioning it. Realistically I think it's probably fine though. I have a test prepared for diagnosing virtual specifiers on xobj member functions, but it's got some issues so I won't be including it with the following diagnostic patch. Diagnostics for virtual specifiers are still implemented, it's just the test that is having trouble. I mostly had a hard time working out edge cases, and the standard doesn't actually properly specify what the criteria for overriding a function is so I've been stumped on what behavior I want it to have. So for the time being, it only diagnoses uses of virtual on xobj member functions, while errors for final and override are handled by code that is already present. This can result in multiple errors, but again, I don't know how I want to handle it yet, especially since the standard doesn't specify this stuff very well. BTW let me know if there's anything you would prefer to be done differently in the changelog, I am still having trouble writing them and I'm usually uncertain if I'm writing them properly. Alex