diff --git a/src/base/SMPBasicBlock.cpp b/src/base/SMPBasicBlock.cpp
index 6c1ae0ad3b5016a54fa6470ba33097898eb96b19..e2043bd3912aa2ad2fe5e8ab0adc9f3f439bcc8b 100644
--- a/src/base/SMPBasicBlock.cpp
+++ b/src/base/SMPBasicBlock.cpp
@@ -439,7 +439,7 @@ list<SMPBasicBlock *>::iterator SMPBasicBlock::GetFallThroughSucc(void) {
 			if (FirstSuccAddr > LastAddr) { // block comes after this block; candidate for fall-through
 				STARS_ea_t NewAddrDiff = FirstSuccAddr - LastAddr;
 #if 1
-				if (NewAddrDiff == LastInst->GetSize()) {
+				if (NewAddrDiff == LastInst->GetSize()) {  // Use STARSInstruction::GetNextInstruction  !!!!****!!!!
 					FallThroughSuccIter = SuccIter;
 					break;
 				}
@@ -852,17 +852,29 @@ STARS_ea_t SMPBasicBlock::GetDefAddrFromUseAddr(const STARSOpndTypePtr &UseOp, S
 			if (DefAddr == STARS_BADADDR) { // not found yet
 				// Must be a global name defined in the Phi functions or LiveIn and UpExposed to the block, or a non-stack mem access.
 				bool UseFP = this->GetFunc()->UsesFramePointer();
-				assert(!LocalName || (!MDIsDataFlowOpnd(UseOp, UseFP)));
-				set<SMPPhiFunction, LessPhi>::iterator PhiIter = this->FindPhi(UseOp);
-				if (PhiIter != this->GetLastPhi()) {
-					// Found a Phi function for UseOp; does it DEF our SSANum?
-					int PhiDefSSANum = PhiIter->GetDefSSANum();
-					if (PhiDefSSANum == SSANum) {
-						DefAddr = this->GetNumber() + STARS_PSEUDO_ID_MIN;  // BlockNum is signal that the Def has no real addr, is in Phi
-					}
+				if (LocalName && MDIsDataFlowOpnd(UseOp, UseFP)) {
+					// Should have found DefAddr by now. Why were we called in the first place?
+					SMP_msg("\nERROR in GetDefAddrFromUseAddr() for UseAddr: %llx\n", (unsigned long long) InstAddr);
+					SMP_msg("UseOp: "); PrintOperand(UseOp); SMP_msg("\n");
+					SMP_msg("LocalName: %d  IsDataFlowOpnd: %d\n", LocalName, MDIsDataFlowOpnd(UseOp, UseFP));
+					SMP_msg("UseFP: %d LiveIn: %d Killed: %d\n", UseFP, this->IsLiveIn(UseOp), this->IsVarKill(UseOp));
+#if 0				// Just leave DefAddr set to STARS_BADADDR and return.
+					assert(!LocalName || (!MDIsDataFlowOpnd(UseOp, UseFP)));
+#endif
+
 				}
 				else {
-					DefAddr = STARS_LIVEIN_PSEUDO_ID; // pseudo-def-addr for LiveIn, not in Phi, UpExposed
+					set<SMPPhiFunction, LessPhi>::iterator PhiIter = this->FindPhi(UseOp);
+					if (PhiIter != this->GetLastPhi()) {
+						// Found a Phi function for UseOp; does it DEF our SSANum?
+						int PhiDefSSANum = PhiIter->GetDefSSANum();
+						if (PhiDefSSANum == SSANum) {
+							DefAddr = this->GetNumber() + STARS_PSEUDO_ID_MIN;  // BlockNum is signal that the Def has no real addr, is in Phi
+						}
+					}
+					else {
+						DefAddr = STARS_LIVEIN_PSEUDO_ID; // pseudo-def-addr for LiveIn, not in Phi, UpExposed
+					}
 				}
 			}
 		}
diff --git a/src/base/SMPProgram.cpp b/src/base/SMPProgram.cpp
index fa6ade6e4666b325819eea1b587508b06b2f0157..474e56cd0b7982a28222a71194b91f2ed9565e58 100644
--- a/src/base/SMPProgram.cpp
+++ b/src/base/SMPProgram.cpp
@@ -281,9 +281,10 @@ void SMPProgram::Analyze(ProfilerInformation *pi, FILE *AnnotFile, FILE *InfoAnn
 			continue;
 		}
 
-#if 1
+#if 1   // IRDB functions might not map to segments, might return nuLL seg.
+		//  Might want an XTRN attribute for Functions instead of segments.
 		STARS_Segment_t *seg = SMP_getseg(FuncInfo->get_startEA());
-		if (seg->IsXternSegment() /* ->type == SEG_XTRN */) {
+		if ((NULL != seg) && seg->IsXternSegment() /* ->type == SEG_XTRN */) {
 			SMP_msg("Skipping SEG_XTRN func: FuncIndex %zu \n", FuncIndex);
 			continue;
 		}