Skip to content

Commit dc00539

Browse files
committed
add error handling
1 parent 10d9c4f commit dc00539

File tree

2 files changed

+49
-16
lines changed

2 files changed

+49
-16
lines changed

chc/app/CFile.py

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,11 @@ def collect_post_assumes(self) -> None:
370370
"""Collect callsite postconditions from callee's contracts and add as assume."""
371371

372372
for fn in self.get_functions():
373-
fn.collect_post_assumes()
373+
try:
374+
fn.collect_post_assumes()
375+
except UF.CHCError as e:
376+
chklogger.logger.error(str(e))
377+
continue
374378

375379
self.save_interface_dictionary()
376380
self.save_predicate_dictionary()
@@ -444,7 +448,11 @@ def get_functions(self) -> Iterable[CFunction]:
444448

445449
def iter_functions(self, f: Callable[[CFunction], None]) -> None:
446450
for fn in self.get_functions():
447-
f(fn)
451+
try:
452+
f(fn)
453+
except UF.CHCError as e:
454+
chklogger.logger.error(str(e))
455+
continue
448456

449457
def get_compinfos(self) -> List["CCompInfo"]:
450458
return self.cfileglobals.get_compinfos()
@@ -482,16 +490,28 @@ def get_callinstrs(self) -> List["CCallInstr"]:
482490

483491
def reload_spos(self) -> None:
484492
for fn in self.get_functions():
485-
fn.reload_spos()
493+
try:
494+
fn.reload_spos()
495+
except UF.CHCError as e:
496+
chklogger.logger.error(e.msg)
497+
continue
486498

487499
def reload_ppos(self) -> None:
488500
for fn in self.get_functions():
489-
fn.reload_ppos()
501+
try:
502+
fn.reload_ppos()
503+
except UF.CHCError as e:
504+
chklogger.logger.error(e.msg)
505+
continue
490506

491507
def get_ppos(self) -> List[CFunctionPO]:
492508
result: List[CFunctionPO] = []
493509
for fn in self.get_functions():
494-
result.extend(fn.get_ppos())
510+
try:
511+
result.extend(fn.get_ppos())
512+
except UF.CHCError as e:
513+
chklogger.logger.error(str(e))
514+
continue
495515
return result
496516

497517
def get_open_ppos(self) -> List[CFunctionPO]:
@@ -521,7 +541,11 @@ def get_ppos_delegated(self) -> List[CFunctionPO]:
521541
def get_spos(self) -> List[CFunctionPO]:
522542
result: List[CFunctionPO] = []
523543
for fn in self.get_functions():
524-
result.extend(fn.get_spos())
544+
try:
545+
result.extend(fn.get_spos())
546+
except UF.CHCError as e:
547+
chklogger.logger.error(str(e))
548+
continue
525549
return result
526550

527551
def get_line_ppos(self) -> Dict[int, Dict[str, Any]]:

chc/app/CFunction.py

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,10 @@ def get_contract_condition_violations(self) -> List[Tuple[str, str]]:
446446
def update_spos(self) -> None:
447447
if self.selfignore():
448448
return
449-
self.proofs.update_spos()
449+
try:
450+
self.proofs.update_spos()
451+
except UF.CHCError as e:
452+
chklogger.logger.error(str(e))
450453

451454
def collect_post_assumes(self) -> None:
452455
"""For all call sites collect postconditions from callee's contracts and add as assume."""
@@ -479,19 +482,25 @@ def collect_post(self) -> None:
479482
cfuncontract.add_postrequest(tgtpostcondition)
480483

481484
def save_spos(self) -> None:
482-
self.proofs.save_spos()
485+
try:
486+
self.proofs.save_spos()
487+
except UF.CHCError as e:
488+
chklogger.logger.error(str(e))
483489

484490
def save_pod(self) -> None:
485491
cnode = ET.Element("function")
486492
cnode.set("name", self.name)
487-
self.podictionary.write_xml(cnode)
488-
UF.save_pod_file(
489-
self.targetpath,
490-
self.projectname,
491-
self.cfilepath,
492-
self.cfilename,
493-
self.name,
494-
cnode)
493+
try:
494+
self.podictionary.write_xml(cnode)
495+
UF.save_pod_file(
496+
self.targetpath,
497+
self.projectname,
498+
self.cfilepath,
499+
self.cfilename,
500+
self.name,
501+
cnode)
502+
except UF.CHCError as e:
503+
chklogger.logger.error(str(e))
495504

496505
def reload_ppos(self) -> None:
497506
self.proofs.reload_ppos()

0 commit comments

Comments
 (0)