Commit Graph

8899 Commits

Author SHA1 Message Date
Ted Kremenek 5daec8a834 Reapply most of r82939, but add a guard that FieldRegions and friends
are only specially treated by RegionStore::InvalidateRegion() when
their super region is also invalidated.  When this isn't the case,
conjure a new symbol for a FieldRegion.  Thanks to Zhongxing Xu and
Daniel Dunbar for pointing out this issue.

llvm-svn: 83043
2009-09-29 03:34:03 +00:00
Anders Carlsson 9150a2a8c0 Handle CK_BaseToDerivedMemberPointer for member function pointers. Fixes PR5091.
llvm-svn: 83041
2009-09-29 03:13:20 +00:00
Ted Kremenek 1cbdf6e850 Revert r82939. We can only not special case FieldRegions when the super region has also been invalidated.
llvm-svn: 83040
2009-09-29 03:12:50 +00:00
Anders Carlsson b05a3e551b Improve support for member function pointers.
llvm-svn: 83039
2009-09-29 02:09:01 +00:00
Anders Carlsson 1fb7ae9e3c Use a switch statement in VisitCastExpr.
llvm-svn: 83038
2009-09-29 01:23:39 +00:00
Anders Carlsson d30d820dc4 Make hasAggregateLLVMType use positive checks.
llvm-svn: 83037
2009-09-29 01:15:29 +00:00
Mike Stump e7a2b48572 Fix http://llvm.org/PR5090.
llvm-svn: 83035
2009-09-29 00:50:50 +00:00
Fariborz Jahanian 78cfcb56a1 Define and use a helper method to call a type conversion
function.

llvm-svn: 83027
2009-09-28 23:23:40 +00:00
Fariborz Jahanian 9021fc7026 Minor API change. No change in functionality.
llvm-svn: 83022
2009-09-28 22:03:07 +00:00
Douglas Gregor 40ef7c580b Add all of the C99 complex builtins prefixed with __builtin_
llvm-svn: 83020
2009-09-28 21:45:01 +00:00
Douglas Gregor 56fbc37bbb Provide a custom diagnostic when code tries to use an unknown builtin
llvm-svn: 83014
2009-09-28 21:14:19 +00:00
Fariborz Jahanian c9c3917a86 Multiple conversions to the same type are ambiguous but for the
purpose of overload resolution is to be treated as a uner-defined
conversion.

llvm-svn: 83004
2009-09-28 19:06:58 +00:00
Douglas Gregor 5ad7c54bb9 Make sure that out-of-line function and variable definitions are not
pushed into scope. Fixes PR5056.

llvm-svn: 83003
2009-09-28 18:41:37 +00:00
Fariborz Jahanian 774cf79987 Patch for AST representation for the implicit conversion to a function
reference/pointer. And a test case for code gen.

llvm-svn: 83000
2009-09-28 18:35:46 +00:00
Douglas Gregor c5790dfeb4 Parse a C++ scope specifier followed by a "typename" annotation token as a type name within the declaration specifiers. Fixes PR5061.
llvm-svn: 82974
2009-09-28 07:26:33 +00:00
Douglas Gregor 14d1bf4361 Properly match instantiations of member function templates to the function templates from which they were instantiated
llvm-svn: 82969
2009-09-28 06:34:35 +00:00
Douglas Gregor 5b0f2a2fbe Don't allow the same function to enter the overload candidate set
multiple times. This requires to be more careful about re-adding
candidates cached from the function template definition.

llvm-svn: 82967
2009-09-28 04:47:19 +00:00
Douglas Gregor e6688e653f Determinism is for wimps. <Wimper>
llvm-svn: 82962
2009-09-28 03:51:44 +00:00
Douglas Gregor 505ad49a09 Teach Sema::isDeclInScope to handle overload sets constructed from
functions that occur in multiple declaration contexts, e.g., because
some were found via using declarations. Now, isDeclInScope will build
a new overload set (when needed) containing only those declarations
that are actually in scope. This eliminates a problem found with
libstdc++'s <iostream>, where the presence of using 

In the longer term, I'd like to eliminate Sema::isDeclInScope in favor
of better handling of the RedeclarationOnly flag in the name-lookup
routines. That way, name lookup only returns the entities that matter,
rather than taking the current two-pass approach of producing too many
results and then filtering our the wrong results. It's not efficient,
and I'm sure that we aren't filtering everywhere we should be.

llvm-svn: 82954
2009-09-28 00:47:05 +00:00
Douglas Gregor a29a3ffd18 Improve handling of friend function templates somewhat
llvm-svn: 82950
2009-09-28 00:08:27 +00:00
Ted Kremenek df5f681525 Specially handle fields, elements, and ivars in
RegionStoreManager::InvalidateRegion() by only removing their old
binding, not conjuring a new symbol.

llvm-svn: 82939
2009-09-27 22:39:07 +00:00
Ted Kremenek 67b216a1d9 Add FIXME comment.
llvm-svn: 82924
2009-09-27 20:50:04 +00:00
Ted Kremenek e41b81e9ab Fix:
<rdar://problem/6914474> checker doesn't realize that variable might
have been assigned if a pointer to that variable was passed to another
function via a structure

The problem here was the RegionStoreManager::InvalidateRegion didn't
invalidate the bindings of invalidated regions.  This required a
rewrite of this method using a worklist.

As part of this fix, changed ValueManager::getConjuredSymbolVal() to
require a 'void*' SymbolTag argument.  This tag is used to
differentiate two different symbols created at the same location.

llvm-svn: 82920
2009-09-27 20:45:21 +00:00
Anders Carlsson 02bca738b4 Mangle dependent name expressions. Fixes PR5063.
llvm-svn: 82915
2009-09-27 20:11:34 +00:00
Anders Carlsson d122de5f32 Use mangleTemplatePrefix when we know that we're mangling a nested template name.
llvm-svn: 82912
2009-09-27 19:53:49 +00:00
Anders Carlsson 52d78a518a CodeGen for try statements. (We just emit the body for now).
llvm-svn: 82910
2009-09-27 18:58:34 +00:00
Cedric Venet bc8d0dec5d Handle Eli remark on mingw __declspec macro definition
llvm-svn: 82894
2009-09-27 10:09:11 +00:00
Anders Carlsson 9bf787ad1f Look for substitutions when mangling TypenameTypes.
llvm-svn: 82885
2009-09-27 01:06:07 +00:00
Anders Carlsson e00745b285 Better template parameter type mangling.
llvm-svn: 82883
2009-09-27 00:38:53 +00:00
Anders Carlsson 2e5935241a Mangle std::basic_string<char, std::char_traits<char>, std::allocator<char> > as Ss.
llvm-svn: 82882
2009-09-27 00:12:57 +00:00
Anders Carlsson 853bb50382 Mangle ::std::basic_string as Sb.
llvm-svn: 82881
2009-09-26 23:14:39 +00:00
Anders Carlsson 872ce0dc31 Mangle ::std::allocator as Sa.
llvm-svn: 82880
2009-09-26 23:10:05 +00:00
Anders Carlsson 3e83c30c4c Handle substitutions in mangleTemplatePrefix.
llvm-svn: 82879
2009-09-26 22:18:22 +00:00
Anders Carlsson 46f87dcad4 Make Decl::dump const.
llvm-svn: 82878
2009-09-26 21:58:53 +00:00
Douglas Gregor 2208a2912c Simplify the handling of non-dependent friend class template
specializations such as:

  friend class std::vector<int>;

