OSDN Git Service

[Support] Fix return type deduction in RetryAfterSignal
authorPavel Labath <labath@google.com>
Thu, 22 Jun 2017 13:55:54 +0000 (13:55 +0000)
committerPavel Labath <labath@google.com>
Thu, 22 Jun 2017 13:55:54 +0000 (13:55 +0000)
commitfc01a4a7c8bbbc7df414bbbcf41f9536e6aaebb9
treef3946278414274f2af09bc32825d5889f3ad14f7
parentfb1808c254466ff19590b01e0a7e74356135fb74
[Support] Fix return type deduction in RetryAfterSignal

The default value of the ResultT template argument (which was there only
to avoid spelling out the long std::result_of template multiple times)
was being overriden by function call template argument deduction. This
manifested itself as a compiler error when calling the function as
FILE *X = RetryAfterSignal(nullptr, fopen, ...)
because the function would try to assign the result of fopen to
nullptr_t, but a more insidious side effect was that
RetryAfterSignal(-1, read, ...) would return "int" instead of "ssize_t",
losing precision along the way.

I fix this by having the function take the argument in a way that
prevents argument deduction from kicking in and add a test that makes
sure the return type is correct.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@306003 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Support/Errno.h
unittests/Support/ErrnoTest.cpp