luoliwoshang / llgo

A Go compiler based on LLVM in order to better integrate Go with the C ecosystem including Python
Apache License 2.0
2 stars 0 forks source link

llcppg:unexpected llcppsigfetch index out of range in ubuntu #78

Open luoliwoshang opened 1 month ago

luoliwoshang commented 1 month ago

gogensig测试是否能正确跳过映射完成的头文件的生成时,在macos的本机测试能正常测试通过,在ubuntu的测试中,llcppsigfetch出现了out index of range的运行时错误。

CleanShot 2024-10-09 at 16 15 59

luoliwoshang commented 1 month ago

在llcppsigfetch中增加出现错误时的日志输出,以定位问题

luoliwoshang commented 3 weeks ago

问题出现于 __fsid_t 这个类型

 GetCurFile: found /usr/include/aarch64-linux-gnu/bits/types.h
 visitTop: Cursor: __fsid_t
  ProcessTypeDefDecl: CursorName: __fsid_t CursorKind: TypedefDecl CursorTypeKind: Typedef
panic: runtime error: index out of range

typesize.h

#define __FSID_T_TYPE       struct { int __val[2]; }
# define __STD_TYPE     typedef

types.h

__STD_TYPE  __FSID_T_TYPE __fsid_t;

展开后也就是

typedef  struct { int __val[2]; }  __fsid_t

但是通过 ./llcppsigfetch --extract "typedef struct { int __val[2]; } __fsid_t" -temp=true -cpp=false 后,发现并没有出现问题 经过调查问题出现在某个复杂类型在其他头文件中用宏定义,该步骤会有一个访问到源代码获取对应类型定义时的Token,根据token判断是否是一个实际上的匿名类型,问题即出现在这个步骤,当访问在另外一个文件中用宏定义的类型定义时,获取Token失败,返回的即是一个空切片,