martong added a comment.

In D65445#1607803 <https://reviews.llvm.org/D65445#1607803>, @balazske wrote:

> It looks like that the problem can happen when the anonymous union is in any 
> `DeclContext` and for CTU import the import of a variable is requested and 
> that variable is in a related `DeclContext` (it can be at upper or lower 
> level). (See code of `findDefInDeclContext`: If used for variables, it goes 
> through every `DeclContext` and computes USR for specific `VarDecl`s until 
> the one is found. If we have luck it may be found before the union. An 
> anonymous union can not be imported because we get no USR for it so it is OK 
> to ignore these.) So the test can be written in many other forms but this 
> case (the code of `f`) was encountered in protobuf code.


Thanks for the explanation.

So, IIUC we cannot generate the USR for the member of the anonymous union, 
right? `f` or `i` below does not have a USR.

  class TestAnonUnionUSR {
  public:
    inline float f(int value) {
      union {
        float f;
        int i;
      };
      i = value;
      return f;
    }
    static const int Test;
  };

And `findDefInDeclContext` goes through all children DC. So if the DC is 
`TestAnonUnionUSR` then we may try to get the USR for `f` and `i`. Please 
confirm if I understand it correctly or not.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D65445/new/

https://reviews.llvm.org/D65445



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to