Commit Graph

9139 Commits

Author SHA1 Message Date
Alexis Hunt 4049b8d4cd Check for delegating constructors and (currently) return an error about them.
llvm-svn: 123076
2011-01-08 19:20:43 +00:00
Ted Kremenek bf4832cda8 Add semantic checking that the "thousands grouping"
prefix in a printf format string is matched
with the appropriate conversion specifier.

llvm-svn: 123055
2011-01-08 05:28:46 +00:00
Ted Kremenek a322cae011 Add printf format string parsing support for '
prefix to format conversions (POSIX extension).

llvm-svn: 123054
2011-01-08 05:28:38 +00:00
Douglas Gregor 2cd32a0251 When instantiating the arguments to an initializer, use the
TreeTransform version of TransformExprs() rather than explicit loop,
so that we expand pack expansions properly. Test cast coming soon...

llvm-svn: 123014
2011-01-07 19:35:17 +00:00
Fariborz Jahanian 13f3b2f79b Update AST reader/writer to handle new AppleKext.
Fix an unexpected hickup caused by exceeding size of
generated table (and a misleading comment). Improve
on help message for -fapple-kext.

llvm-svn: 123003
2011-01-07 18:59:25 +00:00
Douglas Gregor f30101186f Implement substitution of a function parameter pack for its set of
instantiated function parameters, enabling instantiation of arbitrary
pack expansions involving function parameter packs. At this point, we
can now correctly compile a simple, variadic print() example:

  #include <iostream>
  #include <string>

  void print() {}

  template<typename Head, typename ...Tail>
  void print(const Head &head, const Tail &...tail) {
    std::cout << head;
    print(tail...);
  }

  int main() {
    std::string hello = "Hello";
    print(hello, ", world!", " ", 2011, '\n');
  }

llvm-svn: 123000
2011-01-07 16:43:16 +00:00
Francois Pichet 044f3d78f4 Prefix all attribute enumerators with attr_ for consistency.
llvm-svn: 122992
2011-01-07 03:17:31 +00:00
Francois Pichet a8fcc8d70b Do not use cdecl, fastcall, stdcall etc.. as identifier name. They are reserved keywords at least on MSVC.
llvm-svn: 122991
2011-01-07 02:58:13 +00:00
Fariborz Jahanian a4cfff87b9 Add all options needed to support -fapple-kext. wip.
llvm-svn: 122987
2011-01-07 01:05:02 +00:00
Douglas Gregor dd47216cc4 Factor out the template transformation of a sequence of function
parameters into parameter types, so that substitution of
explicitly-specified function template arguments uses the same
path. This enables the use of explicitly-specified function template
arguments with variadic templates.

llvm-svn: 122986
2011-01-07 00:20:55 +00:00
Douglas Gregor 7825bf3a12 Implement template argument deduction from a call to a function
template whose last parameter is a parameter pack. This allows us to
form a call to, e.g.,

  template<typename ...Args1, typename ...Args2>
  void f(std::pair<Args1, Args2> ...pairs);

given zero or more instances of "pair".

llvm-svn: 122973
2011-01-06 22:09:01 +00:00
Fariborz Jahanian b5b7e9088b Put warning about makeing a string writable into
its own deprecated diagnostics group so it can be
turned off selectively. // rdar://8827606

llvm-svn: 122967
2011-01-06 18:45:19 +00:00
Roman Divacky 965b0b72b1 PowerPC fixes.
Fix the width and align of bool type on Darwin to be 32bits
while keeping it 8 everywhere else.

Change the definition of va_list to default to SV4 ABI one
and let darwin subtarget override this.

Both changes submitted by Nathan Whitehorn and reviewed
by Rafael Espindola.

llvm-svn: 122956
2011-01-06 08:27:10 +00:00
Chandler Carruth 080afea262 Tweak the wording of this warning further based on a suggestion from Chris.
llvm-svn: 122951
2011-01-06 06:29:28 +00:00
John McCall 8190451ddc Introduce an AttributedType, but don't actually use it anywhere yet.
The initial TreeTransform is a cop-out, but it's more-or-less equivalent
to what we were doing before, or rather what we're doing now and might
eventually stop doing in favor of using this type.
I am simultaneously intrigued by the possibilities of rebuilding a
dependent Attri

llvm-svn: 122942
2011-01-06 01:58:22 +00:00
Douglas Gregor df50b8448c When default-initializing a TemplateArgumentLocInfo, make sure that we
initialize *all* of the bits to zero. Also, when the pattern of a
template argument pack expansion, make sure to set the ellipsis
location along all paths.

This should clear up the valgrind failure that popped up in Clang.

llvm-svn: 122931
2011-01-06 00:33:28 +00:00
Douglas Gregor 5499af4ef9 Initial implementation of function parameter packs. This implementation allows:
1) Declaration of function parameter packs
  2) Instantiation of function parameter packs within function types.
  3) Template argument deduction of function parameter packs when
  matching two function types.

We're missing all of the important template-instantiation logic for
function template definitions, along with template argument deduction
from the argument list of a function call, so don't even think of
trying to use these for real yet.

llvm-svn: 122926
2011-01-05 23:12:31 +00:00
Douglas Gregor 3c6bd2ad38 Add Decl::isParameterPack(), which covers both function and template
parameter packs, along with ParmVarDecl::isParameterPack(), which
looks for function parameter packs. Use these routines to fix some
obvious FIXMEs.

llvm-svn: 122904
2011-01-05 21:11:38 +00:00
Argyrios Kyrtzidis 7a808c0f00 Use the proper enum as parameter, instead of unsigned. No functionality change.
llvm-svn: 122900
2011-01-05 20:09:36 +00:00
Douglas Gregor 79aaca42ac Eliminate two "unsupported" errors relating to variadic templates: one
for template template argument pack expansions (which was no longer
used) and another that was a placeholder for an llvm_unreachable.

llvm-svn: 122898
2011-01-05 19:06:29 +00:00
Douglas Gregor e4ff4b56fe Replace the representation of template template argument pack
expansions with something that is easier to use correctly: a new
template argment kind, rather than a bit on an existing kind. Update
all of the switch statements that deal with template arguments, fixing
a few latent bugs in the process. I"m happy with this representation,
now.

And, oh look! Template instantiation and deduction work for template
template argument pack expansions.

llvm-svn: 122896
2011-01-05 18:58:31 +00:00
Douglas Gregor eb29d18e5d Add semantic analysis for the creation of and an AST representation
for template template argument pack expansions. This allows fun such
as: 

  template<template<class> class ...> struct apply_impl { /*...*/ };
  template<template<class> class ...Metafunctions> struct apply {
    typedef typename apply_impl<Metafunctions...>::type type;
  };

However, neither template argument deduction nor template
instantiation is implemented for template template argument packs, so
this functionality isn't useful yet.

I'll probably replace the encoding of template template
argument pack expansions in TemplateArgument so that it's harder to
accidentally forget about the expansion. However, this is a step in
the right general direction.

llvm-svn: 122890
2011-01-05 17:40:24 +00:00
Douglas Gregor cdc62c938a Implement proper parameter pack matching for non-type template
parameters and template template parameters.

llvm-svn: 122875
2011-01-05 16:01:49 +00:00
Douglas Gregor f550077ef5 Implement support for template template parameter packs, e.g.,
template<template<class> class ...Metafunctions>
    struct apply_to_each;

