[PATCH] Handle use of default member initializers before end of outermost class
rnk at google.com
Mon Nov 17 15:36:41 PST 2014
Comment at: lib/Sema/SemaTemplateInstantiate.cpp:2230
@@ +2229,3 @@
+ LocalInstantiationScope Scope(*this, /*MergeWithParentScope*/true);
> `MergeWithParentScope` should be `false` here; there's not necessarily any connection between whatever we were instantiating before and this scope.
Comment at: lib/Sema/SemaTemplateInstantiate.cpp:2246
@@ +2245,3 @@
+ return Init == nullptr;
> You currently return `false` even when `ActOnFinishCXXInClassMemberInitializer` fails; you should probably either return `true` in that case or remove your return value and check for whether there actually is an in-class initialzer in the caller afterwards.
I think the Instantiate* methods should all return consistent error codes, so I'd like to keep this. I can do `return !Instantiation->getInClassInitializer()`, though, since that is the error case.
Should I be marking the Instantiation FieldDecl invalid if instantiation fails? Otherwise the next time we hit a constructor I think we'll try to reinstantiate. I'll handle this in a followup commit if you think this is better.
More information about the cfe-commits