From: Dylan McKay Date: Sun, 5 Feb 2017 09:53:45 +0000 (+0000) Subject: [AVR] Support zero-sized arguments in defined methods X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=10348c4bad8df2f1a0b43d732f8608e799bda54d;p=llvm [AVR] Support zero-sized arguments in defined methods It is sufficient to skip emission of these arguments as we have nothing to actually pass through the function call. The AVR-GCC reference has nothing to say about zero-sized arguments, presumably because C/C++ doesn't support them. This means we don't have to worry about ABI differences. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@294119 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/AVR/AVRISelLowering.cpp b/lib/Target/AVR/AVRISelLowering.cpp index 07fc3f6890b..fa2a3918206 100644 --- a/lib/Target/AVR/AVRISelLowering.cpp +++ b/lib/Target/AVR/AVRISelLowering.cpp @@ -932,6 +932,12 @@ static void analyzeStandardArguments(TargetLowering::CallLoweringInfo *CLI, bool UsesStack = false; for (unsigned i = 0, pos = 0, e = Args.size(); i != e; ++i) { unsigned Size = Args[i]; + + // If we have a zero-sized argument, don't attempt to lower it. + // AVR-GCC does not support zero-sized arguments and so we need not + // worry about ABI compatibility. + if (Size == 0) continue; + MVT LocVT = (IsCall) ? (*Outs)[pos].VT : (*Ins)[pos].VT; // If we have plenty of regs to pass the whole argument do it.