/**
 * @name SSA unique definition test
 * @description SSA unique definition test. For each use there must be zero or one SSA definitions.
 * @kind test
 */

import cpp
import semmle.code.cpp.rangeanalysis.RangeSSA

/* Count of number of uses where the number of SSA definitions exceeds one.
  Should always be zero *regardless* of the input */

select
count(RangeSsaDefinition d1, RangeSsaDefinition d2, Expr u, LocalScopeVariable v |
      d1.getAUse(v) = u and
      d2.getAUse(v) = u and not d1 = d2
)
