+ DPRINTF (("Lose ref: %s / %s", uentry_unparse (ce),
+ sRef_unparseFull (sr)));
+
+ tvalues = sRef_getValueTable (sr);
+
+ valueTable_elements (tvalues, fkey, fval) {
+ metaStateInfo minfo;
+ cstring msg = cstring_undefined;
+ int nval;
+
+ minfo = context_lookupMetaStateInfo (fkey);
+ llassert (metaStateInfo_isDefined (minfo));
+
+ if (stateValue_isError (fval)
+ || sRef_isStateUndefined (sr)) /* No errors for undefined state */
+ {
+ DPRINTF (("Skipping check 3"));
+ }
+ else
+ {
+ DPRINTF (("Check: %s / %s / %s", fkey,
+ metaStateInfo_unparse (minfo),
+ stateValue_unparse (fval)));
+
+ minfo = context_lookupMetaStateInfo (fkey);
+
+ nval = stateCombinationTable_lookupLoseReference
+ (metaStateInfo_getTransferTable (minfo),
+ stateValue_getValue (fval), &msg);
+
+ if (cstring_isDefined (msg))
+ {
+ /*@i32 print extra info for assignments@*/
+ DPRINTF (("From: %s", sRef_unparseFull (sr)));
+ DPRINTF (("Null? %s / %s",
+ bool_unparse (sRef_isDefinitelyNull (sr)),
+ bool_unparse (usymtab_isGuarded (sr))));
+
+ if (optgenerror
+ (FLG_STATETRANSFER,
+ message
+ ("%s loses reference %q in invalid state %q (%s)",
+ cstring_makeLiteralTemp (isReturn ? "Return" : "Scope exit"),
+ uentry_getName (ce),
+ stateValue_unparseValue (fval, minfo),
+ msg),
+ g_currentloc))
+ {
+ stateValue_show (fval, minfo);
+ }
+ else
+ {
+ DPRINTF (("Suppressed transfer error: %s", msg));
+ }
+ }
+ }
+ } end_valueTable_elements;
+ }
+
+ DPRINTF (("Here 1"));