| Commit message (Collapse) | Author | Age | Files | Lines | 
| ... |  | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
as constants.
Refactor and simplify all the separate checks for whether a type can be
emitted as a constant.
llvm-svn: 150793
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
1) It has a const-qualified type, and
 2) It has no mutable members, and
 3) It has no dynamic initialization, and
 4) It has trivial destruction.
Remove the unnecessary requirement that the type be POD. This allows us to
mark all constexpr objects with no mutable members as 'constant'.
llvm-svn: 150792
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
optional argument passed through the variadic ellipsis)
potentially affects how we need to lower it.  Propagate
this information down to the various getFunctionInfo(...)
overloads on CodeGenTypes.  Furthermore, rename those
overloads to clarify their distinct purposes, and make
sure we're calling the right one in the right place.
This has a nice side-effect of making it easier to construct
a function type, since the 'variadic' bit is no longer
separable.
This shouldn't really change anything for our existing
platforms, with one minor exception --- we should now call
variadic ObjC methods with the ... in the "right place"
(see the test case), which I guess matters for anyone
running GNUStep on MIPS.  Mostly it's just a substantial
clean-up.
llvm-svn: 150788
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
conversion to function pointer. Rather than having IRgen synthesize
the body of this function, we instead introduce a static member
function "__invoke" with the same signature as the lambda's
operator() in the AST. Sema then generates a body for the conversion
to function pointer which simply returns the address of __invoke. This
approach makes it easier to evaluate a call to the conversion function
as a constant, makes the linkage of the __invoke function follow the
normal rules for member functions, and may make life easier down the
road if we ever want to constexpr'ify some of lambdas.
Note that IR generation is responsible for filling in the body of
__invoke (Sema just adds a dummy body), because the body can't
generally be expressed in C++.
Eli, please review!
llvm-svn: 150783
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
"Add a completed/incomplete type difference. This allows us to have
    partial types for contexts and forward decls while allowing us to
    complete types later on for debug purposes.
    This piggy-backs on the metadata replacement and rauw changes
    for temporary nodes and takes advantage of the incremental
    support I added in earlier. This allows us to, if we decide,
    to limit adding methods and variables to structures in order
    to limit the amount of debug information output into a .o file.
    The caching is a bit complicated though so any thoughts on
    untangling that are welcome."
with a fix:
 - Remove all RAUW during type construction by adding stub versions
   of types that we later complete.
and some TODOs:
 - Add an RAUW cache for forward declared types so that we can replace
   them at the end of compilation.
 - Remove the code that updates on completed types because we no
   longer need to have that happen. We emit incomplete types on
   purpose and only want to know when we want to complete them.
llvm-svn: 150752
 | 
| | 
| 
| 
|  | 
llvm-svn: 150738
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
hold the used constructor itself.""
This reintroduces commit r150682 with a fix for the Bullet benchmark crash.
llvm-svn: 150685
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
used constructor itself."
It leads to a compiler crash in the Bullet benchmark.
This reverts commit r12014.
llvm-svn: 150684
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
constructor itself.
Holding the constructor directly makes no sense when list-initialized arrays come into play. The constructor is now held in a CXXConstructExpr, if construction is what is done. The new design can also distinguish properly between list-initialization and direct-initialization, as well as implicit default-initialization constructors and explicit value-initialization constructors. Finally, doing it this way removes redundance from the AST because CXXNewExpr doesn't try to handle both the allocation and the initialization responsibilities.
This breaks the static analysis of new expressions. I've filed PR12014 to track this.
llvm-svn: 150682
 | 
| | 
| 
| 
| 
| 
|  | 
conversion-to-function-pointer operator.
llvm-svn: 150660
 | 
| | 
| 
| 
|  | 
llvm-svn: 150649
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
The garbage collection metadata needs to be merged "intelligently", when two or
more modules are linked together, and not merely appended. (Appending creates a
section which is too large.) The module flags metadata method is the way to do
this.
<rdar://problem/8198537>
llvm-svn: 150648
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
-fno-objc-arc-exceptions. This will allow the optimizer to perform
optimizations which are only safe under that flag.
This is a part of rdar://10803830.
llvm-svn: 150644
 | 
| | 
| 
| 
| 
| 
|  | 
as unscanned. // rdar://10832643
llvm-svn: 150639
 | 
