Commit Graph

4573 Commits

Author SHA1 Message Date
Reid Kleckner dc281ceff8 [Windows] Convert from UTF-8 to UTF-16 when writing to a Windows console
Summary:
Calling WriteConsoleW is the most reliable way to print Unicode
characters to a Windows console.

If binary data gets printed to the console, attempting to re-encode it
shouldn't be a problem, since garbage in can produce garbage out.

This breaks printing strings in the local codepage, which WriteConsoleA
knows how to handle. For example, this can happen when user source code
is encoded with the local codepage, and an LLVM tool quotes it while
emitting a caret diagnostic. This is unfortunate, but well-behaved tools
should validate that their input is UTF-8 and escape non-UTF-8
characters before sending them to raw_fd_ostream. Clang already does
this, but not all LLVM tools do this.

One drawback to the current implementation is printing a string a byte
at a time doesn't work. Consider this LLVM code:
  for (char C : MyStr) outs() << C;

Because outs() is now unbuffered, we wil try to convert each byte to
UTF-16, which will fail. However, this already didn't work, so I think
we may as well update callers that do that as we find them to print
complete portions of strings. You can see a real example of this in my
patch to SourceMgr.cpp

Fixes PR38669 and PR36267.

Reviewers: zturner, efriedma

Subscribers: llvm-commits, hiraditya

Differential Revision: https://reviews.llvm.org/D51558

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341433 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-05 00:08:56 +00:00
David Bolvansky 810335c3b5 Set console mode when -fansi-escape-codes is enabled
Summary:
Windows console now supports supports ANSI escape codes, but we need to enable it using SetConsoleMode with ENABLE_VIRTUAL_TERMINAL_PROCESSING flag.

Fixes https://bugs.llvm.org/show_bug.cgi?id=38817


Tested on Windows 10, screenshot:
https://i.imgur.com/bqYq0Uy.png

Reviewers: zturner, chandlerc

Reviewed By: zturner

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D51611

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341396 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 19:23:05 +00:00
Kristina Brooks 81a94dc637 Do not leak the Mach host port in sys::getHostCPUName()
Patch by rsesek (Robert Sesek)



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341357 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 10:54:09 +00:00
Alexandre Ganea 0444f57668 [DebugInfo] Common behavior for error types
Following D50807, and heading towards D50664, this intermediary change does the following:

1. Upgrade all custom Error types in llvm/trunk/lib/DebugInfo/ to use the new StringError behavior (D50807).
2. Implement std::is_error_code_enum and make_error_code() for DebugInfo error enumerations.
3. Rename GenericError -> PDBError (the file will be renamed in a subsequent commit)
4. Update custom error messages to follow the same formatting: (\w\s*)+\.
5. Keep generic "file not found" (ENOENT) errors as they are in PDB code. Previously, there used to be a custom enumeration for that purpose.
6. Remove a few extraneous LF in log() implementations. Printing LF is a responsability at a higher level, not at the error level.

Differential Revision: https://reviews.llvm.org/D51499

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341228 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-31 17:41:58 +00:00
Tim Northover be4b3b1eba Hashing: use 64-bit seed for hashing on all platforms.
get_execution_seed returns a size_t which varies across platforms, but its
users actually always feed it into a uint64_t role so it makes sense to be
consistent.

Mostly this is just a tidy-up, but it also apparently allows PCH files to be
shared between Clang compilers built for 32-bit and 64-bit hosts.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341113 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-30 20:28:32 +00:00
Alexandre Ganea 0993f24765 [Error] Add FileError helper; upgrade StringError behavior
FileError is meant to encapsulate both an Error and a file name/path. It should be used in cases where an Error occurs deep down the call chain, and we want to return it to the caller along with the file name.

StringError was updated to display the error messages in different ways. These can be:

1. display the error_code message, and convert to the same error_code (ECError behavior)
2. display an arbitrary string, and convert to a provided error_code (current StringError behavior)
3. display both an error_code message and a string, in this order; and convert to the same error_code

These behaviors can be triggered depending on the constructor. The goal is to use StringError as a base class, when a library needs to provide a explicit Error type.

