diff options
author | Pavel Labath <labath@google.com> | 2017-06-22 13:55:54 +0000 |
---|---|---|
committer | Pavel Labath <labath@google.com> | 2017-06-22 13:55:54 +0000 |
commit | fafedb11cea07375b55ea900132d19b1970662d3 (patch) | |
tree | f5e3a9651f7c89e1eb591645887fa10125184552 /llvm/lib/Support/MemoryBuffer.cpp | |
parent | 25374a6849fa232169ce876d4bf18e0f4c99ef06 (diff) | |
download | llvm-fafedb11cea07375b55ea900132d19b1970662d3.zip llvm-fafedb11cea07375b55ea900132d19b1970662d3.tar.gz llvm-fafedb11cea07375b55ea900132d19b1970662d3.tar.bz2 |
[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.
llvm-svn: 306003
Diffstat (limited to 'llvm/lib/Support/MemoryBuffer.cpp')
0 files changed, 0 insertions, 0 deletions