Fix support for routines taking no arguments.
Change-Id: I678f4c94d140bb5cd66569336b2813b8c7c0e075
Reviewed-on: https://swiftshader-review.googlesource.com/5781
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/Reactor/Nucleus.hpp b/src/Reactor/Nucleus.hpp
index 9aa24be..d4148f6 100644
--- a/src/Reactor/Nucleus.hpp
+++ b/src/Reactor/Nucleus.hpp
@@ -2526,12 +2526,17 @@
Routine *operator()(const wchar_t *name, ...);
- private:
+ protected:
Nucleus *core;
llvm::Function *function;
std::vector<llvm::Type*> arguments;
};
+ template<typename Return>
+ class Function<Return()> : public Function<Return(Void)>
+ {
+ };
+
template<int index, typename Return, typename... Arguments>
Argument<typename ArgI<index, Arguments...>::Type> Arg(Function<Return(Arguments...)> &function)
{
@@ -2978,7 +2983,10 @@
llvm::Type *types[] = {Arguments::getType()...};
for(llvm::Type *type : types)
{
- arguments.push_back(type);
+ if(type != Void::getType())
+ {
+ arguments.push_back(type);
+ }
}
function = Nucleus::createFunction(Return::getType(), arguments);