by using the same code path as explicit specializations, customized to
reference an existing ClassTemplateSpecializationDecl (or build a new
"undeclared" one).

llvm-svn: 82875
2009-09-26 20:57:03 +00:00
Anders Carlsson aa9e3c8793 Substitute "::std::" as "St".
llvm-svn: 82874
2009-09-26 20:53:44 +00:00
Anders Carlsson 49232b9f42 Don't crash when trying to mangle function templates.
llvm-svn: 82872
2009-09-26 20:13:56 +00:00
Anders Carlsson 26e67afd1e mangleTemplatePrefix and mangleUnscopedTemplateName should take a TemplateDecl.
llvm-svn: 82871
2009-09-26 19:45:45 +00:00
Anders Carlsson 677475206c Use the qualified name for tag types.
llvm-svn: 82870
2009-09-26 19:03:24 +00:00
Anders Carlsson e33eed5c1e Set alignment on static function level decls and VLAs. Fixes PR5060.
llvm-svn: 82868
2009-09-26 18:16:06 +00:00
Anders Carlsson 534b0639db Address comment from Daniel.
llvm-svn: 82865
2009-09-26 16:55:29 +00:00
Dan Gohman 0b3cfab288 Pass the formatted_raw_ostream to createPrintModulePass and
createBitcodeWriterPass instead of the underlying raw_ostream. This
avoids trouble with formatted_raw_ostream's behavior of setting the
underlying stream to be unbuffered, which resulted in
clang -emit-llvm -S using unbuffered output.

llvm-svn: 82857
2009-09-26 15:06:14 +00:00
Douglas Gregor 9acb690827 Fix name lookup for friend class templates to consider anything in a
scope *up to and including* the innermost namespace scope, rather than
just searching in the innermost namespace scope. 

llvm-svn: 82849
2009-09-26 07:05:09 +00:00
Douglas Gregor 3dad842b35 Rework the Parse-Sema interaction for friends to better support friend
class templates. We now treat friend class templates much more like
normal class templates, except that they still get special name lookup
rules. Fixes PR5057 and eliminates a bunch of spurious diagnostics in
<iostream>.

llvm-svn: 82848
2009-09-26 06:47:28 +00:00
Ted Kremenek 9a4e5663d2 Hoist some branches in AnalysisManager::HandleTranslationUnit so we
avoid scanning for an "entry point" FunctionDecl if we (a) have no
translation unit actions and (b) no entry point function has been
specified.

llvm-svn: 82846
2009-09-26 04:15:09 +00:00
Anders Carlsson 0374742326 Use ABIArgInfo::getDirect() for all types that have a pointer representation.
llvm-svn: 82845
2009-09-26 03:56:53 +00:00
Douglas Gregor fae1d71592 Yet another simplifying use of Sema::getMostSpecialized
llvm-svn: 82844
2009-09-26 03:56:17 +00:00
Anders Carlsson 296f8dc52f Mangle record types as decls.
llvm-svn: 82843
2009-09-26 03:55:37 +00:00
Douglas Gregor 5de279ccab Use Sema::getMostSpecialized to eliminate a redundant implementation of the most-specialized function template
llvm-svn: 82840
2009-09-26 03:41:46 +00:00
Anders Carlsson 9f8e3d1929 Change isTemplate to return the actual template declaration.
llvm-svn: 82839
2009-09-26 03:24:57 +00:00
Anders Carlsson bdaaab4671 Improve mangling of typename types.
llvm-svn: 82833
2009-09-26 02:26:02 +00:00
Anders Carlsson 47680d8040 Rename NextOffset to DataSize.
llvm-svn: 82832
2009-09-26 01:34:51 +00:00
Anders Carlsson 7f78d85be4 Start at NextOffset when laying out bases as well.
llvm-svn: 82831
2009-09-26 01:29:10 +00:00
Anders Carlsson a6d95b5a3e Use NextOffset when laying out a field.
llvm-svn: 82828
2009-09-26 01:09:35 +00:00
Anders Carlsson 294616a74c Don't try to dump invalid decls or forward decls.
llvm-svn: 82827
2009-09-26 01:02:04 +00:00
Anders Carlsson 9d1b34ba81 Cast cleanup.
llvm-svn: 82826
2009-09-26 00:12:34 +00:00
Douglas Gregor 0e876e0180 Use explicitly-specified template argument lists to help naming
explicit template specializations, when available.

llvm-svn: 82824
2009-09-25 23:53:26 +00:00
Douglas Gregor d90fd526d3 Declarators can now properly represent template-ids, e.g., for
template void f<int>(int);
                ~~~~~~
Previously, we silently dropped the template arguments. With this
change, we now use the template arguments (when available) as the
explicitly-specified template arguments used to aid template argument
deduction for explicit template instantiations.

llvm-svn: 82806
2009-09-25 21:45:23 +00:00
Fariborz Jahanian 49850dfc4e Refixed pr5050 per Anders comment. Test case enhanced
per Doug's comment.

llvm-svn: 82791
2009-09-25 18:59:21 +00:00
Douglas Gregor 450f0084a2 WIP implementation of explicit instantiation of function templates,
member functions of class template specializations, and static data
members. The mechanics are (mostly) present, but the semantic analysis
is very weak.

llvm-svn: 82789
2009-09-25 18:43:00 +00:00
Fariborz Jahanian 5aec1b54bc Fix the AST tree so ir-gen can do the conversion via copy construction.
Fixed pr5050.

llvm-svn: 82783
2009-09-25 18:11:25 +00:00
Mike Stump 1dbb8f78a3 Fix 80-col violation.
llvm-svn: 82782
2009-09-25 18:11:00 +00:00
Anders Carlsson d7d358a65e Even more work on empty classes.
llvm-svn: 82770
2009-09-25 15:39:00 +00:00
Benjamin Kramer 07fec3bbf5 Fix MSVC build by renaming a variable. PR5043
llvm-svn: 82762
2009-09-25 11:47:22 +00:00
Douglas Gregor 25a3967ebb Sigh. Be *really* careful when copying a default function argument during template instantiation
llvm-svn: 82761
2009-09-25 07:03:22 +00:00
Douglas Gregor c103ccd855 Be careful about copying uninstantiated default arguments during template instantiation
llvm-svn: 82760
2009-09-25 06:56:31 +00:00
Ted Kremenek 05e6f5b6e9 Turn on 'RegionStore' as the default store manager both for 'clang --analyze' and 'scan-build'. Leave 'BasicStore' as the default store manager in 'clang-cc'. While there are still known warts with RegionStore, it's ready to be tested by general users.
llvm-svn: 82752
2009-09-25 05:55:59 +00:00
Douglas Gregor 56751b5981 Fix checking for a null pointer constant when the expression itself is
value-dependent. Audit (and fixed) all calls to
Expr::isNullPointerConstant() to provide the correct behavior with
value-dependent expressions. Fixes PR5041 and a crash in libstdc++
<locale>.

