| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
- <rdar://problem/7919678>
llvm-svn: 102559
|
| |
|
|
|
|
|
| |
as well as pre- and post-inc/decrements in C (not that I think it
matters for any C code).
llvm-svn: 102552
|
| |
|
|
|
|
| |
members of anonymous structs/unions
llvm-svn: 102551
|
| |
|
|
| |
llvm-svn: 102548
|
| |
|
|
|
|
|
| |
of c++ objects (NeXt runtime).
radar 7900343.
llvm-svn: 102546
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Amadini.
This change introduces a new expression node type, OffsetOfExpr, that
describes __builtin_offsetof. Previously, __builtin_offsetof was
implemented using a unary operator whose subexpression involved
various synthesized array-subscript and member-reference expressions,
which was ugly and made it very hard to instantiate as a
template. OffsetOfExpr represents the AST more faithfully, with proper
type source information and a more compact representation.
OffsetOfExpr also has support for dependent __builtin_offsetof
expressions; it can be value-dependent, but will never be
type-dependent (like sizeof or alignof). This commit introduces
template instantiation for __builtin_offsetof as well.
There are two major caveats to this patch:
1) CodeGen cannot handle the case where __builtin_offsetof is not a
constant expression, so it produces an error. So, to avoid
regressing in C, we retain the old UnaryOperator-based
__builtin_offsetof implementation in C while using the shiny new
OffsetOfExpr implementation in C++. The old implementation can go
away once we have proper CodeGen support for this case, which we
expect won't cause much trouble in C++.
2) __builtin_offsetof doesn't work well with non-POD class types,
particularly when the designated field is found within a base
class. I will address this in a subsequent patch.
Fixes PR5880 and a bunch of assertions when building Boost.Python
tests.
llvm-svn: 102542
|
| |
|
|
|
|
|
|
| |
expected-error-re {{someregex}}
Patch by mike-m!
llvm-svn: 102516
|
| |
|
|
|
|
| |
compatibility of", it is breaking the builds of quite a few projects (emacs, dovecot, gnutar, bison).
llvm-svn: 102501
|
| |
|
|
|
|
|
|
|
| |
complete, return an error rather than falling back to building a
dependent declaration reference, since we might not be in a dependent
context. Fixes a fiendish crash-on-invalid in Boost.FunctionTypes that
I wasn't able to reduce to anything useful.
llvm-svn: 102491
|
| |
|
|
|
|
|
|
| |
T::template apply<U>), handling a few cases where we previously failed
and performing substitutions on such dependent names. Fixes a crash in
Boost.PropertyTree.
llvm-svn: 102490
|
| |
|
|
|
|
|
|
| |
template argument deduction, use the lexical declaration context as
the owner for friend function templates. Fixes 2 failures in
Boost.Graph.
llvm-svn: 102489
|
| |
|
|
|
|
| |
incomplete type. Fixes PR6911.
llvm-svn: 102473
|
| |
|
|
|
|
| |
visible. Fixes the remaining two failures in Boost.ScopeExit.
llvm-svn: 102466
|
| |
|
|
|
|
|
|
|
| |
function types.
This could potentially have unexpected side-effects, so look here if there are
new regressions.
llvm-svn: 102464
|
| |
|
|
|
|
|
|
|
|
|
| |
keep track of whether we need to zero-initialize storage prior to
calling its constructor. Previously, we were only tracking this when
implicitly constructing the object (a CXXConstructExpr).
Fixes Boost's value-initialization tests, which means that the
Boost.Config library now passes all of its tests.
llvm-svn: 102461
|
| |
|
|
|
|
|
|
|
|
| |
we were relying on checking for abstract class types when an array
type was actually used to declare a variable, parameter, etc. However,
we need to check when the construct the array for, e.g., SFINAE
purposes (see DR337). Fixes problems with Boost's is_abstract type
trait.
llvm-svn: 102452
|
| |
|
|
|
|
|
| |
tag of the same name, compare the lookup contexts rather than the
actual contexts. Fixes PR6923.
llvm-svn: 102437
|
| |
|
|
|
|
| |
variables. Fixes PR6948.
llvm-svn: 102436
|
| |
|
|
|
|
|
| |
expressions, be sure to set the naming class of the LookupResult
structure. Fixes PR6947.
llvm-svn: 102434
|
| |
|
|
|
|
| |
with a qualifier referencing a different type.
llvm-svn: 102409
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
of a class template or class template partial specialization. That is to
say, in
template <class T> class A { ... };
or
template <class T> class B<const T*> { ... };
make 'A<T>' and 'B<const T*>' sugar for the corresponding InjectedClassNameType
when written inside the appropriate context. This allows us to track the
current instantiation appropriately even inside AST routines. It also allows
us to compute a DeclContext for a type much more efficiently, at some extra
cost every time we write a template specialization (which can be optimized,
but I've left it simple in this patch).
llvm-svn: 102407
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
by using TypeSourceInfo, cleaning up the representation
somewhat. Teach getTypeOperand() to strip references and
cv-qualifiers, providing the semantic view of the type without
requiring any extra storage (the unmodified type remains within the
TypeSourceInfo). This fixes a bug found by Boost's call_traits test.
Finally, clean up semantic analysis, by splitting the ActOnCXXTypeid
routine into ActOnCXXTypeId (the parser action) and two BuildCXXTypeId
functions, which perform the semantic analysis for typeid(type) and
typeid(expression), respectively. We now perform less work at template
instantiation time (we don't look for std::type_info again) and can
give better diagnostics.
llvm-svn: 102393
|
| |
|
|
| |
llvm-svn: 102390
|
| |
|
|
| |
llvm-svn: 102388
|
| |
|
|
|
|
|
|
| |
thing. Audit all uses of Type::isStructure(), changing those calls to
isStructureOrClassType() as needed (which is alsmost
everywhere). Fixes the remaining failure in Boost.Utility/Swap.
llvm-svn: 102386
|
| |
|
|
|
|
| |
on a method declaration (radar 7822196).
llvm-svn: 102383
|
| |
|
|
|
|
|
| |
Objective-C++. This is the last bit of (non-blocks-related) template
instantiation logic for Objective-C++. Yay!
llvm-svn: 102382
|
| |
|
|
| |
llvm-svn: 102379
|
| |
|
|
|
|
| |
mode.
llvm-svn: 102377
|
| |
|
|
|
|
|
|
| |
references and isa expressions. Also, test template instantiation of
unresolved member references to Objective-C ivar references and isa
expressions.
llvm-svn: 102374
|
| |
|
|
| |
llvm-svn: 102369
|
| |
|
|
| |
llvm-svn: 102357
|
| |
|
|
|
|
| |
statements. This is the last of the Objective-C statements.
llvm-svn: 102356
|
| |
|
|
|
|
|
|
| |
function-parameter checking and splitting it into the normal
ActOn*/Build* pair in Sema. We now use VarDecl to represent the @catch
parameter rather than the ill-fitting ParmVarDecl.
llvm-svn: 102347
|
| |
|
|
|
|
| |
on that type. Fixes several problems in Boost.Interprocess.
llvm-svn: 102339
|
| |
|
|
| |
llvm-svn: 102332
|
| |
|
|
|
|
|
|
| |
using declaration, look at its underlying declaration to determine the
lookup result kind (e.g., overloaded, unresolved). Fixes at least one
issue in Boost.Bimap.
llvm-svn: 102317
|
| |
|
|
|
|
|
| |
member expression (p-> or x.), by showing the type we looked into and
what we did actually find.
llvm-svn: 102315
|
| |
|
|
|
|
|
|
|
| |
- Fix some places that had the alignment hard coded.
- Use ABI type alignment, not preferred type alignment -- neither of this is exactly right, as we really want the C type alignment as required by the runtime, but the ABI alignment is a more correct choice.
This should be equivalent for x86_64, but fixes the alignment for ARM.
llvm-svn: 102314
|
| |
|
|
| |
llvm-svn: 102313
|
| |
|
|
|
|
| |
fixes Clang to correctly emit the "CorrectedSynthesize" bit when using the non-fragile ABI.
llvm-svn: 102312
|
| |
|
|
|
|
| |
through using declarations. Fixes ~18 tests in Boost.Fusion.
llvm-svn: 102311
|
| |
|
|
| |
llvm-svn: 102292
|
| |
|
|
| |
llvm-svn: 102291
|
| |
|
|
|
|
|
| |
temporary needs to be bound, bind the copy object. Otherwise, we won't
end up calling the destructor for the copy. Fixes Boost.Optional.
llvm-svn: 102290
|
| |
|
|
| |
llvm-svn: 102289
|
| |
|
|
|
|
|
| |
bind, check accessibility of the destructor and mark the declaration
as referenced. Fixes a bunch of Boost.Regex failures.
llvm-svn: 102287
|
| |
|
|
|
|
| |
implicit base initializers. (Member initializers are still handled by CodeGenFunction::SynthesizeCXXCopyConstructor for now).
llvm-svn: 102279
|
| |
|
|
|
|
|
|
|
|
| |
that the type we're copying is complete.
Boost.Regex now builds, although it's failing its regression tests
with our favorite "Sema doesn't consider destructor as used."
assertion.
llvm-svn: 102271
|
| |
|
|
|
|
|
|
|
|
|
| |
copy constructor, suppress user-defined conversions on the
argument. Otherwise, we can end up in a recursion loop where the
bind the argument of the copy constructor to another copy constructor call,
whose argument is then a copy constructor call...
Found by Boost.Regex which, alas, still isn't building.
llvm-svn: 102269
|