llvm-svn: 122874
2011-01-05 15:48:55 +00:00
John McCall 3882ace207 Refactor the application of type attributes so that attributes from
the declaration-specifiers and on the declarator itself are moved
to the appropriate declarator chunk.  This permits a greatly
simplified model for how to apply these attributes, as well as
allowing a much more efficient query for the GC attribute.
Now all qualifier queries follow the same basic strategy of
"local qualifiers, local qualifiers on the canonical type,
then look through arrays".  This can be easily optimized by
changing the canonical qualified-array-type representation.

Do not process type attributes as decl attributes on declarations
with declarators.

When computing the type of a block, synthesize a prototype
function declarator chunk if the decl-spec type was not a
function.  This simplifies the logic for building block signatures.

Change the logic which inserts an objc_read_weak on a block
literal to only fire if the block has a __weak __block variable,
rather than if the return type of the block is __weak qualified,
which is not actually a sensible thing to ask.

llvm-svn: 122871
2011-01-05 12:14:39 +00:00
Douglas Gregor 66990031e2 Many of the built-in operator candidates introduced into overload
resolution require that the pointed-to type be an object type, but we
weren't filtering out non-object types. Do so, fixing PR7851.

llvm-svn: 122853
2011-01-05 00:13:17 +00:00
Douglas Gregor ca4686dc38 Improve our handling of non-type template parameters in partial
specializations. We weren't dealing with any of the cases where the
type of the non-type template argument differs from the type of the
corresponding template parameter in the primary template. We would
think that the template parameter in the partial specialization was
not deducible (and warn about it, incorrectly), then fail to convert a
deduced parameter to the type of the template parameter in the partial
specialization (which may involve truncation, among other
things). Fixes PR8905.

llvm-svn: 122851
2011-01-04 23:35:54 +00:00
Matt Beaumont-Gay 7237c4c4a6 Fix wording for err_invalid_use_of_bound_member_func
llvm-svn: 122846
2011-01-04 22:22:07 +00:00
Fariborz Jahanian 3aa19e9a70 Fold -fobjc-nonfragile-abi2 into -fobjc-nonfragile-abi.
// rdar://8818375

llvm-svn: 122831
2011-01-04 20:05:20 +00:00
Douglas Gregor 820ba7ba43 Implement the sizeof...(pack) expression to compute the length of a
parameter pack.

Note that we're missing proper libclang support for the new
SizeOfPackExpr expression node.

llvm-svn: 122813
2011-01-04 17:33:58 +00:00
Chandler Carruth e0cee6a8b0 Implement -Wself-assign, which warns on code such as:
int x = 42;
  x = x;  // Warns here.

The warning avoids macro expansions, templates, user-defined assignment
operators, and volatile types, so false positives are expected to be low.

The common (mis-)use of this code pattern is to silence unused variable
warnings, but a more idiomatic way of doing that is '(void)x;'.
A follow-up to this will add a note and fix-it hint suggesting this
replacement in cases where the StmtExpr consists precisely of the self
assignment.

llvm-svn: 122804
2011-01-04 06:52:15 +00:00
Chandler Carruth a92409c3ec Enhance the diagnostic for negative array sizes to include the
declaration name of the array when present. This ensures that
a poor-man's C++03 static_assert will include the user error message
often embedded in the name.

Update all the tests to reflect the new wording, and add a test for the
name behavior.

llvm-svn: 122802
2011-01-04 04:44:35 +00:00
Douglas Gregor 44e7df67d9 Implement pack expansion of base initializers, so that we can
initialize those lovely mixins that come from pack expansions of base
specifiers.

llvm-svn: 122793
2011-01-04 00:32:56 +00:00
Argyrios Kyrtzidis bd9dfb2e29 Rename MaybeSkipFunctionBodyForCodeCompletion -> trySkippingFunctionBodyForCodeCompletion and check isCodeCompletionEnabled() before doing the call.
Suggestions by Chris.

llvm-svn: 122792
2011-01-04 00:27:27 +00:00
Argyrios Kyrtzidis cd12b63b47 Fix 80 column violation.
llvm-svn: 122784
2011-01-03 23:15:14 +00:00
Douglas Gregor 752a595655 Implement pack expansions whose pattern is a base-specifier.
llvm-svn: 122782
2011-01-03 22:36:02 +00:00
Argyrios Kyrtzidis d5756a609d When in code-completion, skip obj-c method bodies for speed up.
llvm-svn: 122781
2011-01-03 22:33:06 +00:00
Douglas Gregor 875b6fe364 Unwrap template argument packs when checking the template arguments of
a class template partial specialiation, and look through pack
expansions when checking the conditions of C++0x [temp.class.spec]p8.

llvm-svn: 122774
2011-01-03 21:13:47 +00:00
Douglas Gregor 1440693c50 Diagnose the presence of unexpanded parameter packs within class
template partial specialization arguments.

llvm-svn: 122769
2011-01-03 20:35:03 +00:00
Argyrios Kyrtzidis a8636f1b3e Remove a couple of setters that have no callers.
llvm-svn: 122766
2011-01-03 19:52:51 +00:00
Argyrios Kyrtzidis 76dbe8c800 Speed up code-completion by skipping function bodies.
When we are in code-completion mode, skip parsing of all function bodies except the one where the
code-completion point resides.

For big .cpp files like 'SemaExpr.cpp' the improvement makes a huge difference, in some cases cutting down
code-completion time -62% !

We don't get diagnostics for the bodies though, so modify the code-completion tests that check for errors.

See rdar://8814203.

llvm-svn: 122765
2011-01-03 19:44:02 +00:00
Douglas Gregor a3efea1881 Refactor the tree transform's many loops over sets of expressions
(transforming each in turn) into calls into one central routine
(TransformExprs) that transforms a list of expressions. This
refactoring is preparatory work for pack expansions whose in an
expression-list. 

No functionality change.

llvm-svn: 122761
2011-01-03 19:04:46 +00:00
Douglas Gregor e8e9dd624c Implement support for pack expansions whose pattern is a non-type
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
2011-01-03 17:17:50 +00:00
Douglas Gregor bfe022caa1 When we attempt to create a built-in that involves a library type we
don't have access to (e.g., fprintf, which needs the library type
FILE), fail with a warning and forget about the builtin
entirely. Previously, we would actually provide an error, which breaks
autoconf's super-lame checks for fprintf, longjmp, etc. Fixes PR8316.

llvm-svn: 122744
2011-01-03 09:37:44 +00:00
Peter Collingbourne ed12ffb50f Unkown -> Unknown
llvm-svn: 122708
2011-01-02 19:53:12 +00:00
David Chisnall 50e4ebaeb8 Expose Objective-C type encodings of declarations to libclang users. This also adds a method in ASTContext which encodes FunctionDecls using the same encoding format that is used for Objective-C methods.
llvm-svn: 122639
2010-12-30 14:05:53 +00:00
Chris Lattner ad3467ee89 The -fshort-wchar option causes wchar_t to become unsigned, in addition to being
16-bits in size.  Implement this by splitting WChar into two enums, like we have
for char.  This fixes a miscompmilation of XULRunner, PR8856.