In the same vein, properly compute value- and type-dependence for
ChooseExpr. Fixes PR4996.

llvm-svn: 82748
2009-09-25 04:25:58 +00:00
Anders Carlsson e1883100a3 Who would have thought that empty classes were so tricky? Handle cases where an empty virtual base class needs to be moved aside because it conflicts with the first field.
llvm-svn: 82746
2009-09-25 01:54:38 +00:00
John McCall 0cf155174e Fix an infinite loop arising when trying to generate debug information
for a ObjC class with an ivar of weak self type.

llvm-svn: 82745
2009-09-25 01:40:47 +00:00
Anders Carlsson 4bf82141e7 Handle array fields that contain empty structs.
llvm-svn: 82744
2009-09-25 01:23:32 +00:00
Ted Kremenek f694f421e1 Fix <rdar://problem/7249327> by allowing silent conversions between signed and unsigned integer values for symbolic values. This is an intermediate solution (i.e. hack) until we support extension/truncation of symbolic integers.
llvm-svn: 82737
2009-09-25 00:18:15 +00:00
Anders Carlsson 6f95c705ea More work on empty classes.
llvm-svn: 82736
2009-09-25 00:02:51 +00:00
Fariborz Jahanian 1f9ed58277 Fixed another code gen bug in objc's new write-barrier API.
llvm-svn: 82735
2009-09-25 00:00:20 +00:00
Anders Carlsson 6d2b6f49ce Improve the record layout dumper.
llvm-svn: 82733
2009-09-24 23:50:42 +00:00
Douglas Gregor 5013a7e42d When entering the scope of a declarator, make sure that the scope is
complete (or, possibly causing template instantiation).

Test this via some explicit specializations of member functions.

llvm-svn: 82732
2009-09-24 23:39:01 +00:00
John McCall 90d1c2df56 Make it really, really easy to change the alignment of Type (and ExtQuals).
llvm-svn: 82730
2009-09-24 23:30:46 +00:00
Douglas Gregor 3a923c2d37 WIP implementation of explicit function template specialization. This
first implementation recognizes when a function declaration is an
explicit function template specialization (based on the presence of a
template<> header), performs template argument deduction + ambiguity
resolution to determine which template is being specialized, and hooks

There are many caveats here:
  - We completely and totally drop any explicitly-specified template
  arguments on the floor
  - We don't diagnose any of the extra semantic things that we should
  diagnose. 
  - I haven't looked to see that we're getting the right linkage for
  explicit specializations

On a happy note, this silences a bunch of errors that show up in
libstdc++'s <iostream>, although Clang still can't get through the
entire header.

