================
Comment at: lib/Sema/SemaLambda.cpp:101
@@ -98,1 +100,3 @@
+        (isa<FunctionDecl>(CurContext) &&
+         Context.getTargetInfo().getCXXABI().isMicrosoft())) {
       ManglingContextDecl = 0;
----------------
Eli Friedman wrote:
> Why do you need to number anything in a function which isn't inline?  CodeGen 
> can mangle static variables etc.  however it wants because they aren't 
> externally visible.
I'm using these to number bits in a bitfield, not to mangle.  I have to use 
this mechanism to number the bits of inline functions, so it makes sense to use 
it to number bits of non inline functions too.  Otherwise I have to add back 
the CXXABIFunctionState code I had in the first version of this patch.

I'm having a very hard time extracting this function from Sema and moving it 
over to AST/ItaniumCXXABI.cpp as John suggested.  It accesses a bunch of Sema 
fields.  Do you have any thoughts on how this should look in the long run?

I expect I will also need to number other things like scopes to handle your 
example of:
  int bar();
  inline void foo() {
    static int f = bar();
    { static int f = bar(); }
  }

These are differentiated by mangling in the current scope depth.  The first f 
is at level 2 (global 0?, param, local) and the second f is at level 3 (+1 
local scope).  MicrosoftCXXNameMangler::mangleLocalName() attempts to implement 
this, but it is wrong.


http://llvm-reviews.chandlerc.com/D1416
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to