llvm-svn: 122558
2010-12-25 23:25:43 +00:00
Ted Kremenek 5614c46fcf Add basic support for pointer arithmetic in
SimpleSValBuilder.  This clears up some
false positives emitted by ArrayBoundCheckerV2
due to the lack of support for pointer arithmetic.

llvm-svn: 122546
2010-12-24 08:39:33 +00:00
Argyrios Kyrtzidis 9d6af5328e Remove the EntoSA directories.
llvm-svn: 122543
2010-12-24 06:19:58 +00:00
Chris Lattner 9c47b4ac28 don't use #pragma mark, it isn't portable.
llvm-svn: 122540
2010-12-24 04:45:23 +00:00
Michael J. Spencer 38e92f6734 ifndef _MSC_VER out #pragma mark on MSVC. It still tries to parse the text even
though it doesn't know what it is, and complains about invalid tokens ;/.

llvm-svn: 122538
2010-12-24 04:07:39 +00:00
John McCall 53fa71476d Refactor how we collect attributes during parsing, and add slots for attributes
on array and function declarators.  This is pretty far from complete, and I'll
revisit it later if someone doesn't beat me to it.

llvm-svn: 122535
2010-12-24 02:08:15 +00:00
Douglas Gregor da3cc0d3bf Add an AST representation for non-type template parameter
packs, e.g.,

  template<typename T, unsigned ...Dims> struct multi_array;

along with semantic analysis support for finding unexpanded non-type
template parameter packs in types, expressions, and so on.

Template instantiation involving non-type template parameter packs
probably doesn't work yet. That'll come soon.

llvm-svn: 122527
2010-12-23 23:51:58 +00:00
Douglas Gregor 27b4c16fef Implement parsing of function parameter packs and non-type template
parameter packs (C++0x [dcl.fct]p13), including disambiguation between
unnamed function parameter packs and varargs (C++0x [dcl.fct]p14) for
cases like 

  void f(T...)

where T may or may not contain unexpanded parameter packs.

llvm-svn: 122520
2010-12-23 22:44:42 +00:00
Ted Kremenek 1d56c9eed7 Add -fobjc-default-synthesized-properties flag
to allow us to explicitly control whether or
not Objective-C properties are default synthesized.
Currently this feature only works when using
the -fobjc-non-fragile-abi2 flag (so there is
no functionality change), but we can now turn
off this feature without turning off all the features
coupled with -fobjc-non-fragile-abi2.

llvm-svn: 122519
2010-12-23 21:35:43 +00:00
Ted Kremenek d99bd55a5e Chris Lattner has strong opinions about directory
layout.  :)

Rename the 'EntoSA' directories to 'StaticAnalyzer'.

Internally we will still use the 'ento' namespace
for the analyzer engine (unless there are further
sabre rattlings...).

llvm-svn: 122514
2010-12-23 19:38:26 +00:00
John McCall 112407a90e Kill RecordType::getAddressSpace() and its fixme; that's just not how
address spaces work.

llvm-svn: 122511
2010-12-23 17:56:54 +00:00
Douglas Gregor dd7ec463be Reimplement the comparison of a class template partial
specialization's template arguments against the primary template's
template arguments using the obvious, correct method of checking the
injected-class-name type (C++ [temp.class.spec]p9b3). The previous
incarnation of this comparison attempted to use its own formulation of
the injected-class-name, which is redudant and, with the introduction
of variadic templates, became wrong (again).

llvm-svn: 122508
2010-12-23 17:13:55 +00:00
Ted Kremenek ef33f0996c Rename headers: 'clang/GR' 'clang/EntoSA' and
update Makefile.

llvm-svn: 122493
2010-12-23 07:22:02 +00:00
Ted Kremenek 98857c9860 Rename static analyzer namespace 'GR' to 'ento'.
llvm-svn: 122492
2010-12-23 07:20:52 +00:00
Ted Kremenek e73571b9cc Add WIP prototype of a new buffer overflow
checker based on using raw (symbolic) byte offsets
from a base region.

llvm-svn: 122469
2010-12-23 02:42:43 +00:00
Ted Kremenek c9b76e4b6e Add 'getConditionType()' and 'getArrayIndexType()'
to SValBuilder.  These two query methods are useful
for constructing SVals.

llvm-svn: 122467
2010-12-23 02:42:34 +00:00
Jeffrey Yasskin b3321531a8 Change all self assignments X=X to (void)X, so that we can turn on a
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
2010-12-23 01:01:28 +00:00
Douglas Gregor 7f8e7681ad Unify the consistency checking for deduced template arguments into a
single routine. Extend that routine to handle consistency
checking for template argument packs, so that we can compare the
deduced packs for template parameter packs across different pack
expansions.

llvm-svn: 122452
2010-12-22 23:09:49 +00:00
Douglas Gregor 0f3feb4e8d Implement template argument deduction for pack expansions whose
pattern is a template argument, which involves repeatedly deducing
template arguments using the pattern of the pack expansion, then
bundling the resulting deductions into an argument pack.

We can now handle a variety of simple list-handling metaprograms using
variadic templates. See, e.g., the new "count" metaprogram.

llvm-svn: 122439
2010-12-22 21:19:48 +00:00
Fariborz Jahanian 0f0b302ffe Complain on missing property getter method only
if property-dot expression is decidedly
an rvalue. // rdar://8155806.

llvm-svn: 122430
2010-12-22 19:46:35 +00:00
Argyrios Kyrtzidis 1696f508e2 [analyzer] Refactoring: Drop the 'GR' prefix.
llvm-svn: 122424
2010-12-22 18:53:44 +00:00
Argyrios Kyrtzidis ca08fba414 [analyzer] Refactoring: Move stuff into namespace 'GR'.
llvm-svn: 122423
2010-12-22 18:53:20 +00:00
Argyrios Kyrtzidis 8d602a8aa8 [analyzer] Refactoring: include/clang/Checker -> include/clang/GR
llvm-svn: 122420
2010-12-22 18:51:49 +00:00
Douglas Gregor 7baabefa03 Implicitly expand argument packs when performing template argument
deduction. Unify all of the looping over template arguments for
deduction purposes into a single place, where argument pack expansion
occurs; this is also the hook for deducing from pack expansions, which
itself is not yet implemented.

For now, at least we can handle a basic "count" metafunction written
with variadics. See the new test for the formulation that works.

llvm-svn: 122418
2010-12-22 18:17:10 +00:00
Abramo Bagnara ea4f7c7761 Introduced raw_identifier token kind.
llvm-svn: 122394
2010-12-22 08:23:18 +00:00
Francois Pichet f3e5b4eb80 Redesign the way anonymous fields are handled in designated-initializers.
Previously designated anonymous fields were found via name lookup. This redesign uses the fact that an IndirectFieldDecl declaration will always follow an anonymous implicit field to remove the special case of name lookup. 

llvm-svn: 122387
2010-12-22 03:46:10 +00:00
Douglas Gregor 9246b6830a In C++, if the user redeclares a builtin function with a type that is
inconsistent with the type that the builtin *should* have, forget
about the builtin altogether: we don't want subsequence analyses,
CodeGen, etc., to think that we have a proper builtin function.

C is protected from errors here because it allows one to use a
library builtin without having a declaration, and detects inconsistent
(re-)declarations of builtins during declaration merging. C++ was
unprotected, and therefore would crash.