llvm-svn: 82728
2009-09-24 23:14:47 +00:00
Mike Stump d2a3e61798 Fix 80-col violation.
llvm-svn: 82725
2009-09-24 22:31:14 +00:00
Fariborz Jahanian 7a95d72b10 Patch fixes a code gen. bug in generation of objc_assign_ivar
(objc GC's API).

llvm-svn: 82724
2009-09-24 22:25:38 +00:00
John McCall 8ccfcb51ee Refactor the representation of qualifiers to bring ExtQualType out of the
Type hierarchy.  Demote 'volatile' to extended-qualifier status.  Audit our
use of qualifiers and fix a few places that weren't dealing with qualifiers
quite right;  many more remain.

llvm-svn: 82705
2009-09-24 19:53:00 +00:00
Anders Carlsson d934010557 Add a -dump-record-layouts argument to clang-cc.
llvm-svn: 82703
2009-09-24 18:54:49 +00:00
Ted Kremenek 0868eea3f0 When building CFGs, no longer reverse the statements in the CFGBlock. Instead
have the iterators and operator[] handle the traversal of statements, as they
are stored in reverse order. Tests show this has no real performance impact, but
it does simply the CFG construction logic and will make it slightly easier to
change the allocation strategy for CFGBlocks (as we have fewer copies).

llvm-svn: 82702
2009-09-24 18:45:41 +00:00
Ted Kremenek 1b40e5978f Fix crash in RegionStoreManager::Bind() by using 'getAs<PointerType>()' instead of 'cast<PointerType>()' (to handle pointer typedefs).
llvm-svn: 82686
2009-09-24 06:24:32 +00:00
Anders Carlsson bb66bc8e84 More improvements with laying out empty bases.
llvm-svn: 82682
2009-09-24 05:21:31 +00:00
Daniel Dunbar b3b1e53d33 Darwin/x86-32: Enumerated types and block pointer types in structures were not
handled correctly.
 - <rdar://problem/7247671> Function arguments incorrect when function returns a
   struct on i386 w/ llvm-g++ and clang

llvm-svn: 82681
2009-09-24 05:12:36 +00:00
Ted Kremenek 267e45adab Fix: <rdar://problem/7249340> [RegionStore] model stores to symbolic parameter regions
The issue was a discrepancy between how RegionStoreManager::Bind() and
RegionStoreManager::Retrieve() derived the "key" for the first element
of a symbolic region.

llvm-svn: 82680
2009-09-24 04:11:44 +00:00
Anders Carlsson f24b18fb06 More work on empty classes.
llvm-svn: 82679
2009-09-24 03:22:10 +00:00
Anders Carlsson 6522b05db7 Scaffolding for supporting empty bases/fields.
llvm-svn: 82678
2009-09-24 03:13:30 +00:00
Ted Kremenek d9120d3575 Shorten the static analyzer diagnostic for 'use of garbage value'.
llvm-svn: 82672
2009-09-24 00:44:26 +00:00
Fariborz Jahanian 20327b0422 Use Doug's DeclLoc to pinpoint location of the declaration
in a reference initialization diagnostic.

llvm-svn: 82671
2009-09-24 00:42:43 +00:00
Douglas Gregor c809cc2efa Improve diagnostic location information when checking the initialization of a reference
llvm-svn: 82666
2009-09-23 23:04:10 +00:00
Fariborz Jahanian 9ce90d13e3 patch to ir-gen conversion function call used in
initializing a reference class.

llvm-svn: 82664
2009-09-23 22:34:00 +00:00
Douglas Gregor e412a5a8f7 For code completion, note that injected-class-names found as part of
lookup in a member access expression always start a
nested-name-specifier. Additionally, rank names that start
nested-name-specifiers after other names.

llvm-svn: 82663
2009-09-23 22:26:46 +00:00
Fariborz Jahanian 71130ca141 Remove the FIXME as I said.
llvm-svn: 82650
2009-09-23 20:56:34 +00:00
Fariborz Jahanian af0262dccf This patch addresses a few issues related to 8.5.3 [dcl.init.ref]
It uses a recent API to find inherited conversion functions to do
the initializer to reference lvalue conversion (and removes a FIXME).
It issues the ambiguity diagnostics when multiple conversions are found.
WIP.

llvm-svn: 82649
2009-09-23 20:55:32 +00:00
Anders Carlsson 649a17e861 Handle namespace aliases.
llvm-svn: 82644
2009-09-23 19:19:16 +00:00
Anders Carlsson f771681e63 Emit new[] cookie when needed.
llvm-svn: 82642
2009-09-23 18:59:48 +00:00
Anders Carlsson b4bd0666d2 Basic support for new[].
llvm-svn: 82628
2009-09-23 16:07:23 +00:00
Douglas Gregor 2a920014d3 When code-completion after a "," is building an overload set, note
that there is one more argument (the one following the comma) and make
the candidate non-viable if the function cannot accept any argument in
that position.

llvm-svn: 82625
2009-09-23 14:56:09 +00:00
Daniel Dunbar 3e7a723fef Factor Windows target into VS, MinGW and Cygwin variants.
- Patch by John Thompson!

llvm-svn: 82621
2009-09-23 07:31:35 +00:00
Chris Lattner d545ad1301 implement support for __builtin_eh_return_data_regno on x86-32 and x86-64.
This implements PR5034 and rdar://6836445.

llvm-svn: 82614
2009-09-23 06:06:36 +00:00
Anders Carlsson d49844b715 Add a new variant of EmitCXXAggrConstructorCall that takes a Value that holds the number of elements to construct, to be used when implementing new[].
llvm-svn: 82602
2009-09-23 02:45:36 +00:00
Ted Kremenek 1624a4784a Fix PR 4988 by removing an invalid assertion (a function can be referenced in
GRExprEngine::VisitDeclRefExpr without 'asLValue' being true).

llvm-svn: 82598
2009-09-23 01:30:01 +00:00
Fariborz Jahanian 21ccf06352 Produce detailed diagnostics when overload
resolution failed to select a candidate due to
ambiguity in type conversion function selection.

llvm-svn: 82596
2009-09-23 00:58:07 +00:00
Anders Carlsson 8ab20bb144 Cast the array size expr to a size_t
llvm-svn: 82594
2009-09-23 00:37:25 +00:00
Douglas Gregor f0f51985a1 Print the results of code-completion for overloading by displaying the
signature of the function with the current parameter highlighted as a
placeholder.

llvm-svn: 82593
2009-09-23 00:34:09 +00:00
Douglas Gregor 05f477c177 Separate the code-completion results for call completion from the
results for other, textual completion. For call completion, we now
produce enough information to show the function call argument that we
are currently on.

llvm-svn: 82592
2009-09-23 00:16:58 +00:00
Douglas Gregor 64b12b5ee7 Make sure we don't try to add code-completion results without an
active shadow map.

llvm-svn: 82588
2009-09-22 23:31:26 +00:00
Douglas Gregor 2b3ee156fc When code-completion finds a declaration only because it is usable as
the start of a nested-name-specifier, add the "::" after the
nested-name-specifier to the code-completion string.

llvm-svn: 82587
2009-09-22 23:22:24 +00:00
Douglas Gregor 5bf52697b0 Tweak the code-completion results ranking and formation, so that
members found in base classes have the same ranking as members found
in derived classes. However, we will introduce an informative note for
members found in base classes, showing (as a nested-name-specifier)
the qualification to name the base class, to make it clear which
members are from bases.
 

llvm-svn: 82586
2009-09-22 23:15:58 +00:00
Anders Carlsson cc52f65500 Move codegen of new and delete to CGCXXExpr.cpp
llvm-svn: 82585
2009-09-22 22:53:17 +00:00
Mike Stump 17abe2a620 Remove now fixed FIXME.
llvm-svn: 82584
2009-09-22 22:31:44 +00:00
Daniel Dunbar 5564ba743f Push "clang-is-production" logic up to tools/driver, and make it hittable by
defining the CLANG_IS_PRODUCTION Makefile variable.

llvm-svn: 82583
2009-09-22 22:31:13 +00:00
Anders Carlsson 8c978b4fc2 No need to null check implicit lvalue cast exprs.
llvm-svn: 82580
2009-09-22 22:00:46 +00:00
Anders Carlsson 8fef09cd80 When doing a derived-to-base class and the class offset is 0 we can just do a simple bitcast.
llvm-svn: 82579
2009-09-22 21:58:22 +00:00
Daniel Dunbar 03184798c3 Reconcile Clang/ARM target data string with llvm-gcc (module eabi weirdness).
llvm-svn: 82578
2009-09-22 21:44:58 +00:00
Douglas Gregor ba4490399b Teach code-completion to introduce a ", ..." placeholder for variadic functions
llvm-svn: 82577
2009-09-22 21:42:17 +00:00
Douglas Gregor 9bfc2e50a7 In C++, a variadic function does not need an ellipsis prior to the comma. Parse it in both C and C++, but diagnose it as an error in C with a fix-it hint to add the comma.
llvm-svn: 82576
2009-09-22 21:41:40 +00:00
Ted Kremenek 3003001a86 Fix: <rdar://problem/7242006> [RegionStore] compound literal assignment with floats not honored
llvm-svn: 82575
2009-09-22 21:19:14 +00:00
Douglas Gregor ea9b03e6e2 Replace the -code-completion-dump option with
-code-completion-at=filename:line:column

which performs code completion at the specified location by truncating
the file at that position and enabling code completion. This approach
makes it possible to run multiple tests from a single test file, and
gives a more natural command-line interface.

llvm-svn: 82571
2009-09-22 21:11:38 +00:00
Anders Carlsson 1d3b6f62df CXXMethodDecls should always be mangled, even if they are inside an extern "C" block. Fixes PR5017.
llvm-svn: 82567
2009-09-22 20:33:31 +00:00
Fariborz Jahanian f0647a5fbc Code refactoring and cleanup.
llvm-svn: 82566
2009-09-22 20:24:30 +00:00
Fariborz Jahanian 0b51c729c9 Issue good ambiguity diagnostic when convesion fails.
llvm-svn: 82565
2009-09-22 19:53:15 +00:00
Anders Carlsson 55640546e4 If we already set a primary base, don't set it to the first nearly empty base class.
llvm-svn: 82563
2009-09-22 19:16:59 +00:00
Anders Carlsson 3dc237390f Fix speling error.
llvm-svn: 82562
2009-09-22 19:15:56 +00:00
Anders Carlsson 96cff1fc10 Explicitly initialize the PrimaryBase and PrimaryBaseWasVirtual members.
llvm-svn: 82560
2009-09-22 18:21:58 +00:00
Mike Stump 865715442e Yes.
llvm-svn: 82559
2009-09-22 17:38:02 +00:00
Anders Carlsson e7ceb85b0d (With Doug's help) fix a crash in the code completion code that lead to a test failure.
llvm-svn: 82558
2009-09-22 17:29:51 +00:00
Anders Carlsson fc51cc968b Don't assert that linkage decls are always C++, it's not true. Fixes PR5019.
llvm-svn: 82557
2009-09-22 17:23:30 +00:00
Fariborz Jahanian e983d17570 Fix a regression in accessing class getter using the dot-syntax
notation. There is still an issue accessing field of a 'Class''s isa
in legacy code using dot field access notation (as noted in the test case)
but unrelated to this patch.

llvm-svn: 82555
2009-09-22 16:48:37 +00:00
Douglas Gregor cabea40ea3 Implement code completion within a function call, triggered after the
opening parentheses and after each comma. We gather the set of visible
overloaded functions, perform "partial" overloading based on the set
of arguments that we have thus far, and return the still-viable
results sorted by the likelihood that they will be the best candidate.

Most of the changes in this patch are a refactoring of the overloading
routines for a function call, since we needed to separate out the
notion of building an overload set (common to code-completion and
normal semantic analysis) and then what to do with that overload
set. As part of this change, I've pushed explicit template arguments
into a few more subroutines.

There is still much more work to do in this area. Function templates
won't be handled well (unless we happen to deduce all of the template
arguments before we hit the completion point), nor will overloaded
function-call operators or calls to member functions.

llvm-svn: 82549
2009-09-22 15:41:20 +00:00
Daniel Dunbar e22adaebf5 Spell function pointer correctly.
llvm-svn: 82543
2009-09-22 10:19:04 +00:00
Daniel Dunbar 95d5a1d240 Add safe part of previous (reverted) commit, necessary to update to LLVM API change.
llvm-svn: 82540
2009-09-22 10:06:21 +00:00
Daniel Dunbar b879c3c125 Revert "Switch a few clients over to StringLiteral::getString.", this is breaking some projects, but I don't have a test case yet.
llvm-svn: 82539
2009-09-22 10:03:52 +00:00
Daniel Dunbar b45012dcde Update PCH serialization of FunctionDecl flags.
llvm-svn: 82526
2009-09-22 05:38:14 +00:00
Daniel Dunbar 2d925ebd0a Allow PCH files to be read from stdin.
llvm-svn: 82525
2009-09-22 05:38:01 +00:00
Ted Kremenek f9539d0c3f Fix: <rdar://problem/7242015> [RegionStore] variable passed-by-reference (via integer) to function call not invalidated
llvm-svn: 82523
2009-09-22 04:48:39 +00:00
Daniel Dunbar 5de27daf93 Switch a few clients over to StringLiteral::getString.
- Switching all of them out-of-my-current-scope-of-interest, sorry.

llvm-svn: 82515
2009-09-22 03:27:52 +00:00
Daniel Dunbar 362178883c Add StringLiteral::getString -> StringRef.
llvm-svn: 82514
2009-09-22 03:27:33 +00:00
Anders Carlsson 8143069417 Store the set of indirect primary bases directly in the record layout builder.
llvm-svn: 82513
2009-09-22 03:02:06 +00:00
Mike Stump 207c680ff3 Fix some typos. WIP. Large alignments don't work yet.
llvm-svn: 82512
2009-09-22 02:44:17 +00:00
Mike Stump 8ce0ea1360 Fix doc.
llvm-svn: 82511
2009-09-22 02:43:44 +00:00
Mike Stump 2114d7c299 Improve debug info generation for __block variables.
llvm-svn: 82508
2009-09-22 02:12:52 +00:00
Anders Carlsson d6020c321a Record layout builder cleanup.
llvm-svn: 82502
2009-09-22 00:04:45 +00:00
John McCall 9dd450bb78 Change all the Type::getAsFoo() methods to specializations of Type::getAs().
Several of the existing methods were identical to their respective
specializations, and so have been removed entirely.  Several more 'leaf'
optimizations were introduced.

The getAsFoo() methods which imposed extra conditions, like
getAsObjCInterfacePointerType(), have been left in place.

llvm-svn: 82501
2009-09-21 23:43:11 +00:00
Fariborz Jahanian 71848a3ff1 Removed -fobjc-newgc-api option. clang now conforms to
gcc-style write-barrier api only.

llvm-svn: 82493
2009-09-21 23:03:37 +00:00
Ted Kremenek 25c9c1427a Provide intermediate solution to handling assignments to structs via an
integer pointer.  For now just invalidate the fields of the struct.

This addresses: <rdar://problem/7185607> [RegionStore] support invalidation of bit fields using integer assignment

llvm-svn: 82492
2009-09-21 22:58:52 +00:00
Douglas Gregor 9d64c5e3a5 Code completion for ordinary names when we're starting a declaration, expression, or statement
llvm-svn: 82481
2009-09-21 20:51:25 +00:00
Douglas Gregor 2af2f670d1 When providing a code-completion suggestion for a hidden name, include
a nested-name-specifier that describes how to refer to that name. For
example, given:

  struct Base { int member; };
  struct Derived : Base { int member; };

the code-completion result for a member access into "Derived" will
provide both "member" to refer to Derived::member (no qualification needed) and
"Base::member" to refer to Base::member (qualification included).

llvm-svn: 82476
2009-09-21 20:12:40 +00:00
Douglas Gregor f251067530 Enhance "case" code completion in C++ to suggest qualified names for
enumerators when either the user intentionally wrote a qualified name
(in which case we just use that nested-name-specifier to match
the user's code) or when this is the first "case" statement and we
need a qualified name to refer to an enumerator in a different scope.

llvm-svn: 82474
2009-09-21 19:57:38 +00:00
Fariborz Jahanian 38c3ae9bc4 Miscellanous fixes in generatation of objc gc's write-barriers.
llvm-svn: 82472
2009-09-21 18:54:29 +00:00
Douglas Gregor d328d57c39 Code completion for "case" statements within a switch on an expression
of enumeration type, providing the various unused enumerators as options.

llvm-svn: 82467
2009-09-21 18:10:23 +00:00
Douglas Gregor 3545ff43f4 Refactor and simplify the CodeCompleteConsumer, so that all of the
real work is performed within Sema. Addresses Chris's comments, but
still retains the heavyweight list-of-multimaps data structure.

llvm-svn: 82459
2009-09-21 16:56:56 +00:00
Daniel Dunbar 143021e0ca Add missing PCH support for -fstack-protector.
llvm-svn: 82435
2009-09-21 04:16:19 +00:00
Chris Lattner bf20638966 Implement __builtin_unreachable(), a GCC 4.5 extension.
llvm-svn: 82433
2009-09-21 03:09:59 +00:00
Daniel Dunbar b7bbfdd9e6 Change ASTUnit to only initialize the predefines buffer to the suggested predefines.
- It isn't really clear what to do with the preprocessor here, but this is more sensible.

llvm-svn: 82431
2009-09-21 03:03:47 +00:00
Daniel Dunbar 7cd285f0fe Change ASTUnit to take the Diagnostic as an argument, the client should have control of this.
llvm-svn: 82430
2009-09-21 03:03:39 +00:00
Anders Carlsson a18322cea5 Start mangling expressions.
llvm-svn: 82423
2009-09-21 01:21:10 +00:00
Daniel Dunbar 9996138a80 Ok, an AssertingVH definitely doesn't work for now because we free our cache after the optimizer may have hacked on the module. Use a WeakVH instead.
llvm-svn: 82324
2009-09-19 20:17:48 +00:00
Nick Lewycky 41eaf0ac57 Make clang stop relying on ConstantStruct::get's default value for isPacked
which will be going away (ie. it's becoming a required parameter) later today.

llvm-svn: 82323
2009-09-19 20:00:52 +00:00
Daniel Dunbar 1cbaae56cf Switch CGDebugInfo type cache to using an AssertingVH.
llvm-svn: 82321
2009-09-19 19:27:24 +00:00
Daniel Dunbar de870bdcf2 Factor out CGDebugInfo::CreateTypeNode method.
- No functionality change.

llvm-svn: 82320
2009-09-19 19:27:14 +00:00
Douglas Gregor b5c738b434 In C++ code completion, only suggest the "template" keyword after ".",
"->", or "::" if we will be looking into a dependent context. It's not
wrong to use the "template" keyword, but it's to needed, either.

llvm-svn: 82307
2009-09-18 23:55:56 +00:00
Douglas Gregor ce23bae4f8 Make the construction of the code-completion string for a function
template smarter, by taking into account which function template
parameters are deducible from the call arguments. For example,

  template<typename RandomAccessIterator>
  void sort(RandomAccessIterator first, RandomAccessIterator last);

will have a code-completion string like

  sort({RandomAccessIterator first}, {RandomAccessIterator last})

since the template argument for its template parameter is
deducible. On the other hand,

  template<class X, class Y>
  X* dyn_cast(Y *Val);

will have a code-completion string like

  dyn_cast<{class X}>({Y *Val})

since the template type parameter X is not deducible from the function
call.

llvm-svn: 82306
2009-09-18 23:21:38 +00:00
Douglas Gregor 3f6ca38927 Introduce code completion patterns for templates, which provide the
angle brackets < > along with placeholder template arguments.

llvm-svn: 82304
2009-09-18 22:47:56 +00:00
Ted Kremenek 0ccd06c017 Re-introduce diagnostic caching in BugReporter that was originally added in
r82198 and then reverted. This is an intermediate solution, as diagnostic
caching should not rely on static variables.

llvm-svn: 82301
2009-09-18 22:37:37 +00:00
Ted Kremenek 3d8f862596 Reintroduce FoldingSet profiling for PathDiagnostics.
llvm-svn: 82299
2009-09-18 22:33:39 +00:00
Ted Kremenek 1e7f988f5e Fix regression introduced by r82198 that caused functions/methods with invalid CFGs to get analyzed.
llvm-svn: 82297
2009-09-18 22:29:35 +00:00
Douglas Gregor fedc328ae9 Introduce code completion strings, which describe how to *use* the
results of code completion, e.g., by providing function call syntax
with placeholders for each of the parameters.

llvm-svn: 82293
2009-09-18 22:15:54 +00:00
Anders Carlsson 82b688e423 More mangling work.
llvm-svn: 82265
2009-09-18 20:11:09 +00:00
Douglas Gregor c811ede9b7 C++ code completion after the "operator" keyword. Provide overloaded
operators, type specifiers, type names, and nested-name-specifiers.

llvm-svn: 82264
2009-09-18 20:05:18 +00:00
Anders Carlsson c3773bd669 Make the mangler conform even better to the grammar.
llvm-svn: 82262
2009-09-18 19:44:50 +00:00
Anders Carlsson 327c8df90c Make our char vector types not be explicitly signed to match GCC and to fix compilation with C++ and -fno-lax-vector-conversions
llvm-svn: 82254
2009-09-18 19:18:19 +00:00
Mike Stump f9c95be2f6 Generate more of the vbase virtual offset for covariant thunks. WIP.
llvm-svn: 82253
2009-09-18 19:06:35 +00:00
Douglas Gregor 7e90c6db18 Introduce four new code-completion hooks for C++:
- after "using", show anything that can be a nested-name-specifier.
  - after "using namespace", show any visible namespaces or namespace aliases
  - after "namespace", show any namespace definitions in the current scope
  - after "namespace identifier = ", show any visible namespaces or
    namespace aliases

llvm-svn: 82251
2009-09-18 19:03:04 +00:00
Anders Carlsson 559d9741a8 More mangler mangling.
llvm-svn: 82250
2009-09-18 19:00:18 +00:00
Anders Carlsson caf4a646f8 Call mangleTemplatePrefix.
llvm-svn: 82247
2009-09-18 18:47:07 +00:00
Anders Carlsson c1370cb49b Change manglePrefix to return early if the DC is the translation unit.
llvm-svn: 82246
2009-09-18 18:39:58 +00:00
Douglas Gregor 2ecab75739 Don't perform name lookup into a given declaration context more than once during code completion
llvm-svn: 82234
2009-09-18 18:07:23 +00:00
Douglas Gregor 56c2dbcfe7 Handle using declarations and overload sets in code completion.
llvm-svn: 82233
2009-09-18 17:54:00 +00:00
Douglas Gregor 945e8d9762 For code completion in C++ member access expressions and tag names,
look into the current scope for anything that could start a
nested-names-specifier. These results are ranked worse than any of the
results actually found in the lexical scope.

Perform a little more pruning of the result set, eliminating
constructors, __va_list_tag, and any duplication of declarations in
the result set. For the latter, implemented
NamespaceDecl::getCanonicalDecl.

llvm-svn: 82231
2009-09-18 17:42:29 +00:00
Anders Carlsson dfa3117085 Fix PR4923.
Fix error in _mm_set_pd/_mm_setr_pd and add _mm_set_epi64x/_mm_set1_epi64x. Patch by Laurent Morichetti!

llvm-svn: 82228
2009-09-18 17:03:55 +00:00
Douglas Gregor 2da11086f3 When gathering results for code completion, only include hidden
results when there is some way to refer to them in the language, such
as with a qualified name in C++.

llvm-svn: 82223
2009-09-18 15:51:54 +00:00
Douglas Gregor f45b0cf389 Implement code completion for tags, e.g., code completion after "enum"
will provide the names of various enumerations currently
visible. Introduced filtering of code-completion results when we build
the result set, so that we can identify just the kinds of declarations
we want.

This implementation is incomplete for C++, since we don't consider
that the token after the tag keyword could start a
nested-name-specifier. 

llvm-svn: 82222
2009-09-18 15:37:17 +00:00
Daniel Dunbar ebc5140e22 Disable questionable code for handling isNullPointerConstant on value dependent
expression.

llvm-svn: 82217
2009-09-18 08:46:16 +00:00
Daniel Dunbar 6276f99be5 Split Darwin toolchain into Clang and GCC Darwin toolchains with a common base.
llvm-svn: 82213
2009-09-18 08:15:13 +00:00
Daniel Dunbar 26d482a1a9 Lift AddLinkRuntimeLibArgs into Darwin tool chain.
llvm-svn: 82212
2009-09-18 08:15:03 +00:00
Daniel Dunbar d5bd81e869 Move isMacosxVersionLT helpers to Darwin tool chain.
llvm-svn: 82211
2009-09-18 08:14:55 +00:00
Daniel Dunbar 510d8a8dd8 Lift getMacosxVersionMin out into Darwin ToolChain.
llvm-svn: 82210
2009-09-18 08:14:46 +00:00
Daniel Dunbar 4c30b89def Lift AddLinkerSearchPaths() into Darwin tool chain.
llvm-svn: 82209
2009-09-18 08:14:36 +00:00
Daniel Dunbar 48622c13f7 Rename a variable to match its semantics.
llvm-svn: 82208
2009-09-18 08:14:24 +00:00
Ted Kremenek e3d209ff77 Revert most of r82198, which was causing a large number of crashes
when running the analyzer on real projects.  We'll keep the change to
AnalysisManager.cpp in r82198 so that -fobjc-gc analyzes code
correctly in both GC and non-GC modes, although this may emit two
diagnostics for each bug in some cases (a better solution will come
later).

llvm-svn: 82201
2009-09-18 07:31:15 +00:00
Ted Kremenek 82f7f9c080 Introduce caching of diagnostics in BugReporter. This provides extra
pruning of diagnostics that may be emitted multiple times.  This is
accomplished by adding FoldingSet profiling support to PathDiagnostic,
and then having BugReporter record what diagnostics have been issued.

This was motived to a serious bug introduced by moving the
'divide-by-zero' checking outside of GRExprEngine into a separate
'Checker' class.  When analyzing code using the '-fobjc-gc' option, a
given function would be analyzed twice, but the second time various
"internal checks" would be disabled to avoid emitting multiple
diagnostics (e.g., "null dereference") for the same issue.  The
problem is that such checks also effect path pruning and don't just
emit diagnostics.  This resulted in an assertion failure involving a
real divide-by-zero in some analyzed code where we would get an
assertion failure in APInt because the 'DivZero' check was disabled
and didn't prune the logic that resulted in the divide-by-zero in the
analyzer.

The implemented solution is somewhat of a hack, and may not perform
extremely well.  This will need to be cleaned up over time.

As a regression test, 'misc-ps.m' has been modified so that its tests
are run using -fobjc-gc to test this diagnostic pruning behavior.

llvm-svn: 82198
2009-09-18 05:37:41 +00:00
Chris Lattner 01ce06fbbc don't stick an uninitialized 'stat' buf into the stat cache, fill it
with zeros.  This avoids a GCC warning (PR5000)

llvm-svn: 82194
2009-09-18 04:51:01 +00:00
Anders Carlsson 2b5e1dda69 More mangling goodness.
llvm-svn: 82193
2009-09-18 04:29:09 +00:00
Anders Carlsson 7a8a74f704 Handle mangling of TemplateSpecializationType.
llvm-svn: 82189
2009-09-18 02:42:01 +00:00
Fariborz Jahanian 2e32ddc7ba Fixed a bug in generation of the new write-barriers when
array syntax is used to derefernce and assign to ivar pointee.

llvm-svn: 82183
2009-09-18 00:04:00 +00:00
Douglas Gregor 2436e7116b Initial implementation of a code-completion interface in Clang. In
essence, code completion is triggered by a magic "code completion"
token produced by the lexer [*], which the parser recognizes at
certain points in the grammar. The parser then calls into the Action
object with the appropriate CodeCompletionXXX action.

Sema implements the CodeCompletionXXX callbacks by performing minimal
translation, then forwarding them to a CodeCompletionConsumer
subclass, which uses the results of semantic analysis to provide
code-completion results. At present, only a single, "printing" code
completion consumer is available, for regression testing and
debugging. However, the design is meant to permit other
code-completion consumers.

This initial commit contains two code-completion actions: one for
member access, e.g., "x." or "p->", and one for
nested-name-specifiers, e.g., "std::". More code-completion actions
will follow, along with improved gathering of code-completion results
for the various contexts.

[*] In the current -code-completion-dump testing/debugging mode, the
file is truncated at the completion point and EOF is translated into
"code completion".

llvm-svn: 82166
2009-09-17 21:32:03 +00:00
Mike Stump faacf018a3 Fix typo.
llvm-svn: 82164
2009-09-17 21:15:00 +00:00
Douglas Gregor 4f15f4dec1 Merge uninstantiated default arguments more carefully, and try not to
complain about specializations of member functions that are not
definitions. Fixes PR4995.

llvm-svn: 82159
2009-09-17 19:51:30 +00:00
Daniel Dunbar 2f5c75e17d ARM: Incremental improvement to preprocessor defines.
- Based on patch by Shantonu.

llvm-svn: 82147
2009-09-17 16:21:10 +00:00
Anders Carlsson ca51ef156b Ignore extern "C++" { } when mangling.
llvm-svn: 82146
2009-09-17 16:12:20 +00:00
Daniel Dunbar 1da76c4e58 Add ARM register names and aliases.
- Patch by Shantonu Sen!

<rdar://problem/6922650> clang doesn't know about ARM registers for inline asm clobber lists

llvm-svn: 82132
2009-09-17 07:03:19 +00:00
Daniel Dunbar 58f7833cfb Driver: Change -O to mean -O2, -O1 is meaningless.
llvm-svn: 82131
2009-09-17 06:53:36 +00:00
Daniel Dunbar 687fa86a30 Fix two crashes on value dependent expressions (shift and null-pointer check).
- Doug, please check.

 - PR4940.

llvm-svn: 82129
2009-09-17 06:31:27 +00:00
Daniel Dunbar 4782a6ead5 Remove trailing whitespace.
llvm-svn: 82128
2009-09-17 06:31:17 +00:00
Anders Carlsson f96da57adb Revert r82123 for now.
llvm-svn: 82125
2009-09-17 05:31:47 +00:00
Anders Carlsson 93b6d5e85e Temporary band-aid for handling empty classes somewhat better.
llvm-svn: 82124
2009-09-17 04:42:56 +00:00
Anders Carlsson 49fe8b4f97 Treat an unqualified RecordType as a RecordDecl when substituting.
llvm-svn: 82123
2009-09-17 04:38:23 +00:00
Anders Carlsson 4245bf9e13 Substitution for prefixes.
llvm-svn: 82122
2009-09-17 04:16:28 +00:00
Daniel Dunbar 07806ca7ab Improve driver error message when only running the preprocessor and an input is
already preprocessed.

--
ddunbar@giles:tmp$ touch t.i
ddunbar@giles:tmp$ gcc -E t.i
ddunbar@giles:tmp$ clang -E t.i
clang: warning: t.i: previously preprocessed input unused when '-E' is present
ddunbar@giles:tmp$ 
--

<rdar://problem/6813375> [driver] driver prints confusing message when running -E on preprocessed file

llvm-svn: 82120
2009-09-17 04:13:26 +00:00
Anders Carlsson a2fb9bcd19 Substitute unscoped template names.
llvm-svn: 82119
2009-09-17 04:02:31 +00:00
Daniel Dunbar df0e62d0a1 IRgen/ObjC: Correctly construct the function info for variadic message sends.
This fixes some bad -O0 codegen and the unnecessary clearing of al on entry to objc_msgSend for most message sends.

<rdar://problem/7102824> [irgen] unnecessary xorb on calls to objc_msgSend on x86_64

llvm-svn: 82118
2009-09-17 04:01:40 +00:00
Daniel Dunbar aff9fcaa02 IRgen/ObjC: Make the target method decl available to GenerateMessageSendSuper.
llvm-svn: 82117
2009-09-17 04:01:22 +00:00
Anders Carlsson a96f56fba8 Add mangleSubstitution/addSubstitution variants that take a NamedDecl.
llvm-svn: 82116
2009-09-17 03:53:28 +00:00
Anders Carlsson df644fb773 When mangling function template specialization, mangle the type encoding of the original function template. Also, port mangle.cpp and function-template-specialization.cpp over to using FileCheck.
llvm-svn: 82114
2009-09-17 03:46:43 +00:00
Anders Carlsson 98e00bb162 Add new functions to the mangler for the <unscoped-name> and <unscoped-template-name> productions.
llvm-svn: 82113
2009-09-17 03:17:01 +00:00
Daniel Dunbar 5bb5ec5b07 PCH: When writing PCH files, tweak the predicate function deciding whether to mark a decl as "external" to be closer to reality.
This still isn't perfect, but I believe it is conservatively accurate at marking decls which IRgen needs to see, while still keeping the "deserialization footprint" on Cocoa.h.

llvm-svn: 82112
2009-09-17 03:06:51 +00:00
Daniel Dunbar 865c2a7f23 PCH: When deserializing an explicit "external definition", don't pass it to HandleTopLevelDecl -- this is already being done inside the reader.
This is something of a hack, since whether the reader actually did this depends on the "isConsumerInterestedIn" predicate. I think we need to rework how this works, but I need to discuss with Doug.

llvm-svn: 82111
2009-09-17 03:06:44 +00:00
Daniel Dunbar d112f103e7 We don't need a -compile-ast clang-cc action, we can just use -S.
llvm-svn: 82105
2009-09-17 00:47:53 +00:00
Anders Carlsson feb60501a8 Add basic substitution to the C++ mangler. It currently only looks at types.
llvm-svn: 82102
2009-09-17 00:43:46 +00:00
Anders Carlsson e7e163cc0b When creating function types, remove any top-level CVR qualifications in the function type argument types.
llvm-svn: 82093
2009-09-16 23:47:08 +00:00
Fariborz Jahanian de1d324dce patch for generating objc'2 objc_assign_ivar. WIP.
llvm-svn: 82090
2009-09-16 23:11:23 +00:00
John McCall 11083da4d0 Improved representation and support for friend class templates. Angst about same.
llvm-svn: 82088
2009-09-16 22:47:08 +00:00
Fariborz Jahanian a7fa6beb2e Starting patch to generate more specific API for objc's
GC. Currently, new API will be generated under
clang-cc's -fobjc-newgc-api flag which will eventually
become the default. WIP.

llvm-svn: 82082
2009-09-16 21:37:16 +00:00
Mike Stump d611ebaa5e Fix spelling.
llvm-svn: 82078
2009-09-16 20:41:09 +00:00
Anders Carlsson 570af5d426 Improve handling of vector casts in C++.
llvm-svn: 82072
2009-09-16 19:19:43 +00:00
Douglas Gregor 64621e6eb3 Teach Sema::FindInstantiatedDecl to find instantiated RecordDecls even
when we are not instantiating the corresponding "current
instantiation." This happens, e.g., when we are instantiating a
declaration reference that refers into the "current instantiation" but
occurs in a default function argument. The libstdc++ vector default
constructor now instantiates properly.

llvm-svn: 82069
2009-09-16 18:34:49 +00:00
Fariborz Jahanian cceedbff27 Do not generate write-barrier in indirect assignment to
a weak object.

llvm-svn: 82061
2009-09-16 18:09:18 +00:00
Fariborz Jahanian 4141deb68e Removed a superfluous check before setting
a flag (objc GC).

llvm-svn: 82052
2009-09-16 16:49:08 +00:00
Anders Carlsson 20759ad54c x86-64 ABI: If a type is a C++ record with either a non-trivial destructor or a non-trivial copy constructor, it should be passed in a pointer. Daniel, plz review.
llvm-svn: 82050
2009-09-16 15:53:40 +00:00
Benjamin Kramer 26ddfee3b2 PR4991: Properly remove trailing newline from __TIMESTAMP__.
Replace strcpy with memcpy while at it.

llvm-svn: 82043
2009-09-16 13:10:04 +00:00
Daniel Dunbar 306945d3d0 Incremental improvement to logic determining whether we emit unwind tables or
not.
 - PR4932.

llvm-svn: 82021
2009-09-16 06:17:29 +00:00
Ted Kremenek 4f335c300a Have divide-by-zero checker not handled undefined denominators. This is handled by the generic checking for undefined operands for BinaryOperators.
llvm-svn: 82019
2009-09-16 06:04:26 +00:00
Ted Kremenek 6879beda08 Remove ImplicitBadDivides/ExplicitBadDivides node sets. This checking is now down by a 'Checker' and not build into GRExprEngine.
llvm-svn: 82017
2009-09-16 06:03:39 +00:00
Chris Lattner f7ff53d4d9 fix some ppc register name issues, patch by Richard Pennington!
llvm-svn: 82009
2009-09-16 05:05:27 +00:00
Mike Stump b4bed3a497 Collapse more clang version numbers down into fewer places.
llvm-svn: 81983
2009-09-16 01:26:05 +00:00
Douglas Gregor 82e22869aa Fix a typo in a FIXME
llvm-svn: 81960
2009-09-16 00:01:48 +00:00
Mike Stump e18856dad1 Back to 1.1 we go.
llvm-svn: 81944
2009-09-15 23:04:22 +00:00
Fariborz Jahanian a9c4041471 In building list of visible conversion functions, use
result type of template convesion functions.

llvm-svn: 81943
2009-09-15 23:02:16 +00:00
Douglas Gregor 87f5406081 When implicitly declaring operators new, new[], delete, and delete[],
give them the appropriate exception specifications. This,
unfortunately, requires us to maintain and/or implicitly generate
handles to namespace "std" and the class "std::bad_alloc". However,
every other approach I've come up with was more hackish, and this
standard requirement itself is quite the hack.

Fixes PR4829.

llvm-svn: 81939
2009-09-15 22:30:29 +00:00
Fariborz Jahanian adcea10410 1) don't do overload resolution in selecting conversion
to pointer function for delete expression. 2)
Treat type conversion function and its 'const' version
as identical in building the visible conversion list.

llvm-svn: 81930
2009-09-15 22:15:23 +00:00
Mike Stump c3844bea75 Be sure to use the correct version instead of inventing the wrong one.
llvm-svn: 81924
2009-09-15 21:48:34 +00:00
Anders Carlsson c8bfc466f3 Add back the workaround since it lead to constructor conversion bugs :(
llvm-svn: 81917
2009-09-15 21:14:33 +00:00
Douglas Gregor f70b2b4f38 Make sure we're comparing the canonical types when we determine
whether a constructor is a copy constructor.

Sadly, I wasn't able to get down to a test case smaller than libstdc++'s
<string>.

llvm-svn: 81913
2009-09-15 20:50:23 +00:00
Douglas Gregor 4fb9cde8ef When printing an overload candidate that is a function template specialization,
point at the template and print out its template arguments, e.g.,

ambiguous-ovl-print.cpp:5:8: note: candidate function template specialization
      [with T = int]
  void f(T*, long);

llvm-svn: 81907
2009-09-15 20:11:42 +00:00
Fariborz Jahanian 3e6b57e593 Issue good diagnostics when initialization failes due to
ambiguity in type conversion function selection.

llvm-svn: 81898
2009-09-15 19:12:21 +00:00
Douglas Gregor 31fae89497 Add an assertion and a test case, in a fruitless attempt to track down an existing bug
llvm-svn: 81885
2009-09-15 18:26:13 +00:00
Ted Kremenek 188f62f1cc Fix static analyzer regression when emitting undefined value warnings
with binary operators.  The result of a binary operator may be
undefined even if its operands are well-defined.

llvm-svn: 81874
2009-09-15 17:43:54 +00:00