NoQ added a comment.

Wow, this crash must have been hard to notice!

I think we shouldn't be default-binding non-lazy compound values. Normally we 
unpack them into field bindings right away, but it seems that nobody cared to 
implement this for unions.

The current crash goes through `RegionStoreManager::bind()`,

     2000           if (Ty->isVectorType())
     2001             return bindVector(B, TR, V);
     2002           if (Ty->isUnionType())
  -> 2003             return bindAggregate(B, TR, V);

I think that instead of doing `bindAggregate()`, we should do something similar 
to what `RegionStoreManager::bindStruct()` does (the code that handles compound 
values should probably be factored out). It should be even easier because 
unions hold only one value.

I'm not sure if my suggestion has any immediate benefits to overweight its 
complexity, but it should make improving support for unions easier in the 
future.

Also, the code for the lazy compound value is really out of place here. All it 
does is works around the huge and famous FIXME in 
`getBindingForFieldOrElementCommon()`. But i don't think we should grow this 
FIXME into unions.


Repository:
  rL LLVM

https://reviews.llvm.org/D26442



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

Reply via email to