Fixes PR8839.

llvm-svn: 122351
2010-12-21 19:47:46 +00:00
Douglas Gregor 87e927520d Fix a major inconsistency in the representation of Objective-C
classes, categories, protocols, and class extensions, where the
methods and properties of these entities would be inserted into the
DeclContext in an ordering that doesn't necessarily reflect source
order. The culprits were Sema::ActOnMethodDeclaration(), which did not
perform the insertion of the just-created method declaration into
the DeclContext for these Objective-C entities, and
Sema::ActOnAtEnd(), which inserted all method declarations at the
*end* of the DeclContext. 

With this fix in hand, clean up the code-completion actions for
property setters/getters that worked around this brokenness in the AST.

Fixes <rdar://problem/8062781>, where this problem manifested as poor
token-annotation information, but this would have struck again in many
other places.

llvm-svn: 122347
2010-12-21 17:34:17 +00:00
Douglas Gregor 70226dada0 Implement BlockDecl::getSourceRange(). The bogus source-range
information caused token-annotation to fail in funny ways. Fixes
<rdar://problem/8595386>.

llvm-svn: 122338
2010-12-21 16:27:07 +00:00
Douglas Gregor ec9518be89 A class template partial specialization cannot be a friend. Fixes PR8649.
llvm-svn: 122325
2010-12-21 08:14:57 +00:00
Douglas Gregor 7ecd19ecde Teach clang_getCursorSemanticParent() and
clang_getCursorLexicalParent() to cope with class and function
templates, along with the parent of the translation unit. Fixes PR8761
and PR8766.

llvm-svn: 122324
2010-12-21 07:55:45 +00:00
Douglas Gregor 12a30ee83f Initialize LangOptions::MSCVersion. Thanks to Csaba Raduly for noting the omission
llvm-svn: 122318
2010-12-21 06:21:20 +00:00
Douglas Gregor 76aca7b2e8 Implement instantiation of pack expansions whose pattern is a type-id
in an exception specification.

llvm-svn: 122297
2010-12-21 00:52:54 +00:00
John McCall 991eb4b319 Fix the noreturn conversion to only strip off a single level of indirection.
Apply the noreturn attribute while creating a builtin function's type.
Remove the getNoReturnType() API.

llvm-svn: 122295
2010-12-21 00:44:39 +00:00
Fariborz Jahanian 7d6e11a192 Warn when message is sent to receiver of
unknown type and there is a possibility that
at runtime method is resolved to a deprecated or 
unavailable method.  Addreses // rdar://8769853

llvm-svn: 122294
2010-12-21 00:44:01 +00:00
Douglas Gregor 15b4ec22f1 Give the RecursiveASTVisitor a configuration function
shouldWalkTypesOfTypeLocs() that determines whether it should walk the
Types within TypeLocs. This walk is redundant, but perhaps required
for some clients. Disabling this redundant walk in the unexpanded
parameter pack finder produces better results, because we get
parameter packs with source location info *unless* such source
location information isn't available.

llvm-svn: 122287
2010-12-20 23:07:20 +00:00
Douglas Gregor 5ac4e5f812 Clean up the printing of template argument packs; previously, we were
getting extra "<>" delimiters around template argument packs.

llvm-svn: 122280
2010-12-20 22:28:59 +00:00
Douglas Gregor 840bd6cce5 Implement basic support for template instantiation of pack expansions
whose patterns are template arguments. We can now instantiate, e.g.,

  typedef tuple<pair<OuterTypes, InnerTypes>...> type;

where OuterTypes and InnerTypes are template type parameter packs.

There is a horrible inefficiency in
TemplateArgumentLoc::getPackExpansionPattern(), where we need to
create copies of TypeLoc data because our interfaces traffic in
TypeSourceInfo pointers where they should traffic in TypeLocs
instead. I've isolated in efficiency in this one routine; once we
refactor our interfaces to traffic in TypeLocs, we can eliminate it.

llvm-svn: 122278
2010-12-20 22:05:00 +00:00
Ted Kremenek 6fee7c2895 Rename 'VisitLocation' to 'visitLocation'.
llvm-svn: 122271
2010-12-20 21:22:47 +00:00
Ted Kremenek 750b7ac1d2 Rename 'Generate[Node,Sink]' to 'generate[Node,Sink]'.
llvm-svn: 122270
2010-12-20 21:19:09 +00:00
Douglas Gregor 0192c234d5 Clean up the handling of template argument packs, especially in the
area of printing template arguments. The functionality changes here
are limited to cases of variadic templates that aren't yet enabled.

llvm-svn: 122250
2010-12-20 16:52:59 +00:00
Francois Pichet 9dddd40a1c Emit an error if operator __uuidof() is called on a type with no associated GUID.
llvm-svn: 122226
2010-12-20 03:51:03 +00:00
Douglas Gregor d2fa766ad0 Introduce a new type, PackExpansionType, to capture types that are
pack expansions, e.g. given

  template<typename... Types> struct tuple;

  template<typename... Types>
  struct tuple_of_refs {
    typedef tuple<Types&...> types;
  };

the type of the "types" typedef is a PackExpansionType whose pattern
is Types&. 

This commit introduces support for creating pack expansions for
template type arguments, as above, but not for any other kind of pack
expansion, nor for any form of instantiation.

llvm-svn: 122223
2010-12-20 02:24:11 +00:00
Francois Pichet 7da1166da0 Validate Microsoft's uuid attribute string.
llvm-svn: 122220
2010-12-20 01:41:49 +00:00
Nick Lewycky 2e998b7a6e Add missing standard includes. Patch by Joerg Sonnenberger!
llvm-svn: 122194
2010-12-19 20:49:25 +00:00
Wesley Peck 36a1f68fec 1. Add some ABI information for the Microblaze.
2. Add attibutes "interrupt_handler" and "save_volatiles" for the Microblaze target.

llvm-svn: 122184
2010-12-19 19:57:51 +00:00
Francois Pichet a83957a5c9 Add support for the Microsoft uuid attribute:
example:
struct __declspec(uuid("6d5140c1-7436-11ce-8034-00aa006009fa"))
test { };

llvm-svn: 122173
2010-12-19 06:50:37 +00:00
John McCall 4f5019e670 Motions towards simplifying how we deal with attribute-qualified function types.
llvm-svn: 122162
2010-12-19 02:44:49 +00:00
Eric Christopher 62a78b04a8 Going back to the drawing board with these two awful hacks.
llvm-svn: 122096
2010-12-17 22:46:41 +00:00
Fariborz Jahanian 382c040da2 Warn when synthesizing a property which is
implicitly atomic under -Wimplicit-atomic-properties
flag. // rdar://8774580

llvm-svn: 122095
2010-12-17 22:28:16 +00:00
Bill Wendling 95e69bf775 Initialize variables in the correct order.
llvm-svn: 122084
2010-12-17 19:53:28 +00:00
Douglas Gregor a97c80bcd2 Encapsulate TemplateArgument::Kind
llvm-svn: 122083
2010-12-17 19:31:15 +00:00
Eric Christopher 4698e938b1 Horrible hack for systems that use -dumpversion with clang to expect versions
that match gcc versions. Eew.

