[clang] #101784 part 1: introduce ctyped in an independent manner (PR #101941)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Aug 7 19:22:42 PDT 2024
TsXor wrote:
I still think we can still do something to stop #101548 from happening again. Here is a script that can locate all `conf.lib.*` calls and find if any of them use an undeclared symbol in `functionList`. Maybe we can add it to test.
```python
import ast
from typing import Optional, Set
from clang import cindex
class CCallVisitor(ast.NodeVisitor):
lib_node: str
attr_set: Set[str]
missing_attr: list[str]
def __init__(self, lib_node: str, attr_set: Set[str]):
self.lib_node = lib_node
self.attr_set = attr_set
self.missing_attr = []
def check_target_call(self, node: ast.expr) -> Optional[str]:
if not isinstance(node, ast.Attribute):
return None
if ast.unparse(node.value) != self.lib_node:
return None
return node.attr
def visit_Call(self, node: ast.Call) -> None:
attr = self.check_target_call(node.func)
if attr is not None and attr not in self.attr_set:
self.missing_attr.append(attr)
with open(cindex.__file__, 'rt') as modfp:
modtxt = modfp.read()
modast = ast.parse(modtxt, mode='exec')
func_checker = CCallVisitor(
'conf.lib',
{fn[0] for fn in cindex.functionList},
)
func_checker.visit(modast)
print(func_checker.missing_attr)
```
https://github.com/llvm/llvm-project/pull/101941
More information about the cfe-commits
mailing list