| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
| |
Calls to the terminate handler must be annotated within the exception
region they are within.
llvm-svn: 261751
|
|
|
|
|
|
|
|
| |
32bit"
I forgot to initialize RecoverFP.
llvm-svn: 255731
|
|
|
|
|
|
|
|
| |
32bit"
This reverts commit r255710.
llvm-svn: 255728
|
|
|
|
| |
llvm-svn: 255710
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We'd like to remove support for terminatepad from LLVM. To do this, we
need to move Clang off of it first. The intent behind terminatepad was
to carefully model exception specifications for the MSVC personality.
However, we don't support exception specifications for the MSVC
personality and neither does MSVC. Instead, MSVC supports
all-or-nothing exception specifications. We can model this limited
usage using cleanuppads which call std::terminate.
Differential Revision: http://reviews.llvm.org/D15478
llvm-svn: 255521
|
|
|
|
|
|
|
|
|
|
| |
Depends on D15139.
Reviewers: rnk
Differential Revision: http://reviews.llvm.org/D15140
llvm-svn: 255423
|
|
|
|
|
|
|
| |
Make ilist iterator conversions explicit in clangCodeGen. Eventually
I'll remove them everywhere.
llvm-svn: 252358
|
|
|
|
|
|
|
| |
This sets the mostly expected Darwin default ABI options for these two
platforms. Active changes from these defaults for watchOS are in a later patch.
llvm-svn: 251708
|
|
|
|
|
|
|
| |
We were only doing this for SEH as a special case. Generalize it to all
cleanups.
llvm-svn: 249748
|
|
|
|
|
|
|
| |
Testing has shown that it is at least as reliable as the old landingpad
pattern matching code.
llvm-svn: 249647
|
|
|
|
|
|
|
| |
Use llvm.eh.exceptioncode to get the code out of EAX for x64. For
32-bit, the filter is responsible for storing it to memory for us.
llvm-svn: 249497
|
|
|
|
|
|
|
|
|
|
| |
minor cleanups
Patch by Eugene Zelenko!
Differential Revision: http://reviews.llvm.org/D13406
llvm-svn: 249484
|
|
|
|
|
|
|
|
| |
Mingw generally wraps an old copy of msvcrt.dll which has these
personalities, so things should work out, or so I hear. I haven't tested
it.
llvm-svn: 247902
|
|
|
|
|
|
| |
I was constructing an object without filling in all the fields.
llvm-svn: 247851
|
|
|
|
|
|
|
|
|
| |
This avoids building a fake LLVM IR global variable just to ferry an i32
down into LLVM codegen. It also puts a nail in the coffin of using MS
ABI C++ EH with landingpads, since now we'll assert in the lpad code
when flags are present.
llvm-svn: 247843
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When uses of personality functions were moved from LandingPadInst to
Function, we forgot to update SimplifyPersonality(). This patch corrects
that.
Note: SimplifyPersonality() is an optimization which replaces
personality functions with the default C++ personality when possible.
Without this update, some ObjC++ projects fail to link against C++
libraries (seeing as the exception ABI had effectively changed).
rdar://problem/22155434
llvm-svn: 247421
|
|
|
|
|
|
|
| |
Cleanupendpad is a lot like catchendpad, so we can reuse the same
EHScopeStack type.
llvm-svn: 247349
|
|
|
|
|
|
| |
Also add tests for SEH with the new IRGen.
llvm-svn: 247318
|
|
|
|
|
|
|
|
| |
doing redundant work if a variable is used multiple times.
Fixes PR24751.
llvm-svn: 247075
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Introduce an Address type to bundle a pointer value with an
alignment. Introduce APIs on CGBuilderTy to work with Address
values. Change core APIs on CGF/CGM to traffic in Address where
appropriate. Require alignments to be non-zero. Update a ton
of code to compute and propagate alignment information.
As part of this, I've promoted CGBuiltin's EmitPointerWithAlignment
helper function to CGF and made use of it in a number of places in
the expression emitter.
The end result is that we should now be significantly more correct
when performing operations on objects that are locally known to
be under-aligned. Since alignment is not reliably tracked in the
type system, there are inherent limits to this, but at least we
are no longer confused by standard operations like derived-to-base
conversions and array-to-pointer decay. I've also fixed a large
number of bugs where we were applying the complete-object alignment
to a pointer instead of the non-virtual alignment, although most of
these were hidden by the very conservative approach we took with
member alignment.
Also, because IRGen now reliably asserts on zero alignments, we
should no longer be subject to an absurd but frustrating recurring
bug where an incomplete type would report a zero alignment and then
we'd naively do a alignmentAtOffset on it and emit code using an
alignment equal to the largest power-of-two factor of the offset.
We should also now be emitting much more aggressive alignment
attributes in the presence of over-alignment. In particular,
field access now uses alignmentAtOffset instead of min.
Several times in this patch, I had to change the existing
code-generation pattern in order to more effectively use
the Address APIs. For the most part, this seems to be a strict
improvement, like doing pointer arithmetic with GEPs instead of
ptrtoint. That said, I've tried very hard to not change semantics,
but it is likely that I've failed in a few places, for which I
apologize.
ABIArgInfo now always carries the assumed alignment of indirect and
indirect byval arguments. In order to cut down on what was already
a dauntingly large patch, I changed the code to never set align
attributes in the IR on non-byval indirect arguments. That is,
we still generate code which assumes that indirect arguments have
the given alignment, but we don't express this information to the
backend except where it's semantically required (i.e. on byvals).
This is likely a minor regression for those targets that did provide
this information, but it'll be trivial to add it back in a later
patch.
I partially punted on applying this work to CGBuiltin. Please
do not add more uses of the CreateDefaultAligned{Load,Store}
APIs; they will be going away eventually.
llvm-svn: 246985
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
The signatures of the methods in LLVM for creating EH pads/rets are changing
to require token arguments on rets and assume token return type on pads.
Update creation code accordingly.
Reviewers: majnemer, rnk
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D12109
llvm-svn: 245798
|
|
|
|
|
|
| |
polymorphically
llvm-svn: 245378
|
|
|
|
| |
llvm-svn: 245153
|
|
|
|
| |
llvm-svn: 243992
|
|
|
|
|
|
|
|
|
|
| |
The new EH instructions make it possible for LLVM to generate .xdata
tables that the MSVC personality routines will be happy about. Because
this is experimental, hide it behind a -cc1 flag (-fnew-ms-eh).
Differential Revision: http://reviews.llvm.org/D11405
llvm-svn: 243767
|
|
|
|
|
|
|
|
| |
This makes it possible to use EHPersonality in other parts of CodeGen.
Differential Revision: http://reviews.llvm.org/D11440
llvm-svn: 242971
|
|
|
|
|
|
|
|
| |
functions
Patch by servuswiegehtz at yahoo.de
llvm-svn: 242168
|
|
|
|
| |
llvm-svn: 241878
|
|
|
|
|
|
|
|
| |
Move the diagnostic back to codegen so that we can compile ATL on the
self-host bot. We don't actually end up emitting code for the __try, so
the diagnostic won't be hit.
llvm-svn: 241761
|
|
|
|
|
|
| |
This should do the right thing for stack realignment prologues.
llvm-svn: 241644
|
|
|
|
| |
llvm-svn: 241634
|
|
|
|
|
|
|
|
|
|
|
| |
This reverts commit r241244, but restricts SEH support to Win64.
This way, Chromium builds will still fall back on TUs with SEH, and
Clang developers can work on this incrementally upstream while patching
this small predicate locally. It'll also make it easier to review small
fixes.
llvm-svn: 241533
|
|
|
|
|
|
|
| |
It still doesn't produce quite the right code, test binaries built with this
enabled fail some tests.
llvm-svn: 241244
|
|
|
|
|
|
|
| |
It was still using frameaddress(1) to get the parent FP, even though it
had the value it wanted as a parameter.
llvm-svn: 241199
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
32-bit finally funclets are intended to be called both directly from the
parent function and indirectly from the EH runtime. Because we aren't
contorting LLVM's X86 prologue to match MSVC's, calling the finally
block directly passes in a different value of EBP than the one that the
runtime provides. We need an adapter thunk to adjust EBP to the expected
value. However, WinEHPrepare already has to solve this problem when
cleanups are not pre-outlined, so we can go ahead and rely on it rather
than duplicating work.
Now we only do the llvm.x86.seh.recoverfp dance for 32-bit SEH filter
functions.
llvm-svn: 241187
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This re-lands r236052 and adds support for __exception_code().
In 32-bit SEH, the exception code is not available in eax. It is only
available in the filter function, and now we arrange to load it and
store it into an escaped variable in the parent frame.
As a consequence, we have to disable the "catch i8* null" optimization
on 32-bit and always generate a filter function. We can re-enable the
optimization if we detect an __except block that doesn't use the
exception code, but this probably isn't worth optimizing.
Reviewers: majnemer
Differential Revision: http://reviews.llvm.org/D10852
llvm-svn: 241171
|
|
|
|
| |
llvm-svn: 240353
|
|
|
|
|
|
|
|
|
|
|
|
| |
The patch is generated using this command:
$ tools/extra/clang-tidy/tool/run-clang-tidy.py -fix \
-checks=-*,llvm-namespace-comment -header-filter='llvm/.*|clang/.*' \
work/llvm/tools/clang
To reduce churn, not touching namespaces spanning less than 10 lines.
llvm-svn: 240270
|
|
|
|
| |
llvm-svn: 239941
|
|
|
|
|
|
|
| |
This reverts commit r239415. This was committed accidentally, LLVM isn't
ready for this.
llvm-svn: 239417
|
|
|
|
|
|
|
|
| |
This reverts r236167.
LLVM should be ready for this now.
llvm-svn: 239415
|
|
|
|
|
|
| |
ArrayRef/initializer_list+braced init
llvm-svn: 237625
|
|
|
|
|
|
|
| |
We now use an enum which maps the marketing name (almost always a year)
to the major version number.
llvm-svn: 236967
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
MSVC 2015 renamed the symbol found by name lookup for 'std::terminate'
so we cannot rely on using '?terminate@@YAXXZ'. Furthermore, it seems
that 2015 will be the first release of MSVC which permits inlining a
function which is noexcept into a function which isn't. This is
implemented by creating a cleanup for the invoker which jumps to
__std_terminate. Clang's implementation of this aspect of the MSVC
scheme is slightly less efficient in this respect because we use a
catch handler configured as a catch-all handler instead.
llvm-svn: 236961
|
|
|
|
|
|
| |
lib/Basic/Targets.cpp
llvm-svn: 236274
|
|
|
|
| |
llvm-svn: 236271
|
|
|
|
| |
llvm-svn: 236167
|
|
|
|
|
|
|
| |
Basic __finally blocks don't cause linker errors anymore (although they
are miscompiled).
llvm-svn: 236128
|
|
|
|
| |
llvm-svn: 236082
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is just the clang-side of 32-bit SEH. LLVM still needs work, and it
will determinstically fail to compile until it's feature complete.
On x86, all outlined handlers have no parameters, but they do implicitly
take the EBP value passed in and use it to address locals of the parent
frame. We model this with llvm.frameaddress(1).
This works (mostly), but __finally block inlining can break it. For now,
we apply the 'noinline' attribute. If we really want to inline __finally
blocks on 32-bit x86, we should teach the inliner how to untangle
frameescape and framerecover.
Promote the error diagnostic from codegen to sema. It now rejects SEH on
non-Windows platforms. LLVM doesn't implement SEH on non-x86 Windows
platforms, but there's nothing preventing it.
llvm-svn: 236052
|