llvm-svn: 122080
2010-12-17 19:13:21 +00:00
Eric Christopher 6cb5810a75 Nom nom nom, tasty unused option with an argument.
llvm-svn: 122079
2010-12-17 19:12:09 +00:00
Douglas Gregor 4e2749193b Swap the order of the condition and body of a do-while statement in
the AST, so that we visit them in source order. Fixes <rdar://problem/8779113>.

llvm-svn: 122062
2010-12-17 16:18:04 +00:00
Chris Lattner 4da4e2573b fix typo
llvm-svn: 122041
2010-12-17 05:40:22 +00:00
Ted Kremenek 853da96736 Move CocoaConventions.[h,cpp] from libChecker
to libAnalysis.  Similar to Format (format string checking), 
CocoaConventions has the
potential to serve clients other than the
static analyzer.

llvm-svn: 122040
2010-12-17 05:21:58 +00:00
Ted Kremenek 3a9a2a551c Rename several methods/functions in the analyzer
to start with lowercase characters.  No
functionality change.

llvm-svn: 122035
2010-12-17 04:44:39 +00:00
Francois Pichet bf067ba253 Microsoft's __uuidof operator returns a lvalue. Part 2.
llvm-svn: 122030
2010-12-17 02:38:13 +00:00
Douglas Gregor 72772f65ec Add tests checking for unexpanded parameter packs in declarations that
occur within statements. Teach Sema::ActOnExceptionDeclarator() to
check for unexpanded parameter packs in the exception type.

llvm-svn: 121984
2010-12-16 17:48:04 +00:00
Douglas Gregor e1520d6608 Check for unexpanded parameter packs in non-type template parameter types.
llvm-svn: 121964
2010-12-16 08:56:23 +00:00
Douglas Gregor 6ff1fbf65f Check for unexpanded parameter packs in default arguments.
llvm-svn: 121962
2010-12-16 08:48:57 +00:00
Ted Kremenek 8219b82125 Start migration of static analyzer to using the
implicit lvalue-to-rvalue casts that John McCall
recently introduced.  This causes a whole bunch
of logic in the analyzer for handling lvalues
to vanish.  It does, however, raise a few issues
in the analyzer w.r.t to modeling various constructs
(e.g., field accesses to compound literals).

The .c/.m analysis test cases that fail are
due to a missing lvalue-to-rvalue cast that
will get introduced into the AST.  The .cpp
failures were more than I could investigate in
one go, and the patch was already getting huge.
I have XFAILED some of these tests, and they
should obviously be further investigated.

Some highlights of this patch include:

- CFG no longer requires an lvalue bit for
  CFGElements
- StackFrameContext doesn't need an 'asLValue'
  flag
- The "VisitLValue" path from GRExprEngine has
  been eliminated.

Besides the test case failures (XFAILed), there
are surely other bugs that are fallout from
this change.

llvm-svn: 121960
2010-12-16 07:46:53 +00:00
Douglas Gregor 71f39c96fb Check for unexpanded parameter packs within variable initializers.
llvm-svn: 121938
2010-12-16 01:31:22 +00:00
Douglas Gregor 6c110f385b Check for unexpanded parameter packs in friend declarations.
llvm-svn: 121934
2010-12-16 01:14:37 +00:00
Fariborz Jahanian 7cabbe04eb Improve diagnostics when property being looked up
in a forward @class object. // rdar://8774513

llvm-svn: 121933
2010-12-16 00:56:28 +00:00
Douglas Gregor c435653998 Check for unexpanded parameter packs in using declarations. As a
drive-by, make sure to check for unexpanded parameter packs within the
name of a declaration.

llvm-svn: 121930
2010-12-16 00:46:58 +00:00
Douglas Gregor 2b988fd745 Check for unexpanded parameter packs in enumeration types and enumerators.
llvm-svn: 121928
2010-12-16 00:24:44 +00:00
Douglas Gregor ef68feee1d Check for unexpanded parameter packs in static assertion expressions.
llvm-svn: 121922
2010-12-15 23:55:21 +00:00
Bob Wilson 63fbbc6ef8 Implement builtins for Neon half-precision float conversions.
Also tweak the VCVT_F32_F16 entry in arm_neon.td to be more consistent with
the other floating-point conversion builtins.  Radar 8068427.

llvm-svn: 121916
2010-12-15 23:36:44 +00:00
Douglas Gregor a02a72af8d Check for unexpanded parameter packs in various kinds of
declarations. This is a work in progress, as I go through the C++
declaration grammar to identify where unexpanded parameter packs can
occur.

llvm-svn: 121912
2010-12-15 23:18:36 +00:00
Douglas Gregor fe2c8bc327 Teach the RecursiveASTVisitor to traverse the type-location
information for all of the explicit casts.

llvm-svn: 121900
2010-12-15 22:07:31 +00:00
Douglas Gregor 1da294a9d6 Introduce a RecursiveASTVisitor subclass that finds all unexpanded
parameter packs within a statement, type, etc. Use this visitor to
provide improved diagnostics for the presence of unexpanded parameter
packs in a full expression, base type, declaration type, etc., by
highlighting the unexpanded parameter packs and providing their names,
e.g.,

test/CXX/temp/temp.decls/temp.variadic/p5.cpp:28:85: error: declaration type
      contains unexpanded parameter packs 'VeryInnerTypes',
      'OuterTypes', ...
  ...VeryInnerTypes, OuterTypes>, pair<InnerTypes, OuterTypes> > types;
     ~~~~~~~~~~~~~~  ~~~~~~~~~~        ~~~~~~~~~~  ~~~~~~~~~~    ^

llvm-svn: 121883
2010-12-15 19:43:21 +00:00
Argyrios Kyrtzidis 1cb0de1d4c Fix diagnostic pragmas.
Diagnostic pragmas are broken because we don't keep track of the diagnostic state changes and we only check the current/latest state.
Problems manifest if a diagnostic is emitted for a source line that has different diagnostic state than the current state; this can affect
a lot of places, like C++ inline methods, template instantiations, the lexer, etc.

Fix the issue by having the Diagnostic object keep track of the source location of the pragmas so that it is able to know what is the diagnostic state at any given source location.

Fixes rdar://8365684.

llvm-svn: 121873
2010-12-15 18:44:22 +00:00
Nico Weber d52bea08a3 Fix gcc warning: 'clang::ASTStmtReader' is already a friend of 'clang::OverloadExpr'
llvm-svn: 121852
2010-12-15 07:13:32 +00:00
John McCall 357d0f3caf Set the "implicitly inline" bit on a method as soon as we see a definition
within the class.  Teach IR gen to look for function definitions in record
lexical contexts when deciding whether to emit a function whose address    
was taken.  Fixes PR8789.

llvm-svn: 121833
2010-12-15 04:00:32 +00:00
Douglas Gregor a6e053e61a Variadic templates: extend the Expr class with a bit that specifies
whether the expression contains an unexpanded parameter pack, in the
same vein as the changes to the Type hierarchy. Compute this bit
within all of the Expr subclasses.

This change required a bunch of reshuffling of dependency
calculations, mainly to consolidate them inside the constructors and
to fuse multiple loops that iterate over arguments to determine type
dependence, value dependence, and (now) containment of unexpanded
parameter packs.

Again, testing is painfully sparse, because all of the diagnostics
will change and it is more important to test the to-be-written visitor
that collects unexpanded parameter packs.