| | 
| 
| 
| 
| 
|  | 
This reverts commit 9a68d4584afcd0853b930bd80235b58736e785b4.
llvm-svn: 150637
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
partial types for contexts and forward decls while allowing us to
complete types later on for debug purposes.
This piggy-backs on the metadata replacement and rauw changes
for temporary nodes and takes advantage of the incremental
support I added in earlier. This allows us to, if we decide,
to limit adding methods and variables to structures in order
to limit the amount of debug information output into a .o file.
The caching is a bit complicated though so any thoughts on
untangling that are welcome.
llvm-svn: 150631
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
is general goodness because representations of member pointers are
not always equivalent across member pointer types on all ABIs
(even though this isn't really standard-endorsed).
Take advantage of the new information to teach IR-generation how
to do these reinterprets in constant initializers.  Make sure this
works when intermingled with hierarchy conversions (although
this is not part of our motivating use case).  Doing this in the
constant-evaluator would probably have been better, but that would
require a *lot* of extra structure in the representation of
constant member pointers:  you'd really have to track an arbitrary
chain of hierarchy conversions and reinterpretations in order to
get this right.  Ultimately, this seems less complex.  I also
wasn't quite sure how to extend the constant evaluator to handle
foldings that we don't actually want to treat as extended
constant expressions.
llvm-svn: 150551
 | 
| | 
| 
| 
|  | 
llvm-svn: 150475
 | 
| | 
| 
| 
|  | 
llvm-svn: 150459
 | 
| | 
| 
| 
|  | 
llvm-svn: 150452
 | 
| | 
| 
| 
| 
| 
|  | 
EmitMemberInitializer.  The new function will be used to initialize the fields of lambda expressions.
llvm-svn: 150451
 | 
| | 
| 
| 
|  | 
llvm-svn: 150435
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
constructor, and that constructor is used to initialize an object of static
storage duration such that all members and bases are initialized by constant
expressions, constant initialization is performed. In this case, the object
can still have a non-trivial destructor, and if it does, we must emit a dynamic
initializer which performs no initialization and instead simply registers that
destructor.
llvm-svn: 150419
 | 
| | 
| 
| 
|  | 
llvm-svn: 150390
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
while reworking how we handle wanting to emit only parts of structures.
Fixes PR11970.
llvm-svn: 150388
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
instead of having a special-purpose function.
- ActOnCXXDirectInitializer, which was mostly duplication of
  AddInitializerToDecl (leading e.g. to PR10620, which Eli fixed a few days
  ago), is dropped completely.
- MultiInitializer, which was an ugly hack I added, is dropped again.
- We now have the infrastructure in place to distinguish between
  int x = {1};
  int x({1});
  int x{1};
-- VarDecl now has getInitStyle(), which indicates which of the above was used.
-- CXXConstructExpr now has a flag to indicate that it represents list-
   initialization, although this is not yet used.
- InstantiateInitializer was renamed to SubstInitializer and simplified.
- ActOnParenOrParenListExpr has been replaced by ActOnParenListExpr, which
  always produces a ParenListExpr. Placed that so far failed to convert that
  back to a ParenExpr containing comma operators have been fixed. I'm pretty
  sure I could have made a crashing test case before this.
The end result is a (I hope) considerably cleaner design of initializers.
More importantly, the fact that I can now distinguish between the various
initialization kinds means that I can get the tricky generalized initializer
test cases Johannes Schaub supplied to work. (This is not yet done.)
This commit passed self-host, with the resulting compiler passing the tests. I
hope it doesn't break more complicated code. It's a pretty big change, but one
that I feel is necessary.
llvm-svn: 150318
 | 
| | 
| 
| 
| 
| 
|  | 
examples seem to work.  Tests coming up soon.
llvm-svn: 150293
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
This changes function prolog in such a way as to avoid out-of-bounds
stack store in the case when coerce-to type has a larger storage size
than the real argument type.
Fixes PR11905.
llvm-svn: 150238
 | 
| | 
| 
| 
|  | 
llvm-svn: 150210
 | 
| | 
| 
| 
| 
| 
| 
|  | 
This looks like it had a small, but measurable performance improvement on -O0
compile time for our ObjC tests.
llvm-svn: 150208
 | 
| | 
| 
| 
| 
| 
| 
|  | 
Double fields of by-value class objects should be passed in floating point
registers.
llvm-svn: 150200
 | 
| | 
| 
| 
| 
| 
|  | 
class objects follow the same rules as those returning struct objects.
llvm-svn: 150196
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
difference in the qual type. This is a workaround for the fact that
the type isn't artificial but the this decl is, however, we don't
have any way of representing it in the current metadata. For now,
however, just don't cache the full type.
Fixes rdar://10831526 and probably a couple of others.
llvm-svn: 150159
 | 
| | 
| 
| 
|  | 
llvm-svn: 150147
 | 
| | 
| 
| 
|  | 
llvm-svn: 150146
 | 
| | 
| 
| 
| 
| 
|  | 
lvalue-to-rvalue conversions in constant expressions.
llvm-svn: 150145
 | 
| | 
| 
| 
|  | 
llvm-svn: 150141
 | 
| | 
| 
| 
|  | 
llvm-svn: 150140
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
other users.
While at it make it value-initializable to get rid of static ctors.
llvm-svn: 150070
 | 
| | 
| 
| 
|  | 
llvm-svn: 150058
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
and then use it for forward decl names.
Part of rdar://10209967 and rdar://10400981
llvm-svn: 150040
 | 
| | 
| 
| 
| 
| 
|  | 
registers.
llvm-svn: 150035
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
caching of results after we create them.
Fixes rdar://10809898
llvm-svn: 150025
 | 
| | 
| 
| 
|  | 
llvm-svn: 150021
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
operator overloads out of line.
This seems to negatively affect compile time onsome ObjC tests
(which use a lot of partial diagnostics I assume). I have to come
up with a way to keep them inline without including Diagnostic.h
everywhere. Now adding a new diagnostic requires a full rebuild
of e.g. the static analyzer which doesn't even use those diagnostics.
This reverts commit 6496bd10dc3a6d5e3266348f08b6e35f8184bc99.
This reverts commit 7af19b817ba964ac560b50c1ed6183235f699789.
This reverts commit fdd15602a42bbe26185978ef1e17019f6d969aa7.
This reverts commit 00bd44d5677783527d7517c1ffe45e4d75a0f56f.
This reverts commit ef9b60ffed980864a8db26ad30344be429e58ff5.
llvm-svn: 150006
 | 
| | 
| 
| 
|  | 
llvm-svn: 150000
 | 
| | 
| 
| 
|  | 
llvm-svn: 149996
 | 
| | 
| 
| 
|  | 
llvm-svn: 149995
 | 
| | 
| 
| 
| 
| 
|  | 
consistency with NamedDecls.
llvm-svn: 149981
 | 
| | 
| 
| 
|  | 
llvm-svn: 149976
 |