Commit Graph

17330 Commits

Author SHA1 Message Date
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 7a49ead680 Be paranoid about NULL size expressions in dependently-sized array types
llvm-svn: 122454
2010-12-22 23:15:38 +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
Argyrios Kyrtzidis 4037302a8b Subsequent attempt to fix linux build.
llvm-svn: 122442
2010-12-22 21:41:01 +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
Argyrios Kyrtzidis 986fc89034 Apparently I'm on a mission to break as many builds as possible.
llvm-svn: 122436
2010-12-22 21:10:38 +00:00
Argyrios Kyrtzidis 5629fece72 Forgot to move the files in CMakeLists.txt.
llvm-svn: 122433
2010-12-22 20:30:07 +00:00
Argyrios Kyrtzidis 6c696b7f98 Add GR/Checkers subdir for CMake build.
llvm-svn: 122432
2010-12-22 20:22:35 +00:00
Argyrios Kyrtzidis c60fc656c6 Move AnalysisConsumer.cpp and ExprEngine.cpp into the Checkers subdir temporarily
to avoid cyclic dependency between the libraries and fix the linux build.

llvm-svn: 122431
2010-12-22 20:15:43 +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
Douglas Gregor d80ea20411 When performing template argument deduction where the argument is a
dependent template specialization type, the number of template
arguments need not match precisely. Rather than checking the number of
arguments eagerly (which does not consider argument packs), let the
deduction routine for template argument lists cope with too many/too
few arguments.

llvm-svn: 122425
2010-12-22 18:55:49 +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 a700e976b6 [analyzer] Refactoring: Move checkers into lib/GR/Checkers and their own library, libclangGRCheckers
llvm-svn: 122422
2010-12-22 18:52:56 +00:00
Argyrios Kyrtzidis 2ff5ab1516 [analyzer] Refactoring: lib/Checker -> lib/GR and libclangChecker -> libclangGRCore
llvm-svn: 122421
2010-12-22 18:52:29 +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
Zhongxing Xu 6f8a8f92b8 If the unary operator is prefix and an lvalue (in C++), bind
the location (l-value) to it.

llvm-svn: 122396
2010-12-22 08:38:13 +00:00
Abramo Bagnara ea4f7c7761 Introduced raw_identifier token kind.
llvm-svn: 122394
2010-12-22 08:23:18 +00:00
Zhongxing Xu fe86bc527a The base type is not always pointer type. We may cast to a base reference.
llvm-svn: 122393
2010-12-22 08:12:57 +00:00
Zhongxing Xu 4dc4bf25d7 Always blast through no-op casts when getting expr SVals.
llvm-svn: 122390
2010-12-22 07:40:30 +00:00
Zhongxing Xu 7089250f5a After inlining the CXXConstructExpr, bind the temporary object region to it.
This change is necessary when the variable is a const reference and we need
the l-value of the construct expr.  After that, when binding the variable,
recover the lazy compound value when the variable is not a reference.

In Environment, use the value of a no-op cast expression when it has one.
Otherwise, blast-through it.

llvm-svn: 122388
2010-12-22 07:20:27 +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 cff2764a6e Tweak the checking of class template partial specialization arguments
to cope with parameter packs. This is a band-aid I will be
revisiting this section when I implement declaration matching
semantics for variadic templates.

llvm-svn: 122369
2010-12-21 22:27:23 +00:00
Douglas Gregor 08f4e8097a Add a hack to work around the lack of proper type-source info in a pack expansion TypeLoc
llvm-svn: 122367
2010-12-21 22:10:26 +00:00
Douglas Gregor 5c7aa98886 Add some const qualifiers
llvm-svn: 122365
2010-12-21 21:51:48 +00:00
Douglas Gregor 7f6ae6958c For member pointer conversions potentially involving derived-to-base
conversions, make sure that the (possibly) derived type is complete
before looking for base classes.

Finishes the fix for PR8801.

llvm-svn: 122363
2010-12-21 21:40:41 +00:00
Douglas Gregor e9fc8dc84c When searching for the instantiation of a locally-scoped tag
declaration, also look for an instantiation of its previous
declarations. Fixes PR8801.

llvm-svn: 122361
2010-12-21 21:22:51 +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
Michael J. Spencer 740857fa10 Replace all uses of PathV1::makeAbsolute with PathV2::fs::make_absolute.
llvm-svn: 122340
2010-12-21 16:45:57 +00:00
Michael J. Spencer bc721825e8 Fix spelling.
llvm-svn: 122339
2010-12-21 16:45:42 +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 7c84229db6 When checking a using declaration, make sure that the context we're
looking in is complete. Fixes PR8756.

llvm-svn: 122323
2010-12-21 07:41:49 +00:00
Douglas Gregor b14dbd73b9 Don't try to compute the value of a value-dependent expression when
checking trivial comparisons. Fixes PR8795.

llvm-svn: 122322
2010-12-21 07:22:56 +00:00
Francois Pichet 48e2d9e2be Add IndirectField case in DeclContextPrinter::PrintDeclContext.
Fix PR8832.

llvm-svn: 122311
2010-12-21 03:08:02 +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 830837da53 Extend the parser to support pack expansions within exception
specifications. We can't yet instantiate them, however, since I
tripped over PR8835.

llvm-svn: 122292
2010-12-20 23:57:46 +00:00
Douglas Gregor fe921a79f3 Further refactoring of the tree transformation for template argument
lists, so that all such transformations go through a single,
iterator-based transformation function. This is the only place where
we need to implement the logic for transforming pack expansions whose
pattern is a template argument.

Unfortunately, the new cases this refactoring brings into the fold
can't be meaningfully tested yet. We need template argument deduction
to work well enough for variadic function templates first.

