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);