llvm-svn: 121831
2010-12-15 01:34:56 +00:00
Abramo Bagnara 6d8106386c Added missing IgnoreParens().
llvm-svn: 121795
2010-12-14 22:11:44 +00:00
John McCall ed72e292c9 Improve some comments, shrink FunctionType::ExtInfo, and fix a bug found
by valgrind where we were doing the wrong thing in the presence of invalid
exception specs.

llvm-svn: 121770
2010-12-14 16:45:57 +00:00
John McCall db40c7f573 Restore r121752 without modification.
llvm-svn: 121763
2010-12-14 08:05:40 +00:00
John McCall 5546da68bb Pull out r121752 in case it's causing the selfhost breakage.
llvm-svn: 121759
2010-12-14 07:30:51 +00:00
John McCall aa6d98c160 Factor out most of the extra state in a FunctionProtoType into a separate
class to be passed around.  The line between argument and return types and
everything else is kindof vague, but I think it's justifiable.

llvm-svn: 121752
2010-12-14 06:51:39 +00:00
Douglas Gregor 506bd56484 Variadic templates: extend Type, NestedNameSpecifier, TemplateName,
and TemplateArgument with an operation that determines whether there
are any unexpanded parameter packs within that construct. Use this
information to diagnose the appearance of the names of parameter packs
that have not been expanded (C++ [temp.variadic]p5). Since this
property is checked often (every declaration, ever expression
statement, etc.), we extend Type and Expr with a bit storing the
result of this computation, rather than walking the AST each time to
determine whether any unexpanded parameter packs occur.

This commit is deficient in several ways, which will be remedied with
future commits:
  - Expr has a bit to store the presence of an unexpanded parameter
  pack, but it is never set.
  - The error messages don't point out where the unexpanded parameter
  packs were named in the type/expression, but they should. 
  - We don't check for unexpanded parameter packs in all of the places
  where we should.
  - Testing is sparse, pending the resolution of the above three
  issues.

llvm-svn: 121724
2010-12-13 22:49:22 +00:00
Abramo Bagnara a44c902d2f Skip ParenType on function instantiations.
llvm-svn: 121720
2010-12-13 22:27:55 +00:00
Chandler Carruth 7a6d2e9ca1 Fix PR8774 by restricting when hasInit returns true. Previously, it
would return true if the initializer pointer union had *any* non-null
pointer in it, even if the pointer wasn't one that would actually be
returned via getInit(). This makes it more accurately model the logic of
'getInit() != NULL'.

This still isn't completely satisfying. From a principled stance,
I suspect we should make hasInit() and getInit() *always* return false
and NULL (resp.) for ParmVarDecl. We shouldn't at the API level treat
initializers and default arguments as the same thing.

llvm-svn: 121692
2010-12-13 07:40:47 +00:00
Peter Collingbourne 827301e659 Basic, Sema: add support for CUDA launch_bounds attribute
llvm-svn: 121654
2010-12-12 23:03:07 +00:00
Peter Collingbourne e8cfaf4258 Sema: diagnose kernel functions with non-void return type
llvm-svn: 121653
2010-12-12 23:02:57 +00:00
Argyrios Kyrtzidis 4d754a5502 Introduce ObjCMessageExpr::getReceiverRange() to get the source range of the receiver.
llvm-svn: 121517
2010-12-10 20:08:30 +00:00
Argyrios Kyrtzidis d0039e56f2 Keep the source location of the selector in ObjCMessageExpr.
llvm-svn: 121516
2010-12-10 20:08:27 +00:00
Argyrios Kyrtzidis e54c2a8fd8 Make RecursiveASTVisitor traverse a ObjCMethodDecl.
llvm-svn: 121515
2010-12-10 20:08:22 +00:00
Douglas Gregor a72e2392e6 Silence a GCC unitialized-value warning
llvm-svn: 121504
2010-12-10 19:27:07 +00:00
Douglas Gregor 8d34e5eb49 Replace two QualType::getTypePtrOrNull() calls with
QualType::getTypePtr(). It turns out that
cast_or_null/dyn_cast_or_null don't actually use simplify_type, so
they're guaranteed to operator on non-NULL QualType or CanQualType
objects.

Good for a 0.6% win on 403.gcc's combine.c with -emit-llvm.

llvm-svn: 121495
2010-12-10 17:19:40 +00:00
Douglas Gregor 0cdc832077 Eliminate the branching in QualType::getTypePtr() by providing a
common base for ExtQuals and Type that stores the underlying type
pointer. This results in a 2% performance win for -emit-llvm on a
typical C file, with 1% memory growth in the AST.

Note that there is an API change in this optimization:
QualType::getTypePtr() can no longer be invoked on a NULL
QualType. If the QualType might be NULL, use
QualType::getTypePtrOrNull(). I've audited all uses of getTypePtr() in
the code base and changed the appropriate uses over to
getTypePtrOrNull(). 

A future optimization opportunity would be to distinguish between
cast/dyn_cast and cast_or_null/dyn_cast_or_null; for the former, we
could use getTypePtr() rather than getTypePtrOrNull(), to take another
branch out of the cast/dyn_cast implementation.

llvm-svn: 121489
2010-12-10 17:03:06 +00:00
Abramo Bagnara 924a8f3573 Added ParenType type node.
llvm-svn: 121488
2010-12-10 16:29:40 +00:00
Douglas Gregor d672b5c32f Silence GCC warning about comparisons between enumerators of different types
llvm-svn: 121486
2010-12-10 15:40:48 +00:00
John McCall 717d9b0e2f It's kindof silly that ExtQuals has an ASTContext&, and we can use that
space better.  Remove this reference.  To make that work, change some APIs
(most importantly, getDesugaredType()) to take an ASTContext& if they
need to return a QualType.  Simultaneously, diminish the need to return a
QualType by introducing some useful APIs on SplitQualType, which is
just a std::pair<const Type *, Qualifiers>.

llvm-svn: 121478
2010-12-10 11:01:00 +00:00
Douglas Gregor a7c0471880 Update ExtQuals comment to reflect the expansion of the fast qualifiers
llvm-svn: 121477
2010-12-10 10:08:30 +00:00
John McCall 4a61589847 Optimize memory usage of FunctionProtoType on MSVC.
llvm-svn: 121475
2010-12-10 09:12:16 +00:00
Douglas Gregor 643526f086 Move the "volatile" bit into QualType's "fast" qualifier set,
increasing the required type alignment from 8 to 16. This provides a
2.5% speedup for -fsyntax-only on a token-cached Cocoa.h, while only
increasing memory consumption in the ASTContext by 0.8%.

llvm-svn: 121474
2010-12-10 08:57:38 +00:00
John McCall 2faf32c4fd Treat visibility on an enclosing namespace as a non-explicit source of
visibility.  Fixes PR8713.

I've disabled a test which was testing that you can #pragma pop visibility
to get out of a namespace's visibility attribute.  We should probably just
diagnose that as an error unless it's instrumental to someone's system
headers.

llvm-svn: 121459
2010-12-10 02:59:44 +00:00
Fariborz Jahanian aae7926e79 Added remaining objective-c library builtins (as in gcc) to
clang. // rdar://8735023

llvm-svn: 121441
2010-12-10 00:39:16 +00:00
Bob Wilson afcfae5f16 Add Neon vreinterpret intrinsics for half-float (f16) types.
llvm-svn: 121433
2010-12-09 23:37:49 +00:00
Bob Wilson d6a7301c78 Fix type of last vector operand of Neon quad-register multiple-lane intrinsics.
The sensible thing would be to have these intrinsics take all quad-register
vector operands, but that's not what ARM did.  They made the last vector
operand always be a double-register type.  Since the lane number
must be a constant, the user can know which half of a quad-register contains
that lane, extract the high or low half of the vector, and adjust the lane
number accordingly.  The only advantage I can see for this is that it works
better when you want to multiply a quad-register value by a lane from a
double-register value, but I wouldn't have expected that to be the common
case.  Oh well -- at this point we just need to follow the spec.

llvm-svn: 121397
2010-12-09 18:58:31 +00:00
Bob Wilson 629938b887 Fix the names of the v[r]addhn and v[r]subhn Neon intrinsics.
Their suffixes are supposed to reflect the source operand element type,
not the destination element type.  Radar 8746481.

llvm-svn: 121392
2010-12-09 18:31:16 +00:00
Douglas Gregor ff76cb9727 When an "inline" declaration was followed by a definition not marked
"inline", we weren't giving the definition weak linkage because the
"inline" bit wasn't propagated. This was a longstanding FIXME that,
somehow, hadn't triggered a bug in the wild. Fix this problem by
tracking whether any declaration was marked "inline", and clean up the
semantics of GNU's "extern inline" semantics calculation based on this
change.

Fixes <rdar://problem/8740363>.

llvm-svn: 121373
2010-12-09 16:59:22 +00:00
Bob Wilson 98471a2885 Add missing "s32" and "u32" variants of Neon vzip intrinsic.
Radar 8446277.

llvm-svn: 121360
2010-12-09 07:01:08 +00:00
Bob Wilson b7e2f4254f Add missing "p16" type variants for the Neon VREV32 intrinsics.
Radar 8446277.

llvm-svn: 121359
2010-12-09 06:47:29 +00:00
Douglas Gregor aed2efbbb5 A typename specifier can end up referring to a unresolved using
declaration that is a value in ill-formed code. Instead of crashing,
treat this as a dependent typename specifier and suggest that the
using add "typename" into the using declaration. Fixes <rdar://problem/8740998>.

llvm-svn: 121322
2010-12-09 00:06:27 +00:00
Ted Kremenek bbedd062c9 Add new libclang hooks for CXCursorSet, a
DenseMap-backed hashtable for doing client-side
management of CXCursors within a set.

llvm-svn: 121318
2010-12-08 23:43:14 +00:00
Bob Wilson 482afae812 Stop using builtins for the "_lane" variants of saturating multiply intrinsics.
Remove the "splat" parameter from the EmitNeonCall function, since it is no
longer needed.

llvm-svn: 121300
2010-12-08 22:37:56 +00:00
Francois Pichet 34b2113250 Remove the TypesCompatibleExprClass AST node. Merge its functionality into BinaryTypeTraitExpr.
llvm-svn: 121298
2010-12-08 22:35:30 +00:00
Douglas Gregor c8cb953c6a Put the "'typename' occurs outside of a template" and "'template'
keyword occurs outside of a template" diagnostics under
-WC++0x-extensions.

llvm-svn: 121290
2010-12-08 22:02:28 +00:00
Bob Wilson b038120094 Stop using clang builtins for Neon vabdl and vabal intrinsics.
llvm-svn: 121288
2010-12-08 21:39:47 +00:00
Bob Wilson 7d66df9c33 Stop using clang builtins for Neon vaba intrinsics.
llvm-svn: 121277
2010-12-08 20:09:54 +00:00
Douglas Gregor cbc87eb331 Fix BinaryOperator dispatch for RecursiveASTVisitor, from Benoit Perrot!
llvm-svn: 121266
2010-12-08 17:15:44 +00:00
Bob Wilson 8811c3a72e Stop using clang builtins for Neon vadd[lw] and vsub[lw] intrinsics.
llvm-svn: 121214
2010-12-08 00:14:43 +00:00
Bob Wilson f81b09db68 Stop using clang builtins for Neon vmlal{_n,_lane} and vmlsl{_n,_lane}.
llvm-svn: 121210
2010-12-07 23:54:55 +00:00
Bob Wilson 210f6ddecc Stop using a clang builtin for Neon vdup_lane intrinsics.
llvm-svn: 121191
2010-12-07 22:40:02 +00:00
Bob Wilson 7f3c0aa96f Stop using a clang builtin for Neon vmull_lane intrinsic.
llvm-svn: 121189
2010-12-07 22:03:46 +00:00
Bob Wilson aca73b82c2 Implement vmull and vmull_n intrinsics without using clang builtins.
llvm-svn: 121174
2010-12-07 20:03:04 +00:00
Douglas Gregor 14a49e2fbe Implement AST import for Objective-C property implementations
(@synthesize and @dynamic).

llvm-svn: 121159
2010-12-07 18:32:03 +00:00
Rafael Espindola 0017c5fa92 Fix PR8720 by printing an error message with a substring that the gcc testsuite searches for.
llvm-svn: 121137
2010-12-07 15:23:23 +00:00
Bob Wilson 166f25d321 Add Neon vreinterpret intrinsics.
Radar 8681774.

llvm-svn: 121089
2010-12-07 01:12:51 +00:00
Bob Wilson 12a6220691 Make whitespace more consistent.
llvm-svn: 121088
2010-12-07 01:12:48 +00:00
John McCall 6dd27195b9 Kill FullExpr, as it was not, in fact, used anywhere in the code base.
I'm not opposed to the idea in concept, but there's no point in preserving
abortive experiments.

llvm-svn: 121083
2010-12-07 00:47:33 +00:00
Francois Pichet cad25fc6bc Fix compile error: comma at end of enumerator list.
llvm-svn: 121075
2010-12-07 00:21:00 +00:00
Francois Pichet 9dfa3ce94f Type traits intrinsic implementation: __is_base_of(T, U)
New AST node introduced: BinaryTypeTraitExpr; to be reused for more intrinsics.

llvm-svn: 121074
2010-12-07 00:08:36 +00:00
John McCall 2758424d23 Split out a function to do lvalue conversion on objects; this is basically
FunctionArrayLvalueConversion but without the function/array decay.  Generally
this is only appropriate for use sites that know the type of the expression
and thus that it can't be subject to the decays.

Also make sure we do lvalue-to-rvalue on the bases of ivar references.

llvm-svn: 121035
2010-12-06 20:48:59 +00:00
Douglas Gregor bf62d647de Re-implement caching for the linkage calculation of declarations.
My previous attempt at solving the compile-time problem with many
redeclarations of the same entity cached both linkage and visibility,
while this patch only tackles linkage. There are several reasons for
this difference:

  - Linkage is a language concept, and is evaluated many times during
    semantic analysis and codegen, while visibility is only a
    code-generation concept that is evaluated only once per (unique)
    declaration. Hence, we *must* optimize linkage calculations but
    don't need to optimize visibility computation.
  - Once we know the linkage of a declaration, subsequent
    redeclarations can't change that linkage. Hence, cache
    invalidation is far simpler than for visibility, where a later
    redeclaration can completely change the visibility.
  - We have 3 spare bits in Decl to store the linkage cache, so the
    cache doesn't increase the size of declarations. With the
    visibility+linkage cache, NamedDecl got larger.

llvm-svn: 121023
2010-12-06 18:36:25 +00:00
Argyrios Kyrtzidis 7b608976b1 Use the source location of the parameter, when it makes sense, for diagnostics in HandleCleanupAttr.
llvm-svn: 121013
2010-12-06 17:51:50 +00:00
Douglas Gregor 027ba500ab Revert r120808, my previous implementation of caching for the linkage
and visibility of declarations, because it was extremely messy and it
increased the size of NamedDecl.

An improved implementation is forthcoming.

llvm-svn: 121012
2010-12-06 17:49:01 +00:00
Chandler Carruth d44c3105fb Un-templatetize this method. It's definition is out of line in the .cpp file,
so that's not a valid thing to do at all. Instead, switch to a ValueDecl
argument, the template isn't really necessary here.

When handling the types explicitly in the code, it becomes awkward to cerate
the CXXBaseOrMemberInitializer object in so many places. Re-flow the code to
calculate the Init expression first, and then create the initializer. If this
is too gross, we can factor the init expression logic into helper functions,
but it's not past my threshold yet.

llvm-svn: 120997
2010-12-06 09:23:57 +00:00
John McCall 5d41378146 Rename CXXExprWithTemporaries -> ExprWithCleanups; there's no theoretical
reason this is limited to C++, and it's certainly not limited to temporaries.

llvm-svn: 120996
2010-12-06 08:20:24 +00:00
Ted Kremenek f19a93dd99 Mark SVal constructors 'explicit'.
llvm-svn: 120970
2010-12-05 23:36:20 +00:00
Ted Kremenek 6a1cf6f77c Rename Environment::LookupExpr() to
Environment::lookupExpr() and move its implementation
out-of-line.

llvm-svn: 120969
2010-12-05 23:36:15 +00:00
Ted Kremenek eaf1f9a4a9 Remove unused method GRState::LookupExpr().
llvm-svn: 120968
2010-12-05 23:36:01 +00:00
Francois Pichet d583da04d0 More anonymous struct/union redesign. This one deals with anonymous field used in a constructor initializer list:
struct X {
  X() : au_i1(123) {}
  union {
    int au_i1;
    float au_f1;
  };
};

clang will now deal with au_i1 explicitly as an IndirectFieldDecl.

llvm-svn: 120900
2010-12-04 09:14:42 +00:00
Benjamin Kramer b024166c97 Silence "comparison between signed and unsigned integer expressions" warnings.
llvm-svn: 120897
2010-12-04 08:16:05 +00:00
John McCall e26a872b02 Remove some defensive calls to EmitLoadOfPropertyRefLValue that shouldn't
be required, and then fix up some missing loads on overloaded-operator
paths which that exposed.

llvm-svn: 120896
2010-12-04 08:14:53 +00:00
John McCall 34376a68c4 Although we currently have explicit lvalue-to-rvalue conversions, they're
not actually frequently used, because ImpCastExprToType only creates a node
if the types differ.  So explicitly create an ICE in the lvalue-to-rvalue
conversion code in DefaultFunctionArrayLvalueConversion() as well as several
other new places, and consistently deal with the consequences throughout the
compiler.

In addition, introduce a new cast kind for loading an ObjCProperty l-value,
and make sure we emit those nodes whenever an ObjCProperty l-value appears
that's not on the LHS of an assignment operator.

This breaks a couple of rewriter tests, which I've x-failed until future
development occurs on the rewriter.

Ted Kremenek kindly contributed the analyzer workarounds in this patch.

llvm-svn: 120890
2010-12-04 03:47:34 +00:00
Peter Collingbourne fafa66500b Implement -cl-std=
llvm-svn: 120882
2010-12-04 01:51:40 +00:00
Peter Collingbourne 422542625b Implement -cl-mad-enable
llvm-svn: 120881
2010-12-04 01:51:33 +00:00
Peter Collingbourne 61d6a75345 Implement -cl-fast-relaxed-math
llvm-svn: 120880
2010-12-04 01:51:23 +00:00
Peter Collingbourne b8d9995c0e Implement -cl-unsafe-math-optimizations
llvm-svn: 120879
2010-12-04 01:51:14 +00:00
Peter Collingbourne 0ba5ac8544 Implement -cl-finite-math-only
llvm-svn: 120878
2010-12-04 01:51:05 +00:00
Peter Collingbourne 0b69e1a628 Implement -cl-single-precision-constant
llvm-svn: 120877
2010-12-04 01:50:56 +00:00
Peter Collingbourne 31587c86c1 Implement -cl-opt-disable
llvm-svn: 120876
2010-12-04 01:50:45 +00:00
Peter Collingbourne aaeb73b159 Introduce CompilerInvocation::setLangDefaults function
This patch refactors the CompilerInvocation code to introduce a
CompilerInvocation::setLangDefaults function, which can set up a
LangOptions with the defaults for a given language and language
standard.  This function is useful for non-command line based Clang
clients which need to set up a CompilerInvocation manually for a
specific language.

llvm-svn: 120874
2010-12-04 01:50:27 +00:00
Argyrios Kyrtzidis d22d8ff343 Minor refactoring; have BugReport::getRanges return a pair of iterator, no functionality change.
llvm-svn: 120873
2010-12-04 01:12:15 +00:00
Fariborz Jahanian ecbbb6e9ba Diagnose when accessing property in a class method and
no property accessor class method to be found, instead of
crashing in IRGen. // rdar://8703553

llvm-svn: 120855
2010-12-03 23:37:08 +00:00
Abramo Bagnara 0e05e24e9c Added struct/class syntactic info for c++0x scoped enum.
llvm-svn: 120828
2010-12-03 18:54:17 +00:00
Bob Wilson 5be404de76 Add missing vext_f32 and vextq_f32 Neon intrinsics (Radar 8592601).
For some reason these were not included in the list of Neon intrinsics in
ARM's documentation, so they didn't make it into Clang either.

llvm-svn: 120815
2010-12-03 17:50:54 +00:00
Bob Wilson 7795599f4b Add support for vmul_p8 Neon intrinsic. Radar 8446141.
llvm-svn: 120812
2010-12-03 17:29:39 +00:00
Douglas Gregor 17fed4c754 Implement caching for the linkage and visibility calculations of
declarations.

The motivation for this patch is that linkage/visibility computations
are linear in the number of redeclarations of an entity, and we've run
into a case where a single translation unit has > 6500 redeclarations
of the same (unused!) external variable. Since each redeclaration
involves a linkage check, the resulting quadratic behavior makes Clang
slow to a crawl. With this change, a simple test with 512
redeclarations of a variable syntax-checks ~20x faster than
before.

That said, I hate this change, and will probably end up reverting it
in a few hours. Reasons to hate it:
  - It makes NamedDecl larger, since we don't have enough free bits in
  Decl to squeeze in the extra information about caching.
  - There are way too many places where we need to invalidate this
  cache, because the visibility of a declaration can change due to
  redeclarations (!). Despite self-hosting and passing the testsuite,
  I have no confidence that I've found all of places where this cache
  needs to be invalidated.

llvm-svn: 120808
2010-12-03 17:11:42 +00:00