| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
class and to bind the shared value using OpaqueValueExpr. This fixes an
unnoticed problem with deserialization of these expressions where the
deserialized form would lose the vital pointer-equality trait; or rather,
it fixes it because this patch also does the right thing for deserializing
OVEs.
Change OVEs to not be a "temporary object" in the sense that copy elision is
permitted.
This new representation is not totally unawkward to work with, but I think
that's really part and parcel with the semantics we're modelling here. In
particular, it's much easier to fix things like the copy elision bug and to
make the CFG look right.
I've tried to update the analyzer to deal with this in at least some
obvious cases, and I think we get a much better CFG out, but the printing
of OpaqueValueExprs probably needs some work.
llvm-svn: 125744
|
| |
|
|
| |
llvm-svn: 125217
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
there were only three virtual methods of any significance.
The primary way to grab child iterators now is with
Stmt::child_range children();
Stmt::const_child_range children() const;
where a child_range is just a std::pair of iterators suitable for
being llvm::tie'd to some locals. I've left the old child_begin()
and child_end() accessors in place, but it's probably a substantial
penalty to grab the iterators individually now, since the
switch-based dispatch is kindof inherently slower than vtable
dispatch. Grabbing them together is probably a slight win over the
status quo, although of course we could've achieved that with vtables, too.
I also reclassified SwitchCase (correctly) as an abstract Stmt
class, which (as the first such class that wasn't an Expr subclass)
required some fiddling in a few places.
There are somewhat gross metaprogramming hooks in place to ensure
that new statements/expressions continue to implement
getSourceRange() and children(). I had to work around a recent clang
bug; dgregor actually fixed it already, but I didn't want to
introduce a selfhosting dependency on ToT.
llvm-svn: 125183
|
| |
|
|
|
|
|
| |
on, as well as more reliably limiting invalid references to locals from
nested scopes.
llvm-svn: 124721
|
| |
|
|
|
|
| |
converting getBaseClassOffsetInBits() to CharUnits.
llvm-svn: 124274
|
| |
|
|
|
|
| |
Part of the fix for PR8413.
llvm-svn: 123904
|
| |
|
|
|
|
| |
ASTContext::toCharUnitsFromBits() when converting from bit sizes to char units.
llvm-svn: 123715
|
| |
|
|
|
|
|
|
|
| |
that captures the substitution of a non-type template argument pack
for a non-type template parameter pack within a pack expansion that
cannot be fully expanded. This follows the approach taken by
SubstTemplateTypeParmPackType.
llvm-svn: 123506
|
| |
|
|
| |
llvm-svn: 123421
|
| |
|
|
|
|
|
| |
and mark the fields they use as mutable. This allows us to remove a few
const_casts.
llvm-svn: 123314
|
| |
|
|
|
|
|
|
|
| |
parameter pack.
Note that we're missing proper libclang support for the new
SizeOfPackExpr expression node.
llvm-svn: 122813
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
template argument (described by an expression, of course). For
example:
template<int...> struct int_tuple { };
template<int ...Values>
struct square {
typedef int_tuple<(Values*Values)...> type;
};
It also lays the foundation for pack expansions in an initializer-list.
llvm-svn: 122751
|
| |
|
|
|
|
|
|
|
| |
new gcc warning that complains on self-assignments and
self-initializations. Fix one bug found by the warning, in which one
clang::OverloadCandidate constructor failed to initialize its
FunctionTemplate member.
llvm-svn: 122459
|
| |
|
|
|
|
|
| |
the basic casting logic to insert intermediate casts and preserve the
exact complex-cast design. Fixes a crash in the test suite.
llvm-svn: 121776
|
| |
|
|
| |
llvm-svn: 121616
|
| |
|
|
|
|
| |
BinaryTypeTraitExpr.
llvm-svn: 121298
|
| |
|
|
|
|
|
|
| |
zextOrTrunc(), and APSInt methods extend(), extOrTrunc() and new method
trunc(), to be const and to return a new value instead of modifying the
object in place.
llvm-svn: 121121
|
| |
|
|
|
|
| |
New AST node introduced: BinaryTypeTraitExpr; to be reused for more intrinsics.
llvm-svn: 121074
|
| |
|
|
|
|
| |
reason this is limited to C++, and it's certainly not limited to temporaries.
llvm-svn: 120996
|
| |
|
|
|
|
|
|
| |
ObjCPropertyRefExpr
into the latter.
llvm-svn: 120643
|
| |
|
|
| |
llvm-svn: 119331
|
| |
|
|
|
|
|
| |
certain internal type-checking procedures as well as for representing
certain implicitly-generated operations. Uses to follow.
llvm-svn: 119289
|
| |
|
|
|
|
|
|
|
|
| |
implicit conversions; the last batch was specific to promotions.
I think this is the full set we need. I do think dividing the cast
kinds into floating and integral is probably a good idea.
Annotate a *lot* more C casts with useful cast kinds.
llvm-svn: 119036
|
| |
|
|
|
|
| |
between complex types.
llvm-svn: 118994
|
| |
|
|
| |
llvm-svn: 118966
|
| |
|
|
|
|
|
|
|
|
|
| |
own subcategory, -Wconstant-conversion, which is on by default.
Tweak the constant folder to give better results in the invalid
case of a negative shift amount.
Implements rdar://problem/6792488
llvm-svn: 118636
|
| |
|
|
|
|
| |
getBaseClassOffset which returns the offset in CharUnits. Do the same thing for getVBaseClassOffset.
llvm-svn: 117881
|
| |
|
|
|
|
| |
virtual bases are involved. Fixes PR5974.
llvm-svn: 117868
|
| |
|
|
|
|
| |
Fixes PR8507.
llvm-svn: 117850
|
| |
|
|
|
|
|
| |
'super' as receiver of property or a setter/getter
methods. //rdar: //8525788
llvm-svn: 116483
|
| |
|
|
|
|
| |
constant initializers.
llvm-svn: 116138
|
| |
|
|
|
|
| |
need Sema access to be correct, fixes coming up.
llvm-svn: 113782
|
| |
|
|
| |
llvm-svn: 113624
|
| |
|
|
| |
llvm-svn: 113623
|
| |
|
|
|
|
|
| |
the call argument is a string literal. Fixes
<rdar://problem/8413477>.
llvm-svn: 113580
|
| |
|
|
| |
llvm-svn: 113444
|
| |
|
|
| |
llvm-svn: 113132
|
| |
|
|
|
|
|
|
| |
initializers, so the result of the evaluation doesn't leak through
inconsistently. Also, don't evaluate references to variables with
initializers with side-effects.
llvm-svn: 113128
|
| |
|
|
|
|
| |
well-intentioned but completely unused code.
llvm-svn: 112868
|
| |
|
|
|
|
| |
some issues being sorted out.
llvm-svn: 112493
|
| |
|
|
|
|
|
|
|
|
| |
The extra data stored on user-defined literal Tokens is stored in extra
allocated memory, which is managed by the PreprocessorLexer because there isn't
a better place to put it that makes sure it gets deallocated, but only after
it's used up. My testing has shown no significant slowdown as a result, but
independent testing would be appreciated.
llvm-svn: 112458
|
| |
|
|
|
|
| |
to the new constants.
llvm-svn: 112047
|
| |
|
|
|
|
| |
no functionality change.
llvm-svn: 111207
|
| |
|
|
| |
llvm-svn: 111080
|
| |
|
|
| |
llvm-svn: 110996
|
| |
|
|
|
|
|
| |
just means "not a function type", not "not a function type or void". This
changes behavior slightly, but generally in a way which accepts more code.
llvm-svn: 110303
|
| |
|
|
| |
llvm-svn: 109440
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
reinterpret_casts (possibly indirectly via C-style/functional casts)
on values, e.g.,
int i;
reinterpret_cast<short&>(i);
The IR generated for this is essentially the same as for
*reinterpret_cast<short*>(&i).
Fixes PR6437, PR7593, and PR7344.
llvm-svn: 108294
|
| |
|
|
|
|
| |
suppressing copies of objects with trivial copy constructors.
llvm-svn: 107857
|
| |
|
|
|
|
| |
breaking bootstrap on Linux.
llvm-svn: 107837
|