1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 // Copyright 2018 Jacob Lifshay
4 // we have a tests module inside a tests module to have rls parse this tests.rs file
5 #[cfg_attr(feature = "cargo-clippy", allow(clippy::module_inception))]
7 use shader_compiler::backend::types::TypeBuilder;
8 use shader_compiler::backend::*;
11 fn make_compiler() -> impl Compiler {
12 ::LLVM_7_SHADER_COMPILER
17 type GeneratedFunctionType = unsafe extern "C" fn(u32);
18 #[derive(Copy, Clone, Hash, Eq, PartialEq, Debug)]
23 impl CompilerUser for Test {
24 type FunctionKey = FunctionKey;
26 fn create_error(message: String) -> String {
29 fn run<'a, C: Context<'a>>(
32 ) -> Result<CompileInputs<'a, C, FunctionKey>, String> {
33 let type_builder = context.create_type_builder();
34 let mut module = context.create_module("test_module");
35 let mut function = module.add_function(
37 type_builder.build::<GeneratedFunctionType>(),
39 let builder = context.create_builder();
40 let builder = builder.attach(function.append_new_basic_block(None));
41 builder.build_return(None);
42 let module = module.verify().unwrap();
45 callable_functions: vec![(FunctionKey::Function, function)]
51 let compiled_code = make_compiler().run(Test, Default::default()).unwrap();
52 let function = compiled_code.get(&FunctionKey::Function).unwrap();
54 let function: GeneratedFunctionType = mem::transmute(function);
61 const NAMES: &[&str] = &["main", "abc123-$._"];
62 type GeneratedFunctionType = unsafe extern "C" fn(u32);
63 #[derive(Copy, Clone, Hash, Eq, PartialEq, Debug)]
65 impl CompilerUser for Test {
66 type FunctionKey = String;
68 fn create_error(message: String) -> String {
71 fn run<'a, C: Context<'a>>(
74 ) -> Result<CompileInputs<'a, C, String>, String> {
75 let type_builder = context.create_type_builder();
76 let mut module = context.create_module("test_module");
77 let mut functions = Vec::new();
78 let mut detached_builder = context.create_builder();
81 module.add_function(name, type_builder.build::<GeneratedFunctionType>());
82 let builder = detached_builder.attach(function.append_new_basic_block(None));
83 detached_builder = builder.build_return(None);
84 functions.push((name.to_string(), function));
86 let module = module.verify().unwrap();
89 callable_functions: functions.into_iter().collect(),
93 let compiled_code = make_compiler().run(Test, Default::default()).unwrap();
94 let function = compiled_code.get(&"main".to_string()).unwrap();
96 let function: GeneratedFunctionType = mem::transmute(function);