Differential Revision: https://reviews.llvm.org/D50807

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341064 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-30 13:10:42 +00:00
Peter Collingbourne acf390b1ed Start reserving x18 by default on Android targets.
Differential Revision: https://reviews.llvm.org/D45588

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340889 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-29 01:38:47 +00:00
Hans Wennborg 601e525007 Use a lambda for calls to ::open in RetryAfterSignal
In Bionic, open can be overloaded for _FORTIFY_SOURCE support, causing
compile errors of RetryAfterSignal due to overload resolution. Wrapping
the call in a lambda avoids this.

Based on a patch by Chih-Wei Huang <cwhuang@linux.org.tw>!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340751 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-27 15:55:39 +00:00
Chandler Carruth 8c9f47fdf1 Avoid specializing a variadic member template in a way that seems to not
agree with MSVC.

There isn't actually a need for specialization here as we can write the
code generically and just have a test that will fold away as a constant.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340700 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-26 09:17:49 +00:00
Simon Pilgrim ad6c4284cd Remove superfluous semicolon. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340686 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-25 16:49:35 +00:00
Eric Christopher 19181fbcf2 This patch adds support to LLVM for writing HermitCore (https://hermitcore.org) ELF binaries.
HermitCore is a POSIX-compatible kernel for running a single application in an isolated environment to get maximum performance and predictable runtime behavior. It can either be used bare-metal on hardware or a VM (Unikernel) or side by side to an existing Linux system (Multikernel).
Due to the latter feature, HermitCore binaries are marked with ELFOSABI_STANDALONE to let the Linux ELF loader distinguish them from regular Unix/Linux binaries and load them using the HermitCore "proxy" tool.

Patch by Colin Finck!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340675 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-25 01:08:18 +00:00
Richard Smith fc721a89bb Allow demangler's node allocator to fail, and bail out of the entire
demangling process when it does.

Use this to support a "lookup" query for the mangling canonicalizer that
does not create new nodes. This could also be used to implement
demangling with a fixed-size temporary storage buffer.

Reviewers: erik.pilkington

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D51003

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340670 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-24 23:26:05 +00:00
Richard Smith a5beadf824 Add data structure to form equivalence classes of mangled names.
Summary:
Given a set of equivalent name fragments, this mechanism determines whether two
mangled names are equivalent. The intent is to use this for fuzzy matching of
profile data against the program after certain refactorings are performed.

Reviewers: erik.pilkington, dlj

Subscribers: mgorny, llvm-commits

Differential Revision: https://reviews.llvm.org/D50935

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340663 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-24 22:31:51 +00:00
Martin Storsjo 5cd279703c [Support] Allow discarding a FileOutputBuffer without removing the memory mapping
Differential Revision: https://reviews.llvm.org/D51095

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340634 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-24 18:36:22 +00:00
Reid Kleckner db0f76949f Make LLVM_ENABLE_CRASH_DUMPS set a variable default
That way users can set the default to true, but then disable core dumps
from certain apps that link support.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340588 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-23 22:58:56 +00:00
Douglas Yung 65dbe3021d Fixup AreCoreFilesPrevented() to consider first LLVM_ENABLE_CRASH_DUMPS and secondly coreFilesPrevented.
The previous change ignored the latter resulting in crash dumps being generated when LLVM_ENABLE_CRASH_DUMPS was
set, but coreFilesPrevented was true.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340561 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-23 18:20:13 +00:00
Sven van Haastregt 8d709d9d43 [Support] Fix some Wundef warnings
For the _WIN32 macro, it is the definedness that matters rather than
the value.  Most uses of the macro already rely on the definedness.
This commit fixes the few remaining uses that relied on the value.

Differential Revision: https://reviews.llvm.org/D51105


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340520 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-23 09:42:58 +00:00
JF Bastien 33aee6f125 Improve incompatible triple error
When complaining that the triple is incompatible with all targets, print out the triple not just a generic error about triples not matching.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340509 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-23 03:40:31 +00:00
Bob Haarman b10c5f9f68 [Support][CachePruning] prune least recently accessed files first
Summary:
Before this change, pruning order was based on size. This changes it
to be based on time of last use instead, preferring to keep recently
used files and prune older ones.

Reviewers: pcc, rnk, espindola

Reviewed By: rnk

Subscribers: emaste, arichardson, hiraditya, steven_wu, dexonsmith, llvm-commits

Differential Revision: https://reviews.llvm.org/D51062

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340374 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-22 00:52:16 +00:00
Matt Arsenault 6b2c78bfb0 Try to fix bot build failure
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340296 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-21 16:24:56 +00:00
Matt Arsenault 60b9afadc6 AMDGPU: Partially move target handling code from clang to TargetParser
A future change in clang necessitates access of this information
from the driver, so move this into a common place.

Try to mimic something resembling the API the other targets are
using here.

One thing I'm uncertain about is how to split amdgcn and r600
handling. Here I've mostly duplicated the functions for each,
while keeping the same enums. I think this is a bit awkward
for the features which don't matter for amdgcn.

It's also a bit messy that this isn't a complete set of
subtarget features. This is just the minimum set needed
for the driver code. For example building the list of
subtarget feature names is still in clang.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340291 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-21 16:13:01 +00:00
Reid Kleckner 7e4b0fae2e Add cmake option to disable minidumps, default it to off
Since crash dumping landed in r268519, May 2016, I have not once seen
anyone use an uploaded minidump to debug a compiler crash. Therefore,
I'm turning this off by default. The dumps clutter up user and buildbot
temp directories. Each file is only about 56KB, but it adds up.

In the context of clang, the extra line about the minidump confuses
users, when what we really want from them is the pre-processed source
code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340185 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-20 16:49:54 +00:00
Haojian Wu ce61d9b983 Fix an undefined behavior when storing an empty StringRef.
Summary: Passing a nullptr to memcpy is UB.

Reviewers: ioeric

Subscribers: llvm-commits, cfe-commits

Differential Revision: https://reviews.llvm.org/D50966

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340170 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-20 13:12:54 +00:00
George Burgess IV 68cedc8ad5 [DebugCounters] don't do redundant map lookups; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340104 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-17 22:34:04 +00:00
Bernard Ogden c30814805c [ARM/AArch64] Support FP16 +fp16fml instructions
Add +fp16fml feature for new FP16 instructions, which are a
mandatory part of FP16 from v8.4-A and an optional part of FP16
from v8.2-A. It doesn't seem to be possible to model this in
LLVM, but the relationship between the options is handled by
the related clang patch.

In keeping with what I think is the usual practice, the fp16fml
extension is accepted regardless of base architecture version.

Builds on/replaces Sjoerd Meijer's patch to add these instructions at
https://reviews.llvm.org/D49839.

Differential Revision: https://reviews.llvm.org/D50228



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340013 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-17 11:29:49 +00:00
Graydon Hoare 7de28914d7 [Support] Add a public API to allow clearing all (static) timer groups.
Summary:
Formerly, all timer groups were automatically cleared when printed out. In
https://reviews.llvm.org/rL324788 this behaviour was changed to not-clearing
timers on printout, to allow printing timers more than once, but as a result
clients (specifically Swift) that relied on the clear-on-print behaviour to
inhibit duplicate timer printing on shutdown were broken.

Rather than revert that change, this change adds a new API that enables
clients that _want_ to clear all timers to do so explicitly.

Reviewers: george.karpenkov, thegameg

Reviewed By: george.karpenkov

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D50874

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@339980 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-17 04:13:19 +00:00
Simon Pilgrim 547d94c020 [ADT] Replace APInt::WORD_MAX with APInt::WORDTYPE_MAX
The windows SDK defines WORD_MAX, so any poor soul that wants to use LLVM in a project that depends on the windows SDK gets a build error.

Given that it actually describes the maximal value of WordType, it actually fits even better than WORD_MAX

Patch by: @miscco

Differential Revision: https://reviews.llvm.org/D50777

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@339863 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-16 11:08:23 +00:00
Lang Hames e0dc5c1ea2 [Support] Add a basic C API for llvm::Error.
Summary:
The C-API supports consuming errors, converting an error to a string error
message, and querying an error's type. Other LLVM C APIs that wish to use
llvm::Error can supply error-type-id checkers and custom
error-to-structured-type converters for any custom errors they provide.

Reviewers: bogner, zturner, labath, dblaikie

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D50716

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@339802 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-15 18:42:11 +00:00
Jordan Rupprecht f0b29b88a4 [Support] NFC: Allow modifying access/modification times independently in sys::fs::setLastModificationAndAccessTime.
Summary:
Add an overload to sys::fs::setLastModificationAndAccessTime that allows setting last access and modification times separately. This will allow tools to use this API when they want to preserve both the access and modification times from an input file, which may be different.

Also note that both the POSIX (futimens/futimes) and Windows (SetFileTime) APIs take the two timestamps in the order of (1) access (2) modification time, so this renames the method to "setLastAccessAndModificationTime" to make it clear which timestamp is which.

For existing callers, the 1-arg overload just sets both timestamps to the same thing.

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D50521

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@339628 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-13 23:03:45 +00:00
Petr Hosek 85ffa199e1 [ADT] Normalize empty triple components
LLVM triple normalization is handling "unknown" and empty components
differently; for example given "x86_64-unknown-linux-gnu" and
"x86_64-linux-gnu" which should be equivalent, triple normalization
returns "x86_64-unknown-linux-gnu" and "x86_64--linux-gnu". autoconf's
config.sub returns "x86_64-unknown-linux-gnu" for both
"x86_64-linux-gnu" and "x86_64-unknown-linux-gnu". This changes the
triple normalization to behave the same way, replacing empty triple
components with "unknown".

This addresses PR37129.

Differential Revision: https://reviews.llvm.org/D50219

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@339294 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-08 22:23:57 +00:00
Aditya Nandakumar 5718b6f1bc Refactor FileCheck to make it usable as an API
https://reviews.llvm.org/D50283
reviewed by bogner

This patch refactors FileCheck's implementation into support so it can
be used from C++ in other places (Unit tests).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@339192 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-07 21:58:49 +00:00
Owen Reynolds 5b8a7e263c Fix raw_fd_ostream::write_impl hang due to an infinite loop with large output
On windows when raw_fd_ostream::write_impl calls write, a 32 bit input is required for character count. As a variable with size_t is used for this argument, on x64 integral demotion occurs. In the case of large files an infinite loop follows. 
See: https://bugs.llvm.org/show_bug.cgi?id=37926
This fix allows the output of files larger than the previous int32 limit.

Differential Revision: https://reviews.llvm.org/D48948


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@339027 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-06 16:21:41 +00:00
Tim Northover 06ef179153 Fix modules build with different technique to suppress Knuth debugging
Currently we use #pragma push_macro(LLVM_DEBUG) to fiddle with the LLVM_DEBUG
macro so that we can silence debugging the Knuth division algorithm unless it's
actually desired. Unfortunately this is incompatible with enabling modules
while building LLVM (via LLVM_ENABLE_MODULES=ON), probably due to a bug being
fixed by D33004.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@339009 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-06 11:43:11 +00:00
Rui Ueyama ec2a794578 Fix buildbot breakage.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338940 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-04 00:23:37 +00:00
Rui Ueyama 1090c4ba25 Use the same constants as zlib to represent compression level.
This change allows users pass compression level that was not listed
in the enum. Also, I think using different values than zlib's
compression levels was just confusing.

Differential Revision: https://reviews.llvm.org/D50196

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338939 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-04 00:13:13 +00:00
Fangrui Song bb272977e8 [Support] Don't initialize compressed buffer allocated by zlib::compress
resize() (zeroing) makes every allocated page resident. The actual size of the compressed buffer is usually much
smaller. Making every page resident is wasteful.

When linking a test binary with ~1.9GiB uncompressed debug info with LLD, this optimization decreases max RSS by ~1.5GiB.

Differential Revision: https://reviews.llvm.org/50223

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338913 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-03 19:37:49 +00:00
Jeremy Morse 8602af619e [Windows FS] Allow moving files in TempFile::keep
In r338216 / D49860 TempFile::keep was extended to allow keeping across
filesystems. The aim on Windows was to have this happen in rename_internal
using the existing system API. However, to fix an issue and preserve the
idea of "renaming" not being a move, put Windows keep-across-filesystem in
TempFile::keep.

Differential Revision: https://reviews.llvm.org/D50048



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338841 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-03 10:13:35 +00:00
George Burgess IV fbf5dde96b [Support] Add an enable bit to our DebugCounters
r337748 made us start incrementing DebugCounters all of the time. This
makes tsan unhappy in multithreaded environments.

Since it doesn't make much sense to use DebugCounters with multiple
threads, this patch makes us only count anything if the user passed a
-debug-counter option or if some other piece of code explicitly asks
for it (e.g. the pass in D50031).

The amount of global state here makes writing a unittest for this
behavior somewhat awkward. So, no test is provided.

Differential Revision: https://reviews.llvm.org/D50150


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338762 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-02 19:50:27 +00:00
Krzysztof Parzyszek 40eb37919a Unbreak build after r338758: specify lambda return type explicitly
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338760 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-02 19:38:18 +00:00
Krzysztof Parzyszek 5c1bd30b86 [SCEV] Properly solve quadratic equations
Differential Revision: https://reviews.llvm.org/D48283


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338758 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-02 19:13:35 +00:00
Bob Haarman 710aab8e4f [Support] [NFC] change comment about retries in createUniqueEntity
Rewording as requested on D50126 after the change was pushed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338755 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-02 18:27:21 +00:00
Bob Haarman 15bc9858ad [Support] fix TempFile infinite loop and permission denied errors
Summary:
On Windows, TempFile::create() was prone to failing with permission
denied errors when a process created many tempfiles without providing
a model large enough to accommodate them. There was also a problem
with createUniqueEntity getting into an infinite loop when all names
permitted by the model are in use. This change fixes both of these
problems and adds a unit test for them.

Reviewers: pcc, rnk, zturner

Reviewed By: zturner

Subscribers: inglorion, hiraditya, llvm-commits

Differential Revision: https://reviews.llvm.org/D50126

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338745 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-02 17:41:38 +00:00
Rui Ueyama 2c3c78e685 Make ICF log output order deterministic.
This patch does the same thing as r338153 for COFF.
Note that this patch affects only the order of log messages.
The output file is already deterministic.

Differential Revision: https://reviews.llvm.org/D50023

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338406 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-31 18:04:58 +00:00
Fangrui Song af7b1832a0 Remove trailing space
sed -Ei 's/[[:space:]]+$//' include/**/*.{def,h,td} lib/**/*.{cpp,h}

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338293 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-30 19:41:25 +00:00
Jonas Devlieghere 58d4a39f63 [dsymutil] Simplify temporary file handling.
Dsymutil's update functionality was broken on Windows because we tried
to rename a file while we're holding open handles to that file. TempFile
provides a solution for this through its keep(Twine) method. This patch
changes dsymutil to make use of that functionality.

Differential revision: https://reviews.llvm.org/D49860

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338216 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-29 14:56:15 +00:00
Fangrui Song 134080471c [Support] Remove unnecessary MemoryBuffer::anchor (where the destructor serves as the key function)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338175 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-27 23:12:11 +00:00
Fangrui Song 13b09222ff [Support] Use unsigned char for xxHash 64-bit
Before, the last 3 bytes were char-signedness dependent.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338128 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-27 16:01:09 +00:00
James Henderson ec700d4f8f Revert r338027 to pacify build bot
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338035 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-26 15:54:53 +00:00
Michael Kruse 6069e66e2c [ADT] Replace std::isprint by llvm::isPrint.
The standard library functions ::isprint/std::isprint have platform-
and locale-dependent behavior which makes LLVM's output less
predictable. In particular, regression tests my fail depending on the
implementation of these functions.

Implement llvm::isPrint in StringExtras.h with a standard behavior and
replace all uses of ::isprint/std::isprint by a call it llvm::isPrint.
The function is inlined and does not look up language settings so it
should perform better than the standard library's version.

Such a replacement has already been done for isdigit, isalpha, isxdigit
in r314883. gtest does the same in gtest-printers.cc using the following
justification:

    // Returns true if c is a printable ASCII character.  We test the
    // value of c directly instead of calling isprint(), which is buggy on
    // Windows Mobile.
    inline bool IsPrintableAscii(wchar_t c) {
      return 0x20 <= c && c <= 0x7E;
    }

Similar issues have also been encountered by Julia:
https://github.com/JuliaLang/julia/issues/7416

I noticed the problem myself when on Windows isprint('\t') started to
evaluate to true (see https://stackoverflow.com/questions/51435249) and
thus caused several unit tests to fail. The result of isprint doesn't
seem to be well-defined even for ASCII characters. Therefore I suggest
to replace isprint by a platform-independent version.

Differential Revision: https://reviews.llvm.org/D49680

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338034 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-26 15:31:41 +00:00
James Henderson 6678e03e56 Fix raw_fd_ostream::write_impl hang with large output
On Windows when raw_fd_ostream::write_impl calls write, a 32 bit input
is required for character count. As a variable with size_t is used for
this argument on x64 integral demotion occurs. In the case of large
files an infinite loop follows.

See PR37926.

This fix allows the output of files larger than previous int32 limit.

Differential Revision: https://reviews.llvm.org/D48948

Patch by Owen Reynolds

Reviewed by: zturner


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338027 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-26 13:22:07 +00:00