@@ -585,14 +585,15 @@ def index_init(self, init: CInitInfo, fid: int = -1) -> int:
585585
586586 if init .is_single :
587587 init = cast ("CSingleInitInfo" , init )
588- args = [self .dictionary .index_exp (init .exp )]
588+ args = [self .dictionary .index_exp (init .exp , fid = fid )]
589589 return self .mk_single_init_index (init .tags , args )
590590
591591 if init .is_compound :
592592 init = cast ("CCompoundInitInfo" , init )
593593 gtype = self .dictionary .index_typ (init .typ )
594594 oinits : List [int ] = [
595- self .index_offset_init (x ) for x in init .offset_initializers ]
595+ self .index_offset_init (x , fid = fid )
596+ for x in init .offset_initializers ]
596597 args = [gtype ] + oinits
597598 return self .mk_compound_init_index (init .tags , args )
598599
@@ -601,8 +602,8 @@ def index_init(self, init: CInitInfo, fid: int = -1) -> int:
601602
602603 def index_offset_init (self , oinit : COffsetInitInfo , fid : int = - 1 ) -> int :
603604 args : List [int ] = [
604- self .dictionary .index_offset (oinit .offset ),
605- self .index_init (oinit .initializer )]
605+ self .dictionary .index_offset (oinit .offset , fid = fid ),
606+ self .index_init (oinit .initializer , fid = fid )]
606607 return self .mk_offset_init_index (oinit .tags , args )
607608
608609 def index_varinfo_vid (self , varref : VarReference ) -> Optional [int ]:
@@ -631,7 +632,19 @@ def make_global_varinfo(self, fid: int, varinfo: CVarInfo) -> None:
631632 vtype = self .dictionary .get_typ (vtypeix )
632633 if varinfo .has_initializer ():
633634 vinit = varinfo .initializer
634- gvinit = [self .index_init (vinit , fid = fid )]
635+ try :
636+ gvinit = [self .index_init (vinit , fid = fid )]
637+ except UF .CHError as e :
638+ chklogger .logger .warning (
639+ ("Global variable initializer for %s "
640+ + "(vid: %d, line: %s, fid: %d) "
641+ + " could not be indexed: %s" ),
642+ varinfo .vname ,
643+ varinfo .vid ,
644+ (varinfo .vdecl .line if varinfo .vdecl is not None else - 1 ),
645+ fid ,
646+ str (e ))
647+ gvinit = []
635648 else :
636649 gvinit = []
637650 tags = [vname ]
@@ -669,6 +682,15 @@ def f(index: int, tags: List[str], args: List[int]) -> CVarInfo:
669682 gvarinfo .vname )
670683
671684 def index_file_varinfos (self , fid : int , varinfos : List [CVarInfo ]) -> None :
685+ chklogger .logger .debug (
686+ "Index %d file varinfos for fid: %d (%s)" ,
687+ len (varinfos ), fid ,
688+ ", " .join (v .vname
689+ + "("
690+ + str (v .vid )
691+ + ", line: "
692+ + str (v .line if v .vdecl is not None else "?" )
693+ + ")" for v in varinfos ))
672694 if len (varinfos ) > 0 :
673695 self .vid2gvid [fid ] = {}
674696 for v in varinfos :
0 commit comments