summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Backporting 325651::upstream/release_50Simon Dardis2018-03-166-1/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r325651 | sdardis | 2018-02-21 00:05:05 +0000 (Wed, 21 Feb 2018) | 34 lines [mips] Spectre variant two mitigation for MIPSR2 This patch provides mitigation for CVE-2017-5715, Spectre variant two, which affects the P5600 and P6600. It provides the option -mindirect-jump=hazard, which instructs the LLVM backend to replace indirect branches with their hazard barrier variants. This option is accepted when targeting MIPS revision two or later. The migitation strategy suggested by MIPS for these processors is to use two hazard barrier instructions. 'jalr.hb' and 'jr.hb' are hazard barrier variants of the 'jalr' and 'jr' instructions respectively. These instructions impede the execution of instruction stream until architecturally defined hazards (changes to the instruction stream, privileged registers which may affect execution) are cleared. These instructions in MIPS' designs are not speculated past. These instructions are used with the option -mindirect-jump=hazard when branching indirectly and for indirect function calls. These instructions are defined by the MIPS32R2 ISA, so this mitigation method is not compatible with processors which implement an earlier revision of the MIPS ISA. Implementation note: I've opted to provide this as an -mindirect-jump={hazard,...} style option in case alternative mitigation methods are required for other implementations of the MIPS ISA in future, e.g. retpoline style solutions. Reviewers: atanasyan Differential Revision: https://reviews.llvm.org/D43487 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@327755 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r323155:Reid Kleckner2018-02-013-0/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r323155 | chandlerc | 2018-01-22 14:05:25 -0800 (Mon, 22 Jan 2018) | 133 lines Introduce the "retpoline" x86 mitigation technique for variant #2 of the speculative execution vulnerabilities disclosed today, specifically identified by CVE-2017-5715, "Branch Target Injection", and is one of the two halves to Spectre.. Summary: First, we need to explain the core of the vulnerability. Note that this is a very incomplete description, please see the Project Zero blog post for details: https://googleprojectzero.blogspot.com/2018/01/reading-privileged-memory-with-side.html The basis for branch target injection is to direct speculative execution of the processor to some "gadget" of executable code by poisoning the prediction of indirect branches with the address of that gadget. The gadget in turn contains an operation that provides a side channel for reading data. Most commonly, this will look like a load of secret data followed by a branch on the loaded value and then a load of some predictable cache line. The attacker then uses timing of the processors cache to determine which direction the branch took *in the speculative execution*, and in turn what one bit of the loaded value was. Due to the nature of these timing side channels and the branch predictor on Intel processors, this allows an attacker to leak data only accessible to a privileged domain (like the kernel) back into an unprivileged domain. The goal is simple: avoid generating code which contains an indirect branch that could have its prediction poisoned by an attacker. In many cases, the compiler can simply use directed conditional branches and a small search tree. LLVM already has support for lowering switches in this way and the first step of this patch is to disable jump-table lowering of switches and introduce a pass to rewrite explicit indirectbr sequences into a switch over integers. However, there is no fully general alternative to indirect calls. We introduce a new construct we call a "retpoline" to implement indirect calls in a non-speculatable way. It can be thought of loosely as a trampoline for indirect calls which uses the RET instruction on x86. Further, we arrange for a specific call->ret sequence which ensures the processor predicts the return to go to a controlled, known location. The retpoline then "smashes" the return address pushed onto the stack by the call with the desired target of the original indirect call. The result is a predicted return to the next instruction after a call (which can be used to trap speculative execution within an infinite loop) and an actual indirect branch to an arbitrary address. On 64-bit x86 ABIs, this is especially easily done in the compiler by using a guaranteed scratch register to pass the target into this device. For 32-bit ABIs there isn't a guaranteed scratch register and so several different retpoline variants are introduced to use a scratch register if one is available in the calling convention and to otherwise use direct stack push/pop sequences to pass the target address. This "retpoline" mitigation is fully described in the following blog post: https://support.google.com/faqs/answer/7625886 We also support a target feature that disables emission of the retpoline thunk by the compiler to allow for custom thunks if users want them. These are particularly useful in environments like kernels that routinely do hot-patching on boot and want to hot-patch their thunk to different code sequences. They can write this custom thunk and use `-mretpoline-external-thunk` *in addition* to `-mretpoline`. In this case, on x86-64 thu thunk names must be: ``` __llvm_external_retpoline_r11 ``` or on 32-bit: ``` __llvm_external_retpoline_eax __llvm_external_retpoline_ecx __llvm_external_retpoline_edx __llvm_external_retpoline_push ``` And the target of the retpoline is passed in the named register, or in the case of the `push` suffix on the top of the stack via a `pushl` instruction. There is one other important source of indirect branches in x86 ELF binaries: the PLT. These patches also include support for LLD to generate PLT entries that perform a retpoline-style indirection. The only other indirect branches remaining that we are aware of are from precompiled runtimes (such as crt0.o and similar). The ones we have found are not really attackable, and so we have not focused on them here, but eventually these runtimes should also be replicated for retpoline-ed configurations for completeness. For kernels or other freestanding or fully static executables, the compiler switch `-mretpoline` is sufficient to fully mitigate this particular attack. For dynamic executables, you must compile *all* libraries with `-mretpoline` and additionally link the dynamic executable and all shared libraries with LLD and pass `-z retpolineplt` (or use similar functionality from some other linker). We strongly recommend also using `-z now` as non-lazy binding allows the retpoline-mitigated PLT to be substantially smaller. When manually apply similar transformations to `-mretpoline` to the Linux kernel we observed very small performance hits to applications running typical workloads, and relatively minor hits (approximately 2%) even for extremely syscall-heavy applications. This is largely due to the small number of indirect branches that occur in performance sensitive paths of the kernel. When using these patches on statically linked applications, especially C++ applications, you should expect to see a much more dramatic performance hit. For microbenchmarks that are switch, indirect-, or virtual-call heavy we have seen overheads ranging from 10% to 50%. However, real-world workloads exhibit substantially lower performance impact. Notably, techniques such as PGO and ThinLTO dramatically reduce the impact of hot indirect calls (by speculatively promoting them to direct calls) and allow optimized search trees to be used to lower switches. If you need to deploy these techniques in C++ applications, we *strongly* recommend that you ensure all hot call targets are statically linked (avoiding PLT indirection) and use both PGO and ThinLTO. Well tuned servers using all of these techniques saw 5% - 10% overhead from the use of retpoline. We will add detailed documentation covering these components in subsequent patches, but wanted to make the core functionality available as soon as possible. Happy for more code review, but we'd really like to get these patches landed and backported ASAP for obvious reasons. We're planning to backport this to both 6.0 and 5.0 release streams and get a 5.0 release with just this cherry picked ASAP for distros and vendors. This patch is the work of a number of people over the past month: Eric, Reid, Rui, and myself. I'm mailing it out as a single commit due to the time sensitive nature of landing this and the need to backport it. Huge thanks to everyone who helped out here, and everyone at Intel who helped out in discussions about how to craft this. Also, credit goes to Paul Turner (at Google, but not an LLVM contributor) for much of the underlying retpoline design. Reviewers: echristo, rnk, ruiu, craig.topper, DavidKreitzer Subscribers: sanjoy, emaste, mcrosier, mgorny, mehdi_amini, hiraditya, llvm-commits Differential Revision: https://reviews.llvm.org/D41723 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@324012 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r314733:Tom Stellard2017-12-054-10/+72
| | | | | | | | | | | | | | ------------------------------------------------------------------------ r314733 | rsmith | 2017-10-02 15:43:36 -0700 (Mon, 02 Oct 2017) | 5 lines PR33839: Fix -Wunused handling for structured binding declarations. We warn about a structured binding declaration being unused only if none of its bindings are used. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@319847 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r311456:Tom Stellard2017-11-281-1/+1
| | | | | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r311456 | krasimir | 2017-08-22 07:28:01 -0700 (Tue, 22 Aug 2017) | 13 lines [clang-format] Fix lines regression in clang-format.py Summary: This patch fixes a regression after https://reviews.llvm.org/rL305665, which updates the structure of the `lines` variable. Reviewers: djasper Reviewed By: djasper Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D37011 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@319179 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r316181:Tom Stellard2017-11-272-1/+17
| | | | | | | | | | | | | ------------------------------------------------------------------------ r316181 | jvesely | 2017-10-19 13:40:13 -0700 (Thu, 19 Oct 2017) | 4 lines AMDGPU: Parse r600 CPU name early and expose FMAF capability Improve amdgcn macro test Differential Revision: https://reviews.llvm.org/D38667 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@319032 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r313182:Tom Stellard2017-11-221-1/+1
| | | | | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r313182 | sylvestre | 2017-09-13 13:03:29 -0700 (Wed, 13 Sep 2017) | 13 lines SplitEmptyFunction should be true in the Mozilla coding style Summary: As defined here: https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style#Classes See for the downstream bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=1399359 Reviewers: Typz, djasper Reviewed By: Typz Subscribers: klimek, cfe-commits Differential Revision: https://reviews.llvm.org/D37795 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@318858 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r312748:Tom Stellard2017-11-152-6/+5
| | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r312748 | jroelofs | 2017-09-07 15:01:25 -0700 (Thu, 07 Sep 2017) | 10 lines Fix validation of the -mthread-model flag in the Clang driver The ToolChain class validates the -mthread-model flag in the constructor which doesn't work correctly since the thread model methods are virtual methods. The check is moved into Clang::ConstructJob() when constructing the internal command line. https://reviews.llvm.org/D37496 Patch by: Ian Tessier! ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@318346 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r315578:Tom Stellard2017-11-152-0/+37
| | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r315578 | abataev | 2017-10-12 06:51:32 -0700 (Thu, 12 Oct 2017) | 7 lines [OPENMP] Fix PR34925: Fix getting thread_id lvalue for inlined regions in C. If we try to get the lvalue for thread_id variables in inlined regions, we did not use the correct version of function. Fixed this bug by adding overrided version of the function getThreadIDVariableLValue for inlined regions. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@318315 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r315464:Tom Stellard2017-11-153-3/+22
| | | | | | | | | | | | | | ------------------------------------------------------------------------ r315464 | abataev | 2017-10-11 08:29:40 -0700 (Wed, 11 Oct 2017) | 5 lines [OPENMP] Fix PR34916: Crash on mixing taskloop|tasks directives. If both taskloop and task directives are used at the same time in one program, we may ran into the situation when the particular type for task directive is reused for taskloop directives. Patch fixes this problem. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@318233 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r310905 and r310994:Tom Stellard2017-11-141-13/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r310905 | rnk | 2017-08-14 18:17:47 -0700 (Mon, 14 Aug 2017) | 11 lines Avoid PointerIntPair of constexpr EvalInfo structs They are stack allocated, so their alignment is not to be trusted. 32-bit MSVC only guarantees 4 byte stack alignment, even though alignof would tell you otherwise. I tried fixing this with __declspec align, but that apparently upsets GCC. Hopefully this version will satisfy all compilers. See PR32018 for some info about the mingw issues. Should supercede https://reviews.llvm.org/D34873 ------------------------------------------------------------------------ ------------------------------------------------------------------------ r310994 | chandlerc | 2017-08-16 00:22:49 -0700 (Wed, 16 Aug 2017) | 6 lines Fix a UBSan failure where this boolean was copied when uninitialized. When r310905 moved the pointer and bool out of a PointerIntPair, it made them end up uninitialized and caused UBSan failures when copying the uninitialized boolean. However, making the pointer be null should avoid the reference to the boolean entirely. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@318225 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r313278:Tom Stellard2017-11-144-2/+22
| | | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r313278 | prazek | 2017-09-14 10:33:08 -0700 (Thu, 14 Sep 2017) | 11 lines Enable __declspec(selectany) on any platform Summary: This feature was disabled probably by mistake in rL300562 This fixes bug https://bugs.llvm.org/show_bug.cgi?id=33285 Reviewers: davide, rnk Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D33852 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@318133 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r315611:Tom Stellard2017-11-142-3/+28
| | | | | | | | | | | | | | ------------------------------------------------------------------------ r315611 | abataev | 2017-10-12 13:03:39 -0700 (Thu, 12 Oct 2017) | 5 lines [OPENMP] Fix PR34927: Emit initializer for reduction array with declare reduction. If the reduction is an array or an array section and reduction operation is declare reduction without initializer, it may lead to crash. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@318120 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r315586:Tom Stellard2017-11-142-6/+9
| | | | | | | | | | | | | | ------------------------------------------------------------------------ r315586 | abataev | 2017-10-12 08:18:41 -0700 (Thu, 12 Oct 2017) | 5 lines [OPENMP] Fix PR34926: Fix handling of the array sections passed as function params. Codegen could crash if the array section base expression is the function parameter. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@318118 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r313675:Tom Stellard2017-11-133-6/+20
| | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r313675 | rcraik | 2017-09-19 14:04:23 -0700 (Tue, 19 Sep 2017) | 9 lines [OpenMP] fix seg-faults printing diagnostics with invalid ordered(n) values When the value specified for n in ordered(n) is larger than the number of loops a segmentation fault can occur in one of two ways when attempting to print out a diagnostic for an associated depend(sink : vec): 1) The iteration vector vec contains less than n items 2) The iteration vector vec contains a variable that is not a loop control variable This patch addresses both of these issues. Differential Revision: https://reviews.llvm.org/D38049 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@318116 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r312296:Tom Stellard2017-11-131-1/+1
| | | | | | | | | | ------------------------------------------------------------------------ r312296 | abataev | 2017-08-31 16:34:33 -0700 (Thu, 31 Aug 2017) | 1 line [OPENMP] Fix the test, NFC. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@318114 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r312292:Tom Stellard2017-11-1322-22/+34
| | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r312292 | abataev | 2017-08-31 16:06:52 -0700 (Thu, 31 Aug 2017) | 8 lines [OPENMP] Fix for PR34398: assert with random access iterator if the step>1. If the loop is a loot with random access iterators and the iteration construct is represented it += n, then the compiler crashed because of reusing of the same MaterializedTemporaryExpr around N. Patch fixes it by using the expression as written, without any special kind of wrappings. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@318113 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r311777:Tom Stellard2017-11-132-1/+20
| | | | | | | | | | | | | | ------------------------------------------------------------------------ r311777 | abataev | 2017-08-25 08:43:55 -0700 (Fri, 25 Aug 2017) | 5 lines [OPENMP] Fix for PR34321: ustom OpenMP reduction in C++ template causes SEGFAULT at compile time Compiler crashed when tried to rebuild non-template expression in dependent context. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@318107 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r311013:Tom Stellard2017-11-133-6/+12
| | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r311013 | abataev | 2017-08-16 08:58:46 -0700 (Wed, 16 Aug 2017) | 7 lines [OPENMP] Fix for PR28581: OpenMP linear clause - wrong results. If worksharing construct has at least one linear item, an implicit synchronization point must be emitted to avoid possible conflict with the loading/storing values to the original variables. Added implicit barrier if the linear item is found before actual start of the worksharing construct. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@318105 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r309288:Tom Stellard2017-11-132-1/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r309288 | erichkeane | 2017-07-27 09:28:20 -0700 (Thu, 27 Jul 2017) | 32 lines Fix double destruction of objects when OpenMP construct is canceled When an omp for loop is canceled the constructed objects are being destructed twice. It looks like the desired code is: { Obj o; If (cancelled) branch-through-cleanups to cancel.exit. } [cleanups] cancel.exit: __kmpc_for_static_fini br cancel.cont (*) cancel.cont: __kmpc_barrier return The problem seems to be the branch to cancel.cont is currently also going through the cleanups calling them again. This change just does a direct branch instead. Patch By: michael.p.rice@intel.com Differential Revision: https://reviews.llvm.org/D35854 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@318099 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r313392:Tom Stellard2017-09-293-8/+9
| | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r313392 | ctopper | 2017-09-15 13:27:59 -0700 (Fri, 15 Sep 2017) | 7 lines [X86] Disable _mm512_maskz_set1_epi64 intrinsic on 32-bit targets to prevent a backend isel failure. The __builtin_ia32_pbroadcastq512_mem_mask we were previously trying to use in 32-bit mode is not implemented in the x86 backend and causes isel to fail in release builds. In debug builds it fails even earlier during legalization with an llvm_unreachable. While there add the missing test case for this intrinsic for this for 64-bit mode. This fixes PR34631. D37668 should be able to recover this for 32-bit mode soon. But I wanted to fix the crash ahead of that. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@314569 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r312447:Tom Stellard2017-09-282-2/+22
| | | | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r312447 | hfinkel | 2017-09-03 10:18:25 -0700 (Sun, 03 Sep 2017) | 12 lines [CodeGen] Treat all vector fields as mayalias Because it is common to treat vector types as an array of their elements, or even some other type that's not the element type, and thus index into them, we can't use struct-path TBAA for these accesses. Even though we already treat all vector types as equivalent to 'char', we were using field-offset information for them with TBAA, and this renders undefined the intra-value indexing we intend to allow. Note that, although 'char' is universally aliasing, with path TBAA, we can still differentiate between access to s.a and s.b in struct { char a, b; } s;. We can't use this capability as-is for vector types. Fixes PR33967. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@314476 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r312651:Tom Stellard2017-09-283-11/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r312651 | jroelofs | 2017-09-06 10:09:25 -0700 (Wed, 06 Sep 2017) | 23 lines Fix ARM bare metal driver to support atomics The new bare metal support only supports the single thread model. This causes the builtin atomic functions (e.g.: __atomic_fetch_add) to not generate thread-safe assembly for these operations, which breaks our firmware. We target bare metal, and need to atomically modify variables in our interrupt routines, and task threads. Internally, the -mthread-model flag determines whether to lower or expand atomic operations (see D4984). This change removes the overridden thread model methods, and instead relies on the base ToolChain class to validate the thread model (which already includes logic to validate single thread model support). If the single thread model is required, the -mthread-model flag will have to be provided. As a workaround "-mthread-model posix" could be provided, but it only works due to a bug in the validation of the -mthread-model flag (separate patch coming to fix this). https://reviews.llvm.org/D37493 Patch by: Ian Tessier! ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@314464 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r312622:Tom Stellard2017-09-283-5/+11
| | | | | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r312622 | jbcoe | 2017-09-06 00:33:32 -0700 (Wed, 06 Sep 2017) | 13 lines Fix __repr__ for Diagnostic in clang.cindex Summary: Also move misplaced tests for exception specification to fix failing Python tests. Reviewers: hans, compnerd Reviewed By: compnerd Subscribers: cfe-commits Tags: #clang-c Differential Revision: https://reviews.llvm.org/D37490 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@314434 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r314354:Dylan McKay2017-09-281-2/+1
| | | | | | | | | | | | | ------------------------------------------------------------------------ r314354 | dylanmckay | 2017-09-28 11:09:01 +1300 (Thu, 28 Sep 2017) | 3 lines [AVR] Update data layout to match current LLVM trunk The data layout was changed in r314179 to fix atomic loads and stores. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@314381 91177308-0d34-0410-b5e6-96231b3b80d8
* Mention the expected change to default -std= in future clang releases.Richard Smith2017-08-311-0/+6
| | | | git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@312293 91177308-0d34-0410-b5e6-96231b3b80d8
* Consistently use code font for command-line flags in the release notes.Richard Smith2017-08-301-19/+18
| | | | git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@312189 91177308-0d34-0410-b5e6-96231b3b80d8
* Add a couple of release note updates for C++ changes since Clang 4.Richard Smith2017-08-301-0/+13
| | | | git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@312187 91177308-0d34-0410-b5e6-96231b3b80d8
* ReleaseNotes: one back-tick too manyHans Wennborg2017-08-301-1/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@312155 91177308-0d34-0410-b5e6-96231b3b80d8
* ReleaseNotes: remove another in-progress warningHans Wennborg2017-08-301-5/+0
| | | | git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@312152 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r312149:Hans Wennborg2017-08-301-4/+3
| | | | | | | | | | | ------------------------------------------------------------------------ r312149 | hans | 2017-08-30 11:35:44 -0700 (Wed, 30 Aug 2017) | 1 line docs: typo fix ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@312150 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r311823: (+update ClangCommandLineReference.rst)Hans Wennborg2017-08-2915-23/+164
| | | | | | | | | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r311823 | rsmith | 2017-08-25 18:04:35 -0700 (Fri, 25 Aug 2017) | 16 lines Add flag to request Clang is ABI-compatible with older versions of itself This patch adds a flag -fclang-abi-compat that can be used to request that Clang attempts to be ABI-compatible with some older version of itself. This is provided on a best-effort basis; right now, this can be used to undo the ABI change in r310401, reverting Clang to its prior C++ ABI for pass/return by value of class types affected by that change, and to undo the ABI change in r262688, reverting Clang to using integer registers rather than SSE registers for passing <1 x long long> vectors. The intent is that we will maintain this backwards compatibility path as we make ABI-breaking fixes in future. The reversion to the old behavior for r310401 is also applied to the PS4 target since that change is not part of its platform ABI (which is essentially to do whatever Clang 3.2 did). ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@312013 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r311792:Hans Wennborg2017-08-253-12/+21
| | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r311792 | djasper | 2017-08-25 12:14:53 -0700 (Fri, 25 Aug 2017) | 9 lines [Format] Invert nestingAndIndentLevel pair in WhitespaceManager used for alignments Indent should be compared before nesting level to determine if a token is on the same scope as the one we align with. Because it was inverted, clang-format sometimes tried to align tokens with tokens from outer scopes, causing the assert(Shift >= 0) to fire. This fixes bug #33507. Patch by Beren Minor, thank you! ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311800 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r311695:Hans Wennborg2017-08-253-3/+54
| | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r311695 | rsmith | 2017-08-24 13:10:33 -0700 (Thu, 24 Aug 2017) | 9 lines [ubsan] PR34266: When sanitizing the 'this' value for a member function that happens to be a lambda call operator, use the lambda's 'this' pointer, not the captured enclosing 'this' pointer (if any). Do not sanitize the 'this' pointer of a member call operator for a lambda with no capture-default, since that call operator can legitimately be called with a null this pointer from the static invoker function. Any actual call with a null this pointer should still be caught in the caller (if it is being sanitized). This reinstates r311589 (reverted in r311680) with the above fix. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311799 91177308-0d34-0410-b5e6-96231b3b80d8
* ReleaseNotes: remove boiler-plate, and minor fixesHans Wennborg2017-08-241-53/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311717 91177308-0d34-0410-b5e6-96231b3b80d8
* ReleaseNotes: drop in-progress warningHans Wennborg2017-08-241-9/+3
| | | | git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311716 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r311601:Hans Wennborg2017-08-242-1/+46
| | | | | | | | | | | | | | | ------------------------------------------------------------------------ r311601 | adrian | 2017-08-23 14:24:12 -0700 (Wed, 23 Aug 2017) | 5 lines Fix a bug in CGDebugInfo::EmitInlineFunctionStart causing DILocations to be parented in function declarations. Fixes PR33997. https://bugs.llvm.org/show_bug.cgi?id=33997 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311671 91177308-0d34-0410-b5e6-96231b3b80d8
* Release Notes fixHans Wennborg2017-08-241-2/+2
| | | | | | | Patch by Marek Kurdej! git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311668 91177308-0d34-0410-b5e6-96231b3b80d8
* Revert r309328 and r309290 (which merged r309327 and r309226).Hans Wennborg2017-08-231-59/+21
| | | | | | | | | | | The header change caused problems; see PR34182, and PR33858 from #9 onwards, as well as the discussion on the r309226 cfe-commits thread. These changes don't seem to be addressing any regression from 4.0.0, so rather than scrambling to fix this on the branch, let's revert to safety. git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311597 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r311330:Hans Wennborg2017-08-236-7/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r311330 | ibiryukov | 2017-08-21 05:03:08 -0700 (Mon, 21 Aug 2017) | 16 lines Fixed a crash on replaying Preamble's PP conditional stack. Summary: The crash occurs when the first token after a preamble is a macro expansion. Fixed by moving replayPreambleConditionalStack from Parser into Preprocessor. It is now called right after the predefines file is processed. Reviewers: erikjv, bkramer, klimek, yvvan Reviewed By: bkramer Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D36872 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311591 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r311532:Hans Wennborg2017-08-232-3/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r311532 | krasimir | 2017-08-23 00:18:36 -0700 (Wed, 23 Aug 2017) | 24 lines [clang-format] Align trailing comments if ColumnLimit is 0 Summary: ColumnLimit = 0 means no limit, so comment should always be aligned if requested. This was broken with https://llvm.org/svn/llvm-project/cfe/trunk@304687 introduced via https://reviews.llvm.org/D33830 and is included in 5.0.0-rc2. This commit fixes it and adds a unittest for this property. Should go into clang-5.0 IMHO. Contributed by @pboettch! Reviewers: djasper, krasimir Reviewed By: djasper, krasimir Subscribers: hans, klimek Differential Revision: https://reviews.llvm.org/D36967 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311573 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r311397:Hans Wennborg2017-08-222-1/+10
| | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r311397 | ahatanak | 2017-08-21 15:46:46 -0700 (Mon, 21 Aug 2017) | 8 lines [Driver][Darwin] Do not pass -munwind-table if -fno-excpetions is supplied. With this change, -fno-exceptions disables unwind tables unless -funwind-tables is supplied too or the target is x86-64 (x86-64 requires emitting unwind tables). rdar://problem/33934446 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311505 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r311391:Hans Wennborg2017-08-222-26/+68
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r311391 | stl_msft | 2017-08-21 15:19:33 -0700 (Mon, 21 Aug 2017) | 28 lines [Driver] Recognize DevDiv internal builds of MSVC, with a different directory structure. This is a reasonably non-intrusive change, which I've verified works for both x86 and x64 DevDiv-internal builds. The idea is to change `bool IsVS2017OrNewer` into a 3-state `ToolsetLayout VSLayout`. Either a build is DevDiv-internal, released VS 2017 or newer, or released VS 2015 or older. When looking at the directory structure, if instead of `"VC"` we see `"x86ret"`, `"x86chk"`, `"amd64ret"`, or `"amd64chk"`, we recognize this as a DevDiv-internal build. After we get past the directory structure validation, we use this knowledge to regenerate paths appropriately. `llvmArchToDevDivInternalArch()` knows how we use `"i386"` subdirectories, and `MSVCToolChain::getSubDirectoryPath()` uses that. It also knows that DevDiv-internal builds have an `"inc"` subdirectory instead of `"include"`. This may still not be the "right" fix in any sense, but I believe that it's non-intrusive in the sense that if the special directory names aren't found, no codepaths are affected. (`ToolsetLayout::OlderVS` and `ToolsetLayout::VS2017OrNewer` correspond to `IsVS2017OrNewer` being `false` or `true`, respectively.) I searched for all references to `IsVS2017OrNewer`, which are places where Clang cares about VS's directory structure, and the only one that isn't being patched is some logic to deal with cross-compilation. I'm fine with that not working for DevDiv-internal builds for the moment (we typically test the native compilers), so I added a comment. Fixes D36860. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311500 91177308-0d34-0410-b5e6-96231b3b80d8
* [Docs] Added release notes for OpenCL.Anastasia Stulova2017-08-221-1/+36
| | | | | | | | Differential Revision: https://reviews.llvm.org/D36951 git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311485 91177308-0d34-0410-b5e6-96231b3b80d8
* ReleaseNotes: coroutines update from GorHans Wennborg2017-08-221-0/+9
| | | | git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311475 91177308-0d34-0410-b5e6-96231b3b80d8
* Merging r311443:Hans Wennborg2017-08-222-2/+29
| | | | | | | | | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------ r311443 | arphaman | 2017-08-22 03:38:07 -0700 (Tue, 22 Aug 2017) | 15 lines [ObjC] Check written attributes only when synthesizing ambiguous property This commit fixes a bug introduced in r307903. The attribute ambiguity checker that was introduced in r307903 checked all property attributes, which caused errors for source-compatible properties, like: @property (nonatomic, readonly) NSObject *prop; @property (nonatomic, readwrite) NSObject *prop; because the readwrite property would get implicit 'strong' attribute. The ambiguity checker should be concerned about explicitly specified attributes only. rdar://33748089 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311464 91177308-0d34-0410-b5e6-96231b3b80d8
* Mention libclang code-completion changes in release notesAlex Lorenz2017-08-221-1/+23
| | | | git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311455 91177308-0d34-0410-b5e6-96231b3b80d8
* Mention #pragma pack PCH serialization change in release notesAlex Lorenz2017-08-221-0/+4
| | | | git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311453 91177308-0d34-0410-b5e6-96231b3b80d8
* Mention #pragma clang attribute in the release notesAlex Lorenz2017-08-221-2/+2
| | | | git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311452 91177308-0d34-0410-b5e6-96231b3b80d8
* Mention the ObjC property synthesis changes in release notesAlex Lorenz2017-08-221-1/+10
| | | | git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311451 91177308-0d34-0410-b5e6-96231b3b80d8
* [Sema] Update release notes with details of implicit scalar to vector ↵Simon Dardis2017-08-221-1/+39
| | | | | | | | | | | | | conversions Add notes on this to the C language section, along with the C++ section. Reviewers: bruno, hans Differential Revision: https://reviews.llvm.org/D36954 git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311441 91177308-0d34-0410-b5e6-96231b3b80d8