Skip to content

Conversation

@zhscn
Copy link
Contributor

@zhscn zhscn commented Nov 30, 2025

No description provided.

@zhscn
Copy link
Contributor Author

zhscn commented Nov 30, 2025

Basic example of find all function references:

// requires SOUFFLE_DOMAIN_64BIT build .type Usr <: unsigned .type File <: symbol .type Name <: symbol .type Line <: number .type Kind <: symbol .type Role <: symbol .decl function(usr: Usr, name: Name, file: File, line: Line, kind: Kind) .input function(IO=file, filename="output/function.facts") .decl type(usr: Usr, name: Name, file: File, line: Line, kind: Kind) .input type(IO=file, filename="output/type.facts") .decl variable(usr: Usr, name: Name, file: File, line: Line) .input variable(IO=file, filename="output/variable.facts") .decl calls(caller: Usr, callee: Usr) .input calls(IO=file, filename="output/calls.facts") .decl inherits(derived: Usr, base: Usr) .input inherits(IO=file, filename="output/inherits.facts") .decl overrides(derived: Usr, base: Usr) .input overrides(IO=file, filename="output/overrides.facts") .decl member_func(type: Usr, func: Usr) .input member_func(IO=file, filename="output/member_func.facts") .decl member_var(type: Usr, var: Usr) .input member_var(IO=file, filename="output/member_var.facts") .decl has_type(var: Usr, type: Usr) .input has_type(IO=file, filename="output/has_type.facts") .decl reference(usr: Usr, file: File, line: Line, role: Role) .input reference(IO=file, filename="output/reference.facts") .decl declaration(usr: Usr, file: File, line: Line) .input declaration(IO=file, filename="output/declaration.facts") .decl definition(usr: Usr, file: File, line: Line) .input definition(IO=file, filename="output/definition.facts") .decl includes(includer: File, includee: File) .input includes(IO=file, filename="output/includes.facts") .decl func_derived(base: Usr, derived: Usr) .input func_derived(IO=file, filename="output/func_derived.facts") .decl type_derived(base: Usr, derived: Usr) .input type_derived(IO=file, filename="output/type_derived.facts") .decl type_instances(type: Usr, instance: Usr) .input type_instances(IO=file, filename="output/type_instances.facts") // Query: Find all functions that call the target function .decl callers(caller_name: Name, caller_file: File, caller_line: Line) .output callers(IO=file, delimiter="\t", filename="output/callers.tsv") callers(caller_name, caller_file, caller_line) :- function(target_usr, target_name, _, _, _), contains("siphash", target_name), calls(caller_usr, target_usr), function(caller_usr, caller_name, caller_file, caller_line, _). // output: // uint64_t ccls::hashUsr(llvm::StringRef s)	ccls/src/utils.cc	80 
@zhscn
Copy link
Contributor Author

zhscn commented Nov 30, 2025

The facts size of llvm-project(with clang and clang-tools-extra enabled):

❯ du -sh ./output 2.1G	./output ❯ du -sh ./output/* | sort -hr 1.4G	./output/reference.facts 209M	./output/variable.facts 209M	./output/definition.facts 145M	./output/calls.facts 54M	./output/has_type.facts 48M	./output/function.facts 45M	./output/type_instances.facts 18M	./output/includes.facts 18M	./output/declaration.facts 11M	./output/type.facts 8.1M	./output/member_func.facts 4.1M	./output/member_var.facts 2.1M	./output/type_derived.facts 2.1M	./output/func_derived.facts 1.1M	./output/overrides.facts 640K	./output/inherits.facts 
@zhscn zhscn force-pushed the facts branch 3 times, most recently from c37dbc6 to b983629 Compare December 1, 2025 01:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant