]> granicus.if.org Git - clang/commit
[Win64] Don't widen integer literal zero arguments to unprototyped function calls
authorReid Kleckner <rnk@google.com>
Tue, 3 Jan 2017 21:23:35 +0000 (21:23 +0000)
committerReid Kleckner <rnk@google.com>
Tue, 3 Jan 2017 21:23:35 +0000 (21:23 +0000)
commit4c4d0ce8a1bbf37c5450bf7bb236294257793265
tree2635cc146687d035083ab90e5cd618a2f9e6441c
parent046076f93b93653f1eb8a9c6851cf7f1616d1711
[Win64] Don't widen integer literal zero arguments to unprototyped function calls

The special case to widen the integer literal zero when passed to
variadic function calls should only apply to variadic functions, not
unprototyped functions. This is consistent with what MSVC does. In this
test case, MSVC uses a 4-byte store to pass the 5th argument to 'kr' and
an 8-byte store to pass the zero to 'v':

  void v(int, ...);
  void kr();
  void f(void) {
    v(1, 2, 3, 4, 0);
    kr(1, 2, 3, 4, 0);
  }

Aaron Ballman discovered this issue in https://reviews.llvm.org/D28166

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290906 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/CodeGenFunction.h
test/CodeGen/variadic-null-win64.c