llvm-svn: 122289
2010-12-20 23:36:19 +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 53c3f4e803 Handle instantiation of template type parameter packs that occur as
the first qualifier in scope. We can't adequately test this test,
unfortunately.

llvm-svn: 122283
2010-12-20 22:48:17 +00:00
Rafael Espindola 7f73489c3f Fix PR8639 by making the "argument unused during compilation" less agressive. Now we
don't warn if an argument is not used because it is shadowed by a subsequent argument.

llvm-svn: 122281
2010-12-20 22:45:09 +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
Matt Beaumont-Gay 8e37ea1a29 Remove unused variable
llvm-svn: 122257
2010-12-20 19:38:37 +00:00
Douglas Gregor 42cafa8dac Finish refactoring the transformation of template argument lists,
centralizing the transformation into two routines. No functionality change.

llvm-svn: 122253
2010-12-20 17:42:22 +00:00
Douglas Gregor 62e06f23ba Refactor the transformation of template argument lists to centralize
the list traversal. Part 1, no functionality change.

llvm-svn: 122252
2010-12-20 17:31:10 +00:00
Douglas Gregor 9abeaf57c3 When checking a template argument list against a template containing
a parameter pack, check the parameter pack against each of the
template arguments it corresponds to, then pack the converted
arguments into a template argument pack. Allows us to use variadic
class templates so long as instantiation isn't required, e.g.,

  template<typename... Types> struct Tuple;
  Tuple<int, float> *t2;

llvm-svn: 122251
2010-12-20 16:57:52 +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 bea85d8477 XFAIL vtable-debug-info.cpp on WIN32 and fix curly brace.
llvm-svn: 122230
2010-12-20 05:44:28 +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
Zhongxing Xu 7e2a9fd620 If the initializer is an rvalue and the variable is a const reference,
create a temporary object for it.

llvm-svn: 122161
2010-12-19 02:26:37 +00:00
Zhongxing Xu 1b47773e1f The evaluation of dereference and address-of is identical.
llvm-svn: 122146
2010-12-18 05:16:43 +00:00
Michael J. Spencer e47230f9b5 Replace all uses of PathV1::get{Basename,Dirname,Suffix} with their PathV2 equivalents.
llvm-svn: 122140
2010-12-18 04:13:32 +00:00
John McCall 659a337c74 Apply attributes to explicit specializations. Specializations which
don't provide their own explicit visibility attributes should get them
from the template.  Fixes rdar://problem/8778497.

llvm-svn: 122136
2010-12-18 03:30:47 +00:00
Michael J. Spencer e169675474 Replace all uses of PathV1::getLast with PathV2::filename.
llvm-svn: 122117
2010-12-18 00:19:12 +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
Michael J. Spencer 1a4fe8c991 Fix spelling.
llvm-svn: 122088
2010-12-17 21:22:33 +00:00
Michael J. Spencer f28df4cdba Replace all uses of PathV1::isAbsolute with PathV2::is_{absolute,relative}.
llvm-svn: 122087
2010-12-17 21:22:22 +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
Abramo Bagnara 77815438d1 Use hasSameType to compare types for equality.
llvm-svn: 122058
2010-12-17 15:49:53 +00:00
Abramo Bagnara 166cfa3a42 Avoid to emit redundant implicit cast for enum constants init expressions.
llvm-svn: 122056
2010-12-17 12:21:11 +00:00
Ted Kremenek 80c4e0bf6f Remove explicit summaries from retain/release
checker that are automatically handled now
by the Cocoa conventions logic.

llvm-svn: 122047
2010-12-17 07:12:00 +00:00
Ted Kremenek b44f0f9abe Fix assertion failure in cocoa::deriveNamingConvention()
when the selector is the string 'mutable'.

llvm-svn: 122046
2010-12-17 07:11:57 +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 edb1cdff77 Revise Cocoa conventions detection: 'copy' and 'mutableCopy'
only indicates the create rule if it starts
at the beginning of the method name, not
within the method name.

llvm-svn: 122036
2010-12-17 04:44:43 +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
John McCall 09982c0a49 Give hidden visibility to RTTI for derived types. This is kindof a hacky
way to do this, but it fixes rdar://problem/8778973

llvm-svn: 122033
2010-12-17 02:58:03 +00:00
Francois Pichet 4f64c5aa70 Microsoft's __uuidof operator returns a lvalue.
llvm-svn: 122021
2010-12-17 02:00:06 +00:00
John McCall 57cdd88897 Do lvalue-to-rvalue conversions on the LHS of a shift operator.
Fixes rdar://problem/8776586.

llvm-svn: 121992
2010-12-16 19:28:59 +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 062ecac8ed Tweak a comment
llvm-svn: 121979
2010-12-16 17:19:19 +00:00
Douglas Gregor 38ee75e7f0 Delay the check for unexpanded parameter packs in the types of
non-type template parameters until we know that we have an actual
template declaration of some sort. This cannot be tested yet, but will
become important when we have template template parameter packs.

llvm-svn: 121967
2010-12-16 15:36:43 +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
Michael J. Spencer d9da7a1f16 MemoryBuffer API update.
llvm-svn: 121956
2010-12-16 03:28:14 +00:00
Douglas Gregor 6ab34afc4e Fix a regression I caused in r121930. It turns out that
DeclarationNameInfo instances don't always have a non-NULL
TypeSourceInfo?

llvm-svn: 121940
2010-12-16 01:40:04 +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
Fariborz Jahanian 522eb7b894 ivars craeted for explicit @synthesize and those
created for auto-synthesis are @private.
Fixes: // rdar://8769582

llvm-svn: 121913
2010-12-15 23:29:04 +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