Douglas Gregor [Tue, 27 Apr 2010 19:38:14 +0000 (19:38 +0000)]
Diagnose the use of abstract types as array element types. Previously,
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.
Douglas Gregor [Tue, 27 Apr 2010 18:19:34 +0000 (18:19 +0000)]
During template instantiation, set the naming class of
UnresolvedLookupExpr and UnresolvedMemberExpr by substituting the
naming class we computed when building the expression in the
template...
... which we didn't always do correctly. Teach
UnresolvedMemberExpr::getNamingClass() all about the new
representation of injected-class-names in templates, so that it can
return a naming class that is the current instantiation.
Also, when decomposing a template-id into its template name and its
arguments, be sure to set the naming class on the LookupResult
structure.
Douglas Gregor [Tue, 27 Apr 2010 16:26:47 +0000 (16:26 +0000)]
When checking the redeclaration context of a typedef that refers to a
tag of the same name, compare the lookup contexts rather than the
actual contexts. Fixes PR6923.
Douglas Gregor [Tue, 27 Apr 2010 16:10:10 +0000 (16:10 +0000)]
When instantiating UnresolvedLookupExpr and UnresolvedMemberExpr
expressions, be sure to set the naming class of the LookupResult
structure. Fixes PR6947.
David Chisnall [Tue, 27 Apr 2010 15:08:48 +0000 (15:08 +0000)]
Ensure return from a message to nil is always 0 (GNU runtime).
This works around stack corruption / crashes resulting from PR6944, and also
works around people who expect 'what works on my machine' to work everywhere
(GCC crashes in a number of cases on SPARC that should now work correctly with
clang).
John McCall [Tue, 27 Apr 2010 00:57:59 +0000 (00:57 +0000)]
Make the InjectedClassNameType the canonical type of the current instantiation
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).
Douglas Gregor [Mon, 26 Apr 2010 22:37:10 +0000 (22:37 +0000)]
Improve source-location information in a C++ typeid (type) expression
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.
Chris Lattner [Mon, 26 Apr 2010 22:08:10 +0000 (22:08 +0000)]
fix PR6936: don't generate line marker directives when preprocessing
.S files. "# 123" is passed through as-is, not treated as a line
marker in this mode. No testcase, because it would be nasty and isn't
worth it.
Douglas Gregor [Mon, 26 Apr 2010 21:31:17 +0000 (21:31 +0000)]
Introduce Type::isStructureOrClassType(), which does the obvious
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.
Douglas Gregor [Mon, 26 Apr 2010 21:04:54 +0000 (21:04 +0000)]
Implement template instantiation for implicit property references in
Objective-C++. This is the last bit of (non-blocks-related) template
instantiation logic for Objective-C++. Yay!
Douglas Gregor [Mon, 26 Apr 2010 20:11:03 +0000 (20:11 +0000)]
Implement template instantiation for value-dependent Objective-C ivar
references and isa expressions. Also, test template instantiation of
unresolved member references to Objective-C ivar references and isa
expressions.
Douglas Gregor [Mon, 26 Apr 2010 17:32:49 +0000 (17:32 +0000)]
Refactor Objective-C @catch parameter checking by detangling it from
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.
Douglas Gregor [Mon, 26 Apr 2010 16:46:50 +0000 (16:46 +0000)]
Make the static type of the exception variable in an Objective-C
@catch a VarDecl. The dynamic type is still a ParmVarDecl, but that
will change soon. No effective functionality change.
Douglas Gregor [Sun, 25 Apr 2010 21:15:30 +0000 (21:15 +0000)]
When name lookup finds a single declaration that was imported via a
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.
Douglas Gregor [Sun, 25 Apr 2010 20:55:08 +0000 (20:55 +0000)]
Improve the diagnostic when we find something we did not expect in a
member expression (p-> or x.), by showing the type we looked into and
what we did actually find.
Daniel Dunbar [Sun, 25 Apr 2010 20:39:32 +0000 (20:39 +0000)]
IRgen/NeXT: Fix several alignment issues with Objective-C metadata symbols:
- 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.
Daniel Dunbar [Sun, 25 Apr 2010 20:39:01 +0000 (20:39 +0000)]
IRgen/NeXT: Reuse EmitImageInfo for both fragile and non-fragile ABI. This fixes Clang to correctly emit the "CorrectedSynthesize" bit when using the non-fragile ABI.
Douglas Gregor [Sun, 25 Apr 2010 00:55:24 +0000 (00:55 +0000)]
When copying a temporary object to initialize an entity for which the
temporary needs to be bound, bind the copy object. Otherwise, we won't
end up calling the destructor for the copy. Fixes Boost.Optional.
Douglas Gregor [Sat, 24 Apr 2010 23:45:46 +0000 (23:45 +0000)]
When we create a temporary of class type that we don't immediately
bind, check accessibility of the destructor and mark the declaration
as referenced. Fixes a bunch of Boost.Regex failures.
Anders Carlsson [Sat, 24 Apr 2010 22:25:18 +0000 (22:25 +0000)]
DefineImplicitCopyConstructor now uses SetBaseOrMemberInitializers to create implicit base initializers. (Member initializers are still handled by CodeGenFunction::SynthesizeCXXCopyConstructor for now).
Douglas Gregor [Sat, 24 Apr 2010 20:54:38 +0000 (20:54 +0000)]
When we are performing copy initialization of a class type via its
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.
Daniel Dunbar [Sat, 24 Apr 2010 20:32:12 +0000 (20:32 +0000)]
Headers: Hide intptr_t and uintptr_t definitions behind _INTPTR_T and _UINTPTR_T
defines, for increased compatibility with Darwin gcc.
- This is a bit of a hack, since platform compatibility issues don't belong
here, but I don't think this hurts anyone either.
Douglas Gregor [Sat, 24 Apr 2010 18:20:53 +0000 (18:20 +0000)]
When we take the address of a declaration to bind it to a non-type
template parameter, by sure to mark that declaration as
"referenced". The Boost.Iterator library now passes all tests.
Douglas Gregor [Sat, 24 Apr 2010 16:38:41 +0000 (16:38 +0000)]
Be more careful around dependent nested-name-specifiers, complaining
when they are not complete (since we could not match them up to
anything) and ensuring that enum parsing can cope with dependent
elaborated-type-specifiers. Fixes PR6915 and PR6649.
Douglas Gregor [Sat, 24 Apr 2010 15:35:55 +0000 (15:35 +0000)]
Keep track of when DependentNameTypes have no associated keyword
(e.g., no typename, enum, class, etc.), e.g., because the context is
one that is known to refer to a type. Patch from Enea Zaffanella!
Dan Gohman [Sat, 24 Apr 2010 04:55:02 +0000 (04:55 +0000)]
Fix a place in inline asm lowering which was creating a TruncInst with a
pointer operand. This fixes an abort on
MultiSource/Applications/ClamAV/libclamav_mbox.c.
John McCall [Sat, 24 Apr 2010 01:30:58 +0000 (01:30 +0000)]
Recommit r102215, this time being more careful to only set the "principal
declaration" (i.e. the only which will actually be looked up) to have the
non-member-operator bit.
Douglas Gregor [Fri, 23 Apr 2010 23:01:43 +0000 (23:01 +0000)]
Rework Parser-Sema interface for Objective-C @catch exception object
arguments. Rather than having the parser call ActOnParamDeclarator
(which is a bit of a hack), call a new ActOnObjCExceptionDecl
action. We'll be moving more functionality into this handler to
perform earlier checking of @catch.
Douglas Gregor [Fri, 23 Apr 2010 22:50:49 +0000 (22:50 +0000)]
Improve the AST representation of Objective-C @try/@catch/@finally
statements. Instead of the @try having a single @catch, where all of
the @catch's were chained (using an O(n^2) algorithm nonetheless),
@try just holds an array of its @catch blocks. The resulting AST is
slightly more compact (not important) and better represents the actual
language semantics (good).
Anders Carlsson [Fri, 23 Apr 2010 20:40:38 +0000 (20:40 +0000)]
Add an inheritance path member variable to CastExpr. For now it's always null but for derived-to-base and base-to-derived cast expressions it will contain the full base path. This is needed to avoid ambiguities.
Daniel Dunbar [Fri, 23 Apr 2010 19:12:32 +0000 (19:12 +0000)]
NeXT/EH: When generating the rethrow code for a finally block, make sure to
chain outwards when inside a nested exception scope.
- A real test for this is going into LLVM test-suite.