| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
| |
This was the wrong direction to take anyway (because ultimately the
GlobalValue needed the pointee type again and /it/ used
PointerType::getElementType eventually anyway)... let's go a different way.
This reverts commit r236161.
llvm-svn: 247586
|
|
|
|
|
|
| |
Remove some trailing whitespace
llvm-svn: 247560
|
|
|
|
|
|
|
|
|
| |
T in the expression T() must be a non-array complete object type or
the void type. Function types are neither.
This fixes PR24798.
llvm-svn: 247535
|
|
|
|
| |
llvm-svn: 247533
|
|
|
|
|
|
|
|
| |
Propagation checker.
Differential Revision: http://reviews.llvm.org/D12381
llvm-svn: 247532
|
|
|
|
| |
llvm-svn: 247503
|
|
|
|
|
|
| |
always_inline functions without a wrapper don't need to be in a COMDAT.
llvm-svn: 247500
|
|
|
|
| |
llvm-svn: 247498
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Current implementation may end up emitting an undefined reference for
an "inline __attribute__((always_inline))" function by generating an
"available_externally alwaysinline" IR function for it and then failing to
inline all the calls. This happens when a call to such function is in dead
code. As the inliner is an SCC pass, it does not process dead code.
Libc++ relies on the compiler never emitting such undefined reference.
With this patch, we emit a pair of
1. internal alwaysinline definition (called F.alwaysinline)
2a. A stub F() { musttail call F.alwaysinline }
-- or, depending on the linkage --
2b. A declaration of F.
The frontend ensures that F.inlinefunction is only used for direct
calls, and the stub is used for everything else (taking the address of
the function, really). Declaration (2b) is emitted in the case when
"inline" is meant for inlining only (like __gnu_inline__ and some
other cases).
This approach, among other nice properties, ensures that alwaysinline
functions are always internal, making it impossible for a direct call
to such function to produce an undefined symbol reference.
This patch is based on ideas by Chandler Carruth and Richard Smith.
llvm-svn: 247494
|
|
|
|
|
|
|
|
|
| |
Revert "Always_inline codegen rewrite."
Breaks gdb & lldb tests.
Breaks on Fedora 22 x86_64.
llvm-svn: 247491
|
|
|
|
|
|
|
|
| |
it's not sufficient to prefer the declaration with more default arguments, or
the one that's visible; they might both be visible, but one of them might have
a visible default argument where the other has a hidden default argument.
llvm-svn: 247486
|
|
|
|
|
|
|
|
| |
if they have the same alignment and one was 'this'.
Fixes PR24780.
llvm-svn: 247482
|
|
|
|
| |
llvm-svn: 247476
|
|
|
|
| |
llvm-svn: 247474
|
|
|
|
| |
llvm-svn: 247472
|
|
|
|
|
|
| |
command.
llvm-svn: 247468
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Current implementation may end up emitting an undefined reference for
an "inline __attribute__((always_inline))" function by generating an
"available_externally alwaysinline" IR function for it and then failing to
inline all the calls. This happens when a call to such function is in dead
code. As the inliner is an SCC pass, it does not process dead code.
Libc++ relies on the compiler never emitting such undefined reference.
With this patch, we emit a pair of
1. internal alwaysinline definition (called F.alwaysinline)
2a. A stub F() { musttail call F.alwaysinline }
-- or, depending on the linkage --
2b. A declaration of F.
The frontend ensures that F.inlinefunction is only used for direct
calls, and the stub is used for everything else (taking the address of
the function, really). Declaration (2b) is emitted in the case when
"inline" is meant for inlining only (like __gnu_inline__ and some
other cases).
This approach, among other nice properties, ensures that alwaysinline
functions are always internal, making it impossible for a direct call
to such function to produce an undefined symbol reference.
This patch is based on ideas by Chandler Carruth and Richard Smith.
llvm-svn: 247465
|
|
|
|
|
|
|
|
|
|
|
|
| |
We used to only select an inheritance model if the pointer to member was
nullptr. Instead, select a model regardless of the member pointer's
value.
N.B. This bug was exposed by making member pointers report true for
isIncompleteType but has been latent since the member pointer scheme's
inception.
llvm-svn: 247464
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
considers as large
Add an option (-analyzer-config min-blocks-for-inline-large=14) to control the function
size the inliner considers as large, in relation to "max-times-inline-large". The option
defaults to the original hard coded behaviour, which I believe should be adjustable with
the other inlining settings.
The analyzer-config test has been modified so that the analyzer will reach the
getMinBlocksForInlineLarge() method and store the result in the ConfigTable, to ensure it
is dumped by the debug checker.
A patch by Sean Eveson!
Differential Revision: http://reviews.llvm.org/D12406
llvm-svn: 247463
|
|
|
|
|
|
| |
This was not working correctly, leading to erroneously rejecting valid edits.
llvm-svn: 247462
|
|
|
|
|
|
|
|
|
|
|
|
| |
-force-align-stack.
Also, make changes to the driver so that -mno-stack-realign is no longer
an option exposed to the end-user that disallows stack realignment in
the backend.
Differential Revision: http://reviews.llvm.org/D11815
llvm-svn: 247451
|
|
|
|
| |
llvm-svn: 247448
|
|
|
|
| |
llvm-svn: 247447
|
|
|
|
|
|
| |
in CGDebugInfo.cpp: MDString::get() copies its arguments.
llvm-svn: 247445
|
|
|
|
| |
llvm-svn: 247444
|
|
|
|
|
|
|
|
|
| |
clang modules, if -dwarf-ext-refs (DebugTypesExtRefs) is specified.
This reimplements r247369 in about a third of the amount of code.
Thanks to David Blaikie pointing this out in post-commit review!
llvm-svn: 247432
|
|
|
|
|
|
|
|
| |
defined in"
This reverts commit r247369 to facilitate reviewing of the following patch.
llvm-svn: 247431
|
|
|
|
|
|
|
|
| |
regions.
Differential Revision: http://reviews.llvm.org/D12767
llvm-svn: 247430
|
|
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org/D12652
llvm-svn: 247426
|
|
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org/D12619
llvm-svn: 247423
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
possible. Added objcObjectPointerType(), objcInterfaceDecl(), templateTypeParmType(), injectedClassNameType(), and unresolvedUsingTypenameDecl(). Updated documentation for pointerType() to call out that it does not match ObjCObjectPointerType types. Changed pointsTo() to handle ObjCObjectPointerType as well as PointerType.
While this may seem like a lot of unrelated changes, they all relate back to fixing HasDeclarationMatcher.
This now allows us to write a matcher like:
varDecl(hasType(namedDecl(hasName("Foo"))))
that matches code using typedefs, objc interfaces, template type parameters, injected class names, or unresolved using typenames.
llvm-svn: 247404
|
|
|
|
|
|
|
|
| |
references.
Patch makes codegen to preserve alignment of the shared variables captured and used in OpenMP regions.
llvm-svn: 247401
|
|
|
|
| |
llvm-svn: 247392
|
|
|
|
| |
llvm-svn: 247389
|
|
|
|
|
|
| |
disabled. (We still allow this via -cc1 / -Xclang, primarily for testing.)
llvm-svn: 247384
|
|
|
|
|
|
| |
selfhost bot.
llvm-svn: 247375
|
|
|
|
|
|
|
|
| |
snippet involving templates.
Assertion hit was in ClassTemplateSpecializationDecl::getSourceRange().
llvm-svn: 247373
|
|
|
|
|
|
| |
clang modules, if -dwarf-ext-refs (DebugTypesExtRefs) is specified.
llvm-svn: 247369
|
|
|
|
| |
llvm-svn: 247368
|
|
|
|
|
|
|
|
| |
I cannot come up with a testcase which would rely on this call to
RequireCompleteType, I believe that it is superfluous given the current
state of clang.
llvm-svn: 247367
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
With Visual Studio 2015 release, a part of runtime library was extracted
and now comes with Windows Kits. This patch enables clang to use
Universal CRT library if %INCLUDE or %LIB environment varaibles are not
specified.
See also https://llvm.org/bugs/show_bug.cgi?id=24741
Patch by Igor Kudrin
Reviewers: zturner, hans, rnk
Subscribers: ruiu, cfe-commits
Differential Revision: http://reviews.llvm.org/D12695
llvm-svn: 247362
|
|
|
|
|
|
| |
rdar://6198039
llvm-svn: 247350
|
|
|
|
|
|
|
| |
Cleanupendpad is a lot like catchendpad, so we can reuse the same
EHScopeStack type.
llvm-svn: 247349
|
|
|
|
|
|
|
| |
The type of a member pointer is incomplete if it has no inheritance
model. This lets us reuse more general logic already embedded in clang.
llvm-svn: 247346
|
|
|
|
|
|
|
|
| |
It seems that there is small bug, and we can't generate assume loads
when some virtual functions have internal visibiliy
This reverts commit 982bb7d966947812d216489b3c519c9825cacbf2.
llvm-svn: 247332
|
|
|
|
| |
llvm-svn: 247324
|
|
|
|
| |
llvm-svn: 247319
|
|
|
|
|
|
| |
Also add tests for SEH with the new IRGen.
llvm-svn: 247318
|
|
|
|
|
|
|
|
| |
Link in and internalize the symbols we need from supplied bitcode library.
Differential Revision: http://reviews.llvm.org/D11664
llvm-svn: 247317
|