CFG doesn't call implicit destructor on exception edge?

What's the current status of throw expressions in the clang CFG? They
seem to be supported, but a throw does not perform calls to implicit
destructors before hitting the exit block. For example, the CFG for
the code below does not include a call to ~MutexLock after the throw.


(*) Code:

void Foo::test() {
  MutexLock lock(&mutex_);

  if (condition()) {
    throw 0;

(*) CFG:

[B4 (ENTRY)]
   Succs (1): B3

   1: [B3.5].~MutexLock() (Implicit destructor)
   Preds (1): B3
   Succs (1): B0

   1: 0
   2: throw [B2.1]
   Preds (1): B3
   Succs (1): B0

   1: this
   2: [B3.1]->mutex_
   3: &[B3.2]
   4: [B3.3] (CXXConstructExpr, class MutexLock)
   5: MutexLock lock(&this->mutex_);
   6: condition
   7: [B3.6] (ImplicitCastExpr, FunctionToPointerDecay, _Bool (*)(void))
   8: [B3.7]()
   T: if [B3.8]
   Preds (1): B4
   Succs (2): B2 B1

[B0 (EXIT)]
   Preds (2): B1 B2

I would consider it essentially unimplemented (although some preliminary work is there). Note that CFG edges for exceptions are not generated by default because they can be rather explosive. One has has to explicitly tell the CFG builder to include destructor edges.