Commit Graph

15074 Commits

Author SHA1 Message Date
Douglas Gregor 1d1d16c43e Make canonicalization of overloaded function declarations match the
Itanium C++ ABI's name mangling, since both are related to the notion
of "equivalent" function templates.

llvm-svn: 77678
2009-07-31 16:07:31 +00:00
Douglas Gregor c97f09f565 Canonicalize template template parameters. We can't test this yet, but
it's "obviously correct" :) 

llvm-svn: 77677
2009-07-31 15:46:56 +00:00
Douglas Gregor 70317123c9 Canonicalize function parameters
llvm-svn: 77676
2009-07-31 15:45:02 +00:00
Daniel Dunbar 1087599185 MultiTestRunner: Add module for lexing 'sh' commands.
llvm-svn: 77668
2009-07-31 07:59:05 +00:00
Daniel Dunbar 20a8d48e76 Add missing test suffixes.
llvm-svn: 77666
2009-07-31 05:57:11 +00:00
Daniel Dunbar 3667b99af3 MultiTestRunner: Simplify, cleanup, and rename!
- MultiTestRunner will eventually be renamed to 'lit', for LLVM integrated
   tester/testing. This has the pros of being pronouncable and short.

 - "Project" level configuration lives in 'lit.cfg', which is also what lit uses
   to find the root testing directory in some cases. This can be overridden for
   use in project files which want to precisely specify where things are.

 - TestRunner.py is not longer able to be invoked directly.
 
 - Moved some code to Util.py.

 - Introduced a configuration object.

 - Cleaned up --help, removed a few not-very-useful options.

 - Tried not to break anything that works. :)

llvm-svn: 77665
2009-07-31 05:54:17 +00:00
Douglas Gregor 802a030d6e Canonicalization and profiling for overloaded function declarations,
for those extra-esoteric cases. Not that any two given C++ compilers
agree on this test case, but this change gives us a strong definition
of equivalent types.

llvm-svn: 77664
2009-07-31 05:24:01 +00:00
Douglas Gregor 352169aed4 Canonicalize dependent extended vector types.
llvm-svn: 77663
2009-07-31 03:54:25 +00:00
Ryan Flynn d963a49756 PR3679 - enable #pragma weak aliasing.
llvm-svn: 77660
2009-07-31 02:52:19 +00:00
John McCall 9bb74a5ef5 Rename Action::TagKind to Action::TagUseKind, which removes both a misnomer
and a name collision.

llvm-svn: 77658
2009-07-31 02:45:11 +00:00
John McCall ef50e99783 sp.
llvm-svn: 77656
2009-07-31 02:20:35 +00:00
Mike Stump e9c6ffc7d1 Whitespace around else canonicalization and fix 80-col violations.
llvm-svn: 77655
2009-07-31 02:02:20 +00:00
Eli Friedman dfbd0c4b0d Make the check for the linkage of a template handle the case of nested
linkage specifications correctly.

llvm-svn: 77653
2009-07-31 01:43:05 +00:00
Anders Carlsson a076d14514 Add CK_DerivedToBase and use it PerformObjectMemberConversion.
llvm-svn: 77652
2009-07-31 01:23:52 +00:00
Mike Stump 5b78af9ed7 Fix build warnings.
llvm-svn: 77651
2009-07-31 01:10:29 +00:00
Anders Carlsson a26159261c Add a CastKind enum to CastExpr. Right now it's not used for much but it will be :)
llvm-svn: 77650
2009-07-31 00:48:10 +00:00
Ted Kremenek df4b3dc3a4 Fix use-after-release bug introduced in r77585 where the PathDiagnosticClient
created by AnalysisConsumer would be released by an instance of AnalysisManager
and then reused by later instances of AnalysisManager. Ownership of the
PathDiagnosticClient now belongs (for now) in AnalysisConsumer.

We also need this layering (for now) because the HTMLDiagnostiClient requires
that the entire translation unit be processed before emitting diagnostics. This
is done in its destructor (which should also be fixed, but that is another
issue).

This fixes PR 4653.

llvm-svn: 77648
2009-07-31 00:34:52 +00:00
Douglas Gregor f3f955279b Build canonical types for dependently-sized array types.
llvm-svn: 77647
2009-07-31 00:23:35 +00:00
Ted Kremenek bfe393fa0a Add scan-build option '-no-failure-reports' to supress the creation of a 'failures' subdirectory that includes crash reports, preprocessed files, etc.
llvm-svn: 77644
2009-07-30 23:55:19 +00:00
Douglas Gregor a21f6c3c71 Canonicalization of dependent C++0x decltype types.
llvm-svn: 77643
2009-07-30 23:36:40 +00:00
Fariborz Jahanian 6f14c73087 Synthesize the default constructor which has not
been declared as needed.

llvm-svn: 77641
2009-07-30 23:22:00 +00:00
Douglas Gregor a5dd9f858f Canonicalization for dependent typeof(expr) types.
llvm-svn: 77639
2009-07-30 23:18:24 +00:00
Owen Anderson 7ec07a573c Update for LLVM API changes.
llvm-svn: 77638
2009-07-30 23:11:26 +00:00
Anders Carlsson 5c5f160c7f Diagnose unused expression results for all statements, just not compound statements.
llvm-svn: 77631
2009-07-30 22:39:03 +00:00
Anders Carlsson 499de4252d Add casts to avoid a bunch of unused expr warnings. (They aren't reported right now due to a bug that I intend to fix). Ted, please review.
llvm-svn: 77630
2009-07-30 22:37:41 +00:00
Mike Stump 658fe02d17 Canonicalize else spacing.
llvm-svn: 77629
2009-07-30 22:28:39 +00:00
Anders Carlsson 59a2ab9720 Factor code out into a DiagnoseUnusedExprResult function.
llvm-svn: 77628
2009-07-30 22:17:18 +00:00
Mike Stump a523b2d7a0 Note some other limitations.
llvm-svn: 77626
2009-07-30 21:47:44 +00:00
Mike Stump 57724c2f7e Update based upon comments. Explain why we have an assert.
llvm-svn: 77612
2009-07-30 18:01:44 +00:00
Mike Stump 44b8e90369 We'll also need a vtable pointer if we have virtual bases.
llvm-svn: 77610
2009-07-30 17:53:53 +00:00
Douglas Gregor 833834fcab What luck! Clang obtains support for refering to members of the
current instantiation when that current instantiation is a class
template partial specialization.

llvm-svn: 77609
2009-07-30 17:50:56 +00:00
Fariborz Jahanian aa01d2a532 Patch for future ir-gen for destructor calls.
llvm-svn: 77608
2009-07-30 17:49:11 +00:00
Ted Kremenek 118cef36b8 Lexically order files.
llvm-svn: 77607
2009-07-30 17:41:23 +00:00
Douglas Gregor 1530138fd0 Support out-of-line definitions of the members of class template
partial specializations.

llvm-svn: 77606
2009-07-30 17:40:51 +00:00
Douglas Gregor 4e5a974c00 Initialize an otherwise-wild pointer. Fixes a crashy analyzer
llvm-svn: 77599
2009-07-30 16:10:26 +00:00
Benjamin Kramer 2a94b3dcdb fix cmake build
llvm-svn: 77589
2009-07-30 10:38:43 +00:00
Zhongxing Xu 4b5d6bc33a simple fixes.
llvm-svn: 77587
2009-07-30 09:14:54 +00:00
Zhongxing Xu 4b03d4913a Make AnalysisManager into its own source file and a pure data management class.
Move all components creation code into AnalysisConsumer::DigestAnalyzerOptions().

llvm-svn: 77585
2009-07-30 09:11:52 +00:00
Daniel Dunbar 7be573f05a Update CMakeLists.txt
llvm-svn: 77577
2009-07-30 03:55:04 +00:00
Argyrios Kyrtzidis fc2ed30ab8 Fix Selector <-> GlobalSelector conversion.
llvm-svn: 77575
2009-07-30 03:42:08 +00:00
Ryan Flynn 7d470f3466 PR3679 - handle #pragma weak
llvm-svn: 77573
2009-07-30 03:15:39 +00:00
Daniel Dunbar 874450c433 Add -fblocks.
llvm-svn: 77571
2009-07-30 02:43:05 +00:00
Daniel Dunbar ba848438e3 MultiTestRunner: Stop printing XFAILs on every run, this doesn't really have any
value.

llvm-svn: 77566
2009-07-30 01:57:45 +00:00
Zhongxing Xu 14407bf25a This patch collects all analysis context data into a new class
AnalysisContext.

llvm-svn: 77563
2009-07-30 01:17:21 +00:00
Eli Friedman e8caa2a72f Remove bogus "unsupported" case for vectors (which shouldn't
ever trigger).  Add an "unsupported" case that triggers for C++ code.

It would be nice if someone would implement this properly... it 
shouldn't be too hard, but I haven't looked closely at the relevant 
code.

llvm-svn: 77562
2009-07-30 01:10:26 +00:00
Mike Stump 776d3401d2 Fix type to be consistent with the rest of the code.
llvm-svn: 77560
2009-07-30 01:02:10 +00:00
Mike Stump 3dc7eb9440 Add ability to layout the vtable pointer in trivial cases. I noticed
that we would silently do bad things with virtual bases in the layout
code, so, we just turn them off.  When people do better things with
them, we can turn them back on.

llvm-svn: 77556
2009-07-30 00:22:38 +00:00
Eli Friedman 13ddd8514f Fix gcc warning.
llvm-svn: 77555
2009-07-30 00:11:31 +00:00
Fariborz Jahanian d375454dcf ir-gen for nested non-virtual base member access
in current class.

llvm-svn: 77554
2009-07-30 00:10:25 +00:00
Eli Friedman b0e2986baf Add support for -Wno-long-long.
llvm-svn: 77552
2009-07-30 00:04:39 +00:00
Argyrios Kyrtzidis bd92767014 Add support for ObjC message expressions, in the Analyzer:
-Accept an ObjC method and find all message expressions that this method may respond to.
-Accept an ObjC message expression and find all methods that may respond to it.

llvm-svn: 77551
2009-07-30 00:03:55 +00:00
Argyrios Kyrtzidis ce60c5ea60 Update CMake.
llvm-svn: 77548
2009-07-30 00:02:19 +00:00
Argyrios Kyrtzidis 2eff90515f Support ObjC methods as Entities.
llvm-svn: 77547
2009-07-29 23:41:46 +00:00
Douglas Gregor 82c80a59ee There's no point in going through the getAs<TagType> stuff to find the definition of a tag, since tags rarely have more than one or two declarations
llvm-svn: 77546
2009-07-29 23:41:44 +00:00
Argyrios Kyrtzidis 97fb3e5323 Use a STL helper template 'pair_value_iterator', by both DeclReferenceMap and SelectorMap.
llvm-svn: 77545
2009-07-29 23:41:33 +00:00
Argyrios Kyrtzidis 2e592966f8 Add ObjCMethodDecl::isThisDeclarationADefinition().
llvm-svn: 77544
2009-07-29 23:41:26 +00:00
Argyrios Kyrtzidis d70a92139f Index the selectors and provide the translation units that contain them
through the IndexProvider.

llvm-svn: 77543
2009-07-29 23:41:18 +00:00
Argyrios Kyrtzidis f7f56741e0 Add TranslationUnit::getSelectorMap().
llvm-svn: 77542
2009-07-29 23:41:08 +00:00
Argyrios Kyrtzidis b8470e4f75 Introduce SelectorMap whose purpose is to map selectors to objc methods and message exprs,
inside a particular ASTContext.

llvm-svn: 77541
2009-07-29 23:40:58 +00:00
Argyrios Kyrtzidis 34be01b9f4 Find references inside blocks.
llvm-svn: 77540
2009-07-29 23:40:48 +00:00
Argyrios Kyrtzidis c3deb79049 Use helper class ASTVisitor to fully traverse an AST.
llvm-svn: 77539
2009-07-29 23:40:39 +00:00
Argyrios Kyrtzidis d219a9a763 Introduce the GlobalSelector class in the Indexing library.
GlobalSelector is an ASTContext-independent way to refer to Objective C selectors.

llvm-svn: 77538
2009-07-29 23:40:32 +00:00
Argyrios Kyrtzidis ca8a0e24cb Use an IdentifierTable for names used for Entities.
llvm-svn: 77537
2009-07-29 23:40:21 +00:00
Argyrios Kyrtzidis 91d3df0b53 -Introduce the idx::Analyzer class used for getting indexing information, like finding
references of a declaration across translation units.

-Modify the index-test tool to use it.

llvm-svn: 77536
2009-07-29 23:40:14 +00:00
Argyrios Kyrtzidis a82e8848ee Introduce TULocation and TULocationHandler classes.
TULocation is like ASTLocation but also contains the TranslationUnit* that
the ASTLocation originated from.

llvm-svn: 77535
2009-07-29 23:40:02 +00:00
Argyrios Kyrtzidis af79296645 Modify the Indexer class so that it can return the TranslationUnit that internal
decls originated from.

llvm-svn: 77534
2009-07-29 23:39:52 +00:00
Argyrios Kyrtzidis 4560276cf5 Add Entity::getInternalDecl() to be used only on Entities that refer to internal
(in translation unit) declarations.

llvm-svn: 77533
2009-07-29 23:39:42 +00:00
Argyrios Kyrtzidis bc6c64de44 Constify ASTLocation::print.
llvm-svn: 77532
2009-07-29 23:39:35 +00:00
Argyrios Kyrtzidis f11952052c Fix some comments.
llvm-svn: 77531
2009-07-29 23:39:25 +00:00
Argyrios Kyrtzidis 82150b38d2 Add getDeclReferenceMap() to the abstract interface of TranslationUnit class.
llvm-svn: 77530
2009-07-29 23:39:18 +00:00
Argyrios Kyrtzidis ca9efa0271 Remove the TranslationUnit usage from clang-wpa.cpp since it's not really
necessary.

llvm-svn: 77529
2009-07-29 23:39:09 +00:00
Argyrios Kyrtzidis f1a0fd852f Introduce a helper template for the Handler classes and use it instead
of the iterator of the Indexer class.

llvm-svn: 77528
2009-07-29 23:39:03 +00:00
Argyrios Kyrtzidis d3e037ff89 Add an assert.
llvm-svn: 77527
2009-07-29 23:38:51 +00:00
Argyrios Kyrtzidis 14df96c730 Accept Handler objects in parameters as references.
Reinforces that they shouldn't be null and it's a bit more natural when
they are passed as stack objects.

llvm-svn: 77526
2009-07-29 23:38:45 +00:00
Argyrios Kyrtzidis 9ddd99ade7 Rename EntityHandler::HandleEntity to Handle.
llvm-svn: 77525
2009-07-29 23:38:35 +00:00
Argyrios Kyrtzidis dd9ee4aa04 -Make IndexProvider an abstract interface for getting indexing information.
-Introduce Indexer as an IndexProvider implementation.

llvm-svn: 77524
2009-07-29 23:38:21 +00:00
Douglas Gregor b6b8f9e291 Make tag declarations redeclarable. This change has three purposes:
1) Allow the Index library (and any other interested client) to walk
  the set of declarations for a given tag (enum, union, class,
  whatever). At the moment, this information is not readily available.

  2) Reduce our dependence on TagDecl::TypeForDecl being mapped down
  to a TagType (for which getDecl() will return the tag definition, if
  one exists). This property won't exist for class template partial
  specializations.

  3) Make the canonical declaration of a TagDecl actually canonical,
  e.g., so that it does not change when the tag is defined.

llvm-svn: 77523
2009-07-29 23:36:44 +00:00
Douglas Gregor 716dabbb1b Eliminate an unused-variable warning
llvm-svn: 77518
2009-07-29 22:40:58 +00:00
Owen Anderson 9793f0e4d7 Update for LLVM API change.
llvm-svn: 77514
2009-07-29 22:16:19 +00:00
Ted Kremenek c23c7e6a51 Change uses of:
Type::getAsReferenceType() -> Type::getAs<ReferenceType>()
  Type::getAsRecordType() -> Type::getAs<RecordType>()
  Type::getAsPointerType() -> Type::getAs<PointerType>()
  Type::getAsBlockPointerType() -> Type::getAs<BlockPointerType>()
  Type::getAsLValueReferenceType() -> Type::getAs<LValueReferenceType>()
  Type::getAsRValueReferenceType() -> Type::getAs<RValueReferenceType>()
  Type::getAsMemberPointerType() -> Type::getAs<MemberPointerType>()
  Type::getAsReferenceType() -> Type::getAs<ReferenceType>()
  Type::getAsTagType() -> Type::getAs<TagType>()
  
And remove Type::getAsReferenceType(), etc.

This change is similar to one I made a couple weeks ago, but that was partly
reverted pending some additional design discussion. With Doug's pending smart
pointer changes for Types, it seemed natural to take this approach.

llvm-svn: 77510
2009-07-29 21:53:49 +00:00
Ted Kremenek 4301526e8d Remove 'StoreManager::OldCastRegion()', TypedViewRegion (which only
OldCastRegion used), and the associated command line option
'-analyzer-store=old-basic-cast'.

llvm-svn: 77509
2009-07-29 21:43:22 +00:00
Fariborz Jahanian e82da999e9 Fixed test.
llvm-svn: 77506
2009-07-29 21:26:28 +00:00
Fariborz Jahanian 4b12ed115a Some refactoring of member access for
performace sake. Also added a test case.

llvm-svn: 77502
2009-07-29 20:41:46 +00:00
Eli Friedman 8e1433b370 Refactor base/member initializers, and construct them correctly in cases
with dependent types.  Fixes PR4621 and PR4627.

llvm-svn: 77498
2009-07-29 19:44:27 +00:00
Fariborz Jahanian 3f15083f73 Check accessibility when converting object to the base
class.

llvm-svn: 77497
2009-07-29 19:40:11 +00:00
Owen Anderson ade90fd1ba Update for LLVM API change.
llvm-svn: 77492
2009-07-29 18:54:39 +00:00
Fariborz Jahanian 7be1ad814b No longer need to keep base class offsets in the offset
table as it has its own place now.

llvm-svn: 77491
2009-07-29 18:50:06 +00:00
Fariborz Jahanian bb67b827d9 Patch to provide cast of objects in member access
excpression, if needed, and remove some ir-gen code
now unnencessary.

llvm-svn: 77490
2009-07-29 18:40:24 +00:00
Douglas Gregor aa87ebc0c1 [llvm up]
A template name can refer to a set of overloaded function
templates. Model this in TemplateName, which can now refer to an
OverloadedFunctionDecl that contains function templates. This removes
an unspeakable hack in Sema::isTemplateName.

llvm-svn: 77488
2009-07-29 18:26:50 +00:00
Ted Kremenek 3c6764cd3e Add an XFAILed test case that currently crashes for RegionStore. This case will
be moved to misc-ps.m when it passes.

llvm-svn: 77486
2009-07-29 18:19:16 +00:00
Ted Kremenek 70b943f206 Add another analyzer test case involving an OSAtomic function.
llvm-svn: 77485
2009-07-29 18:18:25 +00:00
Ted Kremenek 87a7a451ad Remove some uses of TypedViewRegion, and use getBaseRegion() in a context where
we don't care about ElementRegions layered on top of a base region.

llvm-svn: 77484
2009-07-29 18:17:40 +00:00
Ted Kremenek bca70671e7 Make StoreManager::InvalidateRegion() virtual, move the current implementation
in StoreManager to RegionStoreManager, and create a special, highly reduced
version in BasicStoreManager.

These changes are in preparation for future RegionStore-specific changes to
InvalidateRegion.

llvm-svn: 77483
2009-07-29 18:16:25 +00:00
Ted Kremenek ccf3335939 Add 'MemRegion::getBaseRegion()', a utility method to strip ElementRegions with
index 0.  This will be used for refinements to InvalidateRegion and CastRegion.

llvm-svn: 77481
2009-07-29 18:14:27 +00:00
Ted Kremenek bb902265af canSymbolicate() should only return true for integer types that are scalars.
llvm-svn: 77479
2009-07-29 18:12:48 +00:00
Sebastian Redl 63c4da01c8 Check for identical types in C++ catch expression. Patch by Erik Verbruggen.
llvm-svn: 77475
2009-07-29 17:15:45 +00:00
Daniel Dunbar a5b3351809 Don't use a formatted ostream when writing .ll either.
llvm-svn: 77474
2009-07-29 17:12:55 +00:00
Daniel Dunbar d8c3178cee Don't use a formatted ostream when writing .bc files. I don't really understand
this interface design, Chris please check.

llvm-svn: 77473
2009-07-29 17:10:26 +00:00
Douglas Gregor b142c2d0a8 When lookup of an identifier preceding a '<' finds a set of overloaded
functions, only return those overloaded functions that are actually
function templates. Note that there is still a glaring problem with
treating an OverloadedFunctionDecl as a TemplateName.

llvm-svn: 77472
2009-07-29 16:56:42 +00:00
Daniel Dunbar 0a1fa85894 scan-build: Don't try to index plist-html output directories
llvm-svn: 77465
2009-07-29 16:21:23 +00:00
Douglas Gregor ab60c7f60b Remove an obsolete kludge based on the previous, completely broken handling of function templates
llvm-svn: 77464
2009-07-29 16:15:53 +00:00
Douglas Gregor b55d8e914a Test redefinition of class template partial specializations
llvm-svn: 77463
2009-07-29 16:13:25 +00:00
Douglas Gregor 0004417e81 Use the new statement/expression profiling code to unique dependent
template arguments, as in template specialization types. This permits
matching out-of-line definitions of members for class templates that
involve non-type template parameters.

llvm-svn: 77462
2009-07-29 16:09:57 +00:00
Fariborz Jahanian 72b1f24bd2 Use the existing API for base offset. Use suitable llvm type
for offset ir-gen.

llvm-svn: 77458
2009-07-29 15:54:56 +00:00
Douglas Gregor 436081940c Make the Python TestRunner work for individual tests
llvm-svn: 77456
2009-07-29 15:32:08 +00:00
Steve Naroff 53fcbb89f9 Remove an ObjC-specific XFAIL (and tweak test).
llvm-svn: 77454
2009-07-29 15:24:47 +00:00
Steve Naroff 85d9715c24 Fix <rdar://problem/7100524> regression: "error: incompatible operand types ('void *' and 'NSString *')".
Remove XFAIL from 'conditional-expr-4.m' test case (which would have caught this).
Also tweaked several aspects of the test to jive with the current type checking.

llvm-svn: 77453
2009-07-29 15:09:39 +00:00
Steve Naroff d390fd99d9 Incorporate feedback from Chris (on r76979).
llvm-svn: 77452
2009-07-29 14:06:03 +00:00
Sebastian Redl 955a067bdd Make functional-style casts emit correct messages, and fix a crash-on-invalid.
llvm-svn: 77451
2009-07-29 13:50:23 +00:00
Zhongxing Xu c2394f0ad9 add a fixme
llvm-svn: 77447
2009-07-29 08:13:37 +00:00
Zhongxing Xu 52bd6e8fee delete an undefined method.
llvm-svn: 77446
2009-07-29 08:00:02 +00:00
Daniel Dunbar 1cb8d81b41 MultiTestRunner: Reenable --vg option.
- Simplified from before and using --error-exitcode so failures show up as
   failures.

llvm-svn: 77424
2009-07-29 02:57:25 +00:00
Daniel Dunbar 13796e3b95 Destroy the ASTConsumer prior to the Context, HTMLPrinter for example wants to
do a significant amount of work in its destructor, which may access the
context. (PR4642).

llvm-svn: 77423
2009-07-29 02:40:09 +00:00
Daniel Dunbar b9a68612e2 BlockScopeInfo::hasPrototype was uninitialized.
llvm-svn: 77421
2009-07-29 01:59:17 +00:00
Daniel Dunbar a444cc2fa8 CharLiteralParser::IsMultiChar was sometimes uninitialized.
llvm-svn: 77420
2009-07-29 01:46:05 +00:00
Daniel Dunbar 841f14b609 Add missing '"'
llvm-svn: 77416
2009-07-29 01:10:25 +00:00
Fariborz Jahanian 82e2874270 Code refactoring to define getCXXRecordDeclForPointerType
and use it in several places.

llvm-svn: 77411
2009-07-29 00:44:13 +00:00
Mike Stump d97c26921a Be sure to turn on -fblocks.
llvm-svn: 77406
2009-07-29 00:17:20 +00:00
Mike Stump 93246cc475 Some minor cleanups, thanks Chris.
llvm-svn: 77402
2009-07-28 23:57:15 +00:00
Mike Stump 2adb4dab54 Some style fixes, thanks Chris.
llvm-svn: 77400
2009-07-28 23:47:15 +00:00
Mike Stump bce7a27d22 Add support for -Wmissing-noreturn.
llvm-svn: 77391
2009-07-28 23:11:12 +00:00
Douglas Gregor a8e02e7863 Refactor the code that produces a TemplateSpecializationType, so that
canonicalization for dependent TemplateSpecializationTypes occurs
within ASTContext::getTemplateSpecializationType. Also, move template
argument canonicalization into ASTContext::getCanonicalTemplateArgument.

llvm-svn: 77388
2009-07-28 23:00:59 +00:00
Chris Lattner a58b3af802 remove extraneous braces
llvm-svn: 77386
2009-07-28 22:49:34 +00:00
Mike Stump 3bf1ab48d3 Add noreturn support for blocks.
llvm-svn: 77377
2009-07-28 22:04:01 +00:00
Fariborz Jahanian f17071580f ir-gen derived-to-base conversion in implicit casts.
llvm-svn: 77374
2009-07-28 22:00:58 +00:00
Owen Anderson 3cc120a51e Update for LLVM API change.
llvm-svn: 77368
2009-07-28 21:22:35 +00:00
Anders Carlsson 019f414261 Remove the old RecordOrganizer.
llvm-svn: 77365
2009-07-28 21:03:34 +00:00
Ted Kremenek a41d9dd1f1 Fix PR 4631. The compound initializers of unions were not being evaluated, which
could cause false positives if any the subexpressions had side-effects. These
initializers weren't evaluated because the StoreManager would need to handle
them, but that's an orthogonal problem of whether or not the StoreManager can
handle the binding.

llvm-svn: 77361
2009-07-28 20:46:55 +00:00
Ted Kremenek 2d2ee236cf Add missing break statement.
llvm-svn: 77356
2009-07-28 19:34:30 +00:00
Mike Stump 9b706bcd98 Update comments.
llvm-svn: 77355
2009-07-28 19:31:47 +00:00
Ted Kremenek faf0c64d9d Fix regression in attribute 'nonnull' checking when a transition node
was created but not added to the destination NodeSet.  This fixes PR 4630.

llvm-svn: 77353
2009-07-28 19:24:31 +00:00
Anders Carlsson fc8cfa8b9f Add a field for C++ specific data to ASTRecordLayout. Use it to store the non-virtual size and alignment + base offsets.
llvm-svn: 77352
2009-07-28 19:24:15 +00:00
Fariborz Jahanian a399dfae19 More cleanup of data member access and then some.
llvm-svn: 77351
2009-07-28 18:54:57 +00:00
Owen Anderson 47034e1733 Update for LLVM API change.
llvm-svn: 77349
2009-07-28 18:33:04 +00:00
Chris Lattner 2706a55071 fix PR4633: cast to void should silence the 'unused expression' warning.
llvm-svn: 77344
2009-07-28 18:25:28 +00:00
Chris Lattner 1d0f16f22a add some fixme's
llvm-svn: 77343
2009-07-28 18:25:06 +00:00
Chris Lattner d829eb65ff this test crashes, disable it harder.
llvm-svn: 77342
2009-07-28 18:22:50 +00:00
Fariborz Jahanian b77659f4ae Some code cleanup.
llvm-svn: 77339
2009-07-28 18:09:28 +00:00
Anders Carlsson d5d6413aa5 More CGRecordLayoutBuilder cleanup.
llvm-svn: 77335
2009-07-28 17:56:36 +00:00
Fariborz Jahanian 5142fbd02e More work toward data member access ir-gen.
llvm-svn: 77332
2009-07-28 17:38:28 +00:00
Anders Carlsson 32d105d8d4 Add two more tests.
llvm-svn: 77330
2009-07-28 17:14:18 +00:00
Douglas Gregor 8ce432e9eb Add a template test that requires canonical expression comparison
llvm-svn: 77325
2009-07-28 16:39:54 +00:00
Douglas Gregor 32615a13f4 Fix a typo in a comment
llvm-svn: 77324
2009-07-28 16:39:25 +00:00
Douglas Gregor d9aedfaa5a Profiling the pointer of a canonical type is sufficient to uniquely identify the type
llvm-svn: 77321
2009-07-28 15:32:17 +00:00
Douglas Gregor 4488259d40 Finish profile support for statements.
llvm-svn: 77320
2009-07-28 15:27:13 +00:00
Douglas Gregor a709509f96 Complete profile support for C++ and Objective-C expressions
llvm-svn: 77318
2009-07-28 14:44:31 +00:00
John McCall 8945266f3d Bounds checking for address spaces.
llvm-svn: 77303
2009-07-28 06:52:18 +00:00
Daniel Dunbar ec5ae3d75a CallExpr's SubExprs sometimes were allocated in the wrong place.
llvm-svn: 77302
2009-07-28 06:29:46 +00:00
John McCall 7be52a8179 Reimplement QualifierSet using a single word, as requested by dgregor.
llvm-svn: 77299
2009-07-28 05:41:20 +00:00
Argyrios Kyrtzidis f390c43c3c Implement ObjCMethodDecl::getCanonicalDecl().
llvm-svn: 77298
2009-07-28 05:11:17 +00:00
Argyrios Kyrtzidis a56fa19ac6 -Add ObjCCategoryImplDecl::getCategoryClass() which returns the category interface decl.
-Correct ObjCMethodDecl::getNextRedeclaration(); A method in a ObjCCategoryImplDecl should point to
a method in the associated ObjCCategoryDecl, not the ObjCInterfaceDecl.

llvm-svn: 77297
2009-07-28 05:11:05 +00:00
Argyrios Kyrtzidis 2cee40daa7 Use ObjCImplDecl in place of ObjCCategoryImplDecl/ObjCImplementationDecl.
llvm-svn: 77296
2009-07-28 05:10:52 +00:00
Mike Stump a4de80b8b1 Make longjmp a real builtin.
llvm-svn: 77291
2009-07-28 02:25:19 +00:00
John McCall caa1945306 Allow functions to be marked "implicit return zero" and so mark main().
Codegen by initializing the return value with its LLVM type's null value.

llvm-svn: 77288
2009-07-28 01:00:58 +00:00
Douglas Gregor 5c193b9e18 Add a Profile function for statements so that we can (eventually) determine
when statements and expressions are equivalent.

llvm-svn: 77284
2009-07-28 00:33:38 +00:00
Ted Kremenek 0799d4f0bb Only generate preprocessed files during crashes using Clang, not GCC.
llvm-svn: 77281
2009-07-28 00:14:21 +00:00
Ted Kremenek 4c9f161fd5 Fix helper function GetNextStmt() to look for the first statement that has a
valid SourceLocation.

llvm-svn: 77280
2009-07-28 00:07:15 +00:00
Mike Stump 82a9e445b7 Make sure to move the comment with the code.
llvm-svn: 77279
2009-07-28 00:07:08 +00:00
Fariborz Jahanian e309b48a22 Patch for objc's zero-const exception to not assume
that @catch(...) cathces all exceptions (c++ objects
are not cought by that).

llvm-svn: 77270
2009-07-27 23:12:41 +00:00
Owen Anderson 0e0189d64d Update for LLVM API change.
llvm-svn: 77267
2009-07-27 22:29:56 +00:00
Mike Stump 31d9254f7a Ensure we can work through typedefs.
llvm-svn: 77265
2009-07-27 22:25:19 +00:00
Ted Kremenek 04ade6f1cb (1) Enable PlistDiagnostics to take an option "PathDiagnosticClientFactory"
object that it can use to forward PathDiagnostics for further processing. Along
with this feature, the PlistDiagnostics object logs which files are created by
the forwarding of the PathDiagnostics.

(2) Create a new PathDiagnosticClientFactory object for HTMLDiagnostics,
allowing other PathDiagnosticClients to forward PathDiagnostics through an
opaque interface.

(3) Create a "plist-html" diagnostics option in AnalysisConsumer to allow the
    logging of HTML files created in a hybrid Plist+HTML diagnostic client.

llvm-svn: 77264
2009-07-27 22:13:39 +00:00
Ted Kremenek 5cc54863ce Add scan-build support for 'plist-html', a hybrid mode that supports the
creation of both HTML and plist files. Plist files are currently not generated
using the same layout algorithm as just specifying '-plist', so this is mainly
intended to help support automated runs of the analyzer.

llvm-svn: 77263
2009-07-27 22:10:34 +00:00
Mike Stump 9e3b01f697 Add knowledge about _longjmp being noreturn.
llvm-svn: 77254
2009-07-27 21:45:16 +00:00
Mike Stump 9a9e0c2b17 Add builtin knowledge about longjmp being noreturn. Add printing for
the noreturn attribute.

llvm-svn: 77253
2009-07-27 21:33:40 +00:00
Owen Anderson e05f2ed478 Update for LLVM API change.
llvm-svn: 77249
2009-07-27 21:00:51 +00:00
Fariborz Jahanian 7b2b1ec6b1 Some minor changes toward support of data
member access in the presense of non-virtual bases.

llvm-svn: 77246
2009-07-27 20:57:45 +00:00
Benjamin Kramer 8675976806 fix test (broken in r77224)
llvm-svn: 77241
2009-07-27 19:53:49 +00:00
Mike Stump ca6c875e47 Add noreturn for exit.
llvm-svn: 77237
2009-07-27 19:14:18 +00:00
Argyrios Kyrtzidis 067c407c48 Make ObjCImplDecl inherit from ObjCContainerDecl.
ObjCContainerDecl now is the root class for objc decls that contain methods.

llvm-svn: 77235
2009-07-27 19:04:32 +00:00
Daniel Dunbar b8aa9589bb Tweak MultiTestRunner --path argument.
- Accept multiple values instead of embedding separator.
 - Make sure this gets used when searching for 'clang' binary.
 - Switch makefiles to using --path to stay in sync with cmake.

llvm-svn: 77234
2009-07-27 19:01:13 +00:00
Devang Patel 6a3b3fe98a Use DICompositeType->replaceAllUsesWith()
llvm-svn: 77228
2009-07-27 18:42:03 +00:00
Douglas Gregor 4d37791bc3 Fix typo in error message
llvm-svn: 77224
2009-07-27 18:33:18 +00:00
Douglas Gregor ed873d6767 Prepare CMake regression testing for Daniel's upcoming fix to the test runner
llvm-svn: 77223
2009-07-27 18:31:49 +00:00
Douglas Gregor d612997e73 When instantiating a variable without an initializer, call
ActOnUninitializedDecl.

llvm-svn: 77211
2009-07-27 17:43:39 +00:00
Anders Carlsson cabdeb4932 Use the CGRecordLayoutBuilder even if there are no fields, because in C++ an empty class will have a padding byte.
llvm-svn: 77205
2009-07-27 17:10:54 +00:00
Anders Carlsson 72fb384a65 Enable the new struct type builder now that the constant struct builder works. (The old code will still be there until we know that everything works well.
llvm-svn: 77190
2009-07-27 15:31:55 +00:00
Anders Carlsson b97a3ec4e7 Fix a tail padding bug in the record layout builder code. The bug was found by an existing test.
llvm-svn: 77189
2009-07-27 14:55:54 +00:00
Anders Carlsson b7130ed888 Enable the new constant struct builder by default. The old code is still in place but will be removed shortly. The new struct builder works on big endian systems.
llvm-svn: 77185
2009-07-27 05:54:15 +00:00
Chris Lattner 4ead0b9e1c add bugzilla #
llvm-svn: 77183
2009-07-27 04:49:58 +00:00
Anders Carlsson bff6b49cd0 More work on the constant struct builder, fix a couple of thinkos and add support for inserting part of a bitfield in the previous byte.
llvm-svn: 77180
2009-07-27 02:56:37 +00:00
Anders Carlsson ba4c6d1c91 More work on bitfield support in the new constant struct builder.
llvm-svn: 77177
2009-07-27 01:23:51 +00:00
Mike Stump 21e0f895a1 Fix PR4624.
llvm-svn: 77176
2009-07-27 00:44:23 +00:00
Nuno Lopes bd2cd92907 fix segfault (because of erasing after the vector boundaries) when the cached token position is at the end
llvm-svn: 77159
2009-07-26 16:36:45 +00:00
Nuno Lopes 0b797b1c9d add gentoo 2009.0 g++ header locations
llvm-svn: 77158
2009-07-26 16:14:05 +00:00
Daniel Dunbar e59313a298 Switch to getName()
llvm-svn: 77151
2009-07-26 09:28:40 +00:00
Daniel Dunbar 600dfac30a Switch to using llvm::Value::getName()
llvm-svn: 77147
2009-07-26 08:32:30 +00:00
Daniel Dunbar 4f7dfaf650 Update for API change.
llvm-svn: 77112
2009-07-26 02:21:04 +00:00
Daniel Dunbar 6a82e424d0 Lookup targets by Triple instead of Module.
llvm-svn: 77108
2009-07-26 01:27:26 +00:00
Mike Stump ea086c7263 Preserve qualifiers.
llvm-svn: 77097
2009-07-25 23:24:03 +00:00
Ryan Flynn e5dc8594ea PR3575 - warn on declared variable or function attributes after a definition, which are currently ignored.
llvm-svn: 77095
2009-07-25 22:29:44 +00:00
Argyrios Kyrtzidis 39c348d915 Refactor ObjCImplDecl::getInstanceMethod/getClassMethod into one
ObjCImplDecl::getMethod.

llvm-svn: 77094
2009-07-25 22:16:03 +00:00
Argyrios Kyrtzidis 553376be19 Refactor ObjCInterfaceDecl::lookupInstanceMethod/lookupClassMethod into one
ObjCInterfaceDecl::lookupMethod.

llvm-svn: 77093
2009-07-25 22:15:51 +00:00
Argyrios Kyrtzidis e6ed65bee0 Refactor ObjCProtocolDecl::lookupInstanceMethod/lookupClassMethod into one
ObjCProtocolDecl::lookupMethod.

llvm-svn: 77092
2009-07-25 22:15:38 +00:00
Argyrios Kyrtzidis 6de0560b97 Refactor ObjCContainerDecl::getInstanceMethod/getClassMethod into one
ObjCContainerDecl::getMethod.

Avoids code duplication.

llvm-svn: 77091
2009-07-25 22:15:22 +00:00
Mike Stump 81db910eb9 Improve comments (Thanks Fariborz).
llvm-svn: 77090
2009-07-25 22:12:02 +00:00
Mike Stump 8c5d7996e8 Add noreturn as a type attribute, handle printing for them and handle
calls to noreturn function pointers when CFG building.

llvm-svn: 77089
2009-07-25 21:26:53 +00:00
Fariborz Jahanian dedf1e4b1a ir-gen for non-virtual base class initialization
in constructors.

llvm-svn: 77087
2009-07-25 21:12:28 +00:00
Sebastian Redl 9f831dbbcd Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conversions, like vectors, but allows conversions via constructors and conversion operators.
Add custom conversions to static_cast.

llvm-svn: 77076
2009-07-25 15:41:38 +00:00
Daniel Dunbar 605bd11311 MultiTestRunner: Make sure to point at src dir, for out of tree builds.
Factor out routine for executing the script commands.

llvm-svn: 77075
2009-07-25 15:26:08 +00:00
Daniel Dunbar 4edf8a17d5 MultiTestRunner: Cleanup test execution & output.
- Stop writing everything to files.

 - Make test output more standard.

llvm-svn: 77074
2009-07-25 14:46:05 +00:00
Daniel Dunbar f7e06f946c MultiTestRunner: Drop external script and DejaGNU compatibility options for now.
- We don't use the former, and the latter doesn't actually work.

llvm-svn: 77073
2009-07-25 13:19:40 +00:00
Daniel Dunbar 6db90064f8 MultiTestRunner: Disable valgrind support for now, I don't feel like maintaining
it currently.

llvm-svn: 77072
2009-07-25 13:13:06 +00:00
Daniel Dunbar a2f6b0dde0 MultiTestRunner/Win32: Add SYSTEMROOT to environment, replace '&&' in .bat
files.

llvm-svn: 77071
2009-07-25 12:57:15 +00:00
Daniel Dunbar 595c98729b Make having no RUN line a failure.
Doug, please look at decltype-crash and instantiate-function-1.mm, I'm not sure
if they are actually testing the right thing / anything.

llvm-svn: 77070
2009-07-25 12:47:38 +00:00
Daniel Dunbar b6372fa7bb Remove TESTDIR initialization, MultiTestRunner can find the test dirs itself.
llvm-svn: 77069
2009-07-25 12:44:58 +00:00
Daniel Dunbar 6d8adef9a0 Remove empty tests, left over from an svn revert.
llvm-svn: 77068
2009-07-25 12:41:25 +00:00
Daniel Dunbar 011e3c9905 Remove this Makefile, it is unused.
llvm-svn: 77067
2009-07-25 12:37:21 +00:00
Daniel Dunbar 6c6c0e1769 MultiTestRunner: Oops, clang wasn't being substituted properly. This is why the
cxx-using-declaration test case started exhibiting different behavior. It still
needs to be fixed, however...

llvm-svn: 77066
2009-07-25 12:23:35 +00:00
Daniel Dunbar e87599356f MultiTestRunner: Always use absolute path names for tests.
Also, fix a function name I forgot to update.

llvm-svn: 77064
2009-07-25 12:05:55 +00:00
Daniel Dunbar 14d9d2fb78 Disable this test: cxx-using-declaration.cpp
Something strange is going on here; this test randomly started failing after
unrelated changes to TestRunner.py (even though it runs the same
script).

Argiris or Doug, can one of you investigate?

llvm-svn: 77063
2009-07-25 11:55:03 +00:00
Daniel Dunbar 97ea867690 MultiTestRunner: Validate '&&' at the end of RUN lines.
- This is just to normalize, these will go away soon hopefully.

Added all the missing '&&'s that have crept in. :)

llvm-svn: 77062
2009-07-25 11:27:37 +00:00
Daniel Dunbar 3ab3b5e17a MultiTestRunner: Explicitly define child environment, the only variable we need
to import is the PATH.

llvm-svn: 77061
2009-07-25 10:14:19 +00:00
Daniel Dunbar 3c2da2bb7e MultiTestRunner.py improvements.
- Tweak output directories for temp files, derive the temporary base from the
   test's parent directory name, and the test name (instead of the whole path).

llvm-svn: 77059
2009-07-25 09:53:43 +00:00
Daniel Dunbar e6475f1192 MultiTestRunner.py improvements.
- Not improved: the horribly lousy name. :)

 - Suppress stderr when capturing output.

 - Rewrite which() to do the right PATH search instead of being lazy and
   shelling out to 'which'.

 - On Windows, run scripts as batch files (via 'cmd /c ...').

llvm-svn: 77058
2009-07-25 09:42:24 +00:00
Daniel Dunbar 6bdd19a7e2 Change these tests to not depend as much on the name of the input.
llvm-svn: 77057
2009-07-25 09:01:12 +00:00
John McCall 02dee0a46a Semantic checking for main().
Fix some invalid main() methods in the test suite that were nicely
exposed by the new checks.

llvm-svn: 77047
2009-07-25 04:36:53 +00:00
John McCall 732d15b9b9 Flesh out the QualifierSet API.
llvm-svn: 77046
2009-07-25 04:35:50 +00:00
Anders Carlsson 3b484b928d More work on the constant struct builder. We can now convert the struct to a packed struct when necessary.
llvm-svn: 77038
2009-07-25 01:40:29 +00:00
Fariborz Jahanian f464edf81f Some code refactoring per Daniel's feedback.
llvm-svn: 77030
2009-07-25 01:08:28 +00:00
Anders Carlsson e9e9abb2fb Whoops, did not mean to check this in.
llvm-svn: 77022
2009-07-25 00:26:00 +00:00
Anders Carlsson 87a9a34e5b More work on the constant struct builder. We now try to layout all constant structs but throw away the result.
llvm-svn: 77021
2009-07-25 00:24:56 +00:00
Owen Anderson b7a2fe6f81 Update for LLVM API change.
llvm-svn: 77012
2009-07-24 23:12:58 +00:00
Douglas Gregor a6ef8f0813 Template instantiation for static data members that are defined out-of-line.
Note that this also fixes a bug that affects non-template code, where we 
were not treating out-of-line static data members are "file-scope" variables,
and therefore not checking their initializers.

llvm-svn: 77002
2009-07-24 20:34:43 +00:00
Fariborz Jahanian 4dcc53f312 Fixes broken test by accident.
llvm-svn: 77001
2009-07-24 20:33:35 +00:00
Fariborz Jahanian a5c335527d More Sema check for constructor's member initializer along
with type conversion to fix ir-gen crash.

llvm-svn: 77000
2009-07-24 20:28:49 +00:00
Ted Kremenek b9cb11391d In the "use of floating point variable as loop counter" check, check
if the DeclRefExpr is a float, not just either argument.

llvm-svn: 76998
2009-07-24 20:26:31 +00:00
Ted Kremenek 9c3952c03e Have 'clang --analyze' run syntactic static analysis security checks.
llvm-svn: 76996
2009-07-24 20:03:11 +00:00
Mike Stump d3bb557559 Fix 80-col violations, reflow a few comments and zap some extra
whitespace at ends of lines.

llvm-svn: 76992
2009-07-24 19:02:52 +00:00
Anders Carlsson 5e66fb5d16 Fix a release build warning.
llvm-svn: 76985
2009-07-24 18:20:38 +00:00
Fariborz Jahanian 2a1b5af130 More work toward initialization of objects
in constructors.

llvm-svn: 76980
2009-07-24 17:57:02 +00:00
Steve Naroff e87026a08f Allow front-end 'isa' access on object's of type 'id'.
Enhance test case to cover 'isa' access on interface types (clang produces an error, GCC produces a warning).

Still need back-end CodeGen for ObjCIsaExpr.

llvm-svn: 76979
2009-07-24 17:54:45 +00:00
Anders Carlsson e2c6baf629 Don't use getLLVMFieldNo for bitfields when constructing the ivar layout maps for GC.
llvm-svn: 76978
2009-07-24 17:23:54 +00:00
Anders Carlsson e1d5ca583f Check in a half finished new constant struct builder (Obviously not used yet).
llvm-svn: 76969
2009-07-24 15:20:52 +00:00
Daniel Dunbar c46a079957 Fix declaration of obc_enumerationMutation function, for GNU runtime.
llvm-svn: 76959
2009-07-24 07:40:24 +00:00
Ted Kremenek 963cc31583 Add doxygen comments and simplify expression.
llvm-svn: 76955
2009-07-24 06:55:42 +00:00
Ted Kremenek 3075428d16 Introduce a new variant type 'TryResult' to represent the result of
TryEvaluateBool instead of using a raw 'int'.  This avoids any
confusion of how 'int' converts to bool, and makes the resultant code
easier to read.

Condense a bunch of 'addSuccessor()' calls in 'if ... else' to use the
ternary operator instead.

llvm-svn: 76947
2009-07-24 04:47:11 +00:00
Zhongxing Xu 30ac7607be Add getDecl() to CallGraph and CallGraphNode.
llvm-svn: 76940
2009-07-24 03:41:11 +00:00
Zhongxing Xu 6c82313375 Constify methods.
llvm-svn: 76939
2009-07-24 03:38:27 +00:00
John McCall d9baf6aed8 Test commit: make a little stub routine for semantic checking of main().
llvm-svn: 76934
2009-07-24 03:03:21 +00:00
Ted Kremenek cd31df0f3f Enable the '-warn-security-syntactic' checker option by default.
llvm-svn: 76933
2009-07-24 02:52:07 +00:00
Mike Stump 8e79f99b16 Implement new warning for functions declared 'noreturn' when they fall off the end.
llvm-svn: 76932
2009-07-24 02:49:01 +00:00
Anders Carlsson 6e853bf2b7 Get rid of the size parameter to AppendField. No functionality change.
llvm-svn: 76931
2009-07-24 02:45:50 +00:00
Ted Kremenek 745088c49e Mark destructor of Checker virtual.
llvm-svn: 76924
2009-07-24 00:40:31 +00:00
Douglas Gregor c04e2d9bd6 We now do complete semantic checking for unions
llvm-svn: 76918
2009-07-24 00:05:42 +00:00
Douglas Gregor 020e4a9bbb Update C++ status to reflect progress on out-of-line definitions of class template members
llvm-svn: 76917
2009-07-23 23:58:15 +00:00
Douglas Gregor 79f83eda84 This patch fixes the implementations of the __has_trivial_destructor
and __has_trivial_constructor builtin pseudo-functions and
additionally implements __has_trivial_copy and __has_trivial_assign,
from John McCall!

llvm-svn: 76916
2009-07-23 23:49:00 +00:00
Daniel Dunbar 91ade14197 Output UTF-16 string literals independent of host byte order.
- Steve, can you take a look at this? It seems like this code should live
   elsewhere, and there is a FIXME about having Sema validates the UTF-8 to
   UTF-16 conversion.

llvm-svn: 76915
2009-07-23 23:41:22 +00:00
Fariborz Jahanian ca2f085a4e Diagnose when base classes and members to be intialized
with constructors don't have a matching constructor.

llvm-svn: 76913
2009-07-23 23:32:59 +00:00
Mike Stump 773582dbb8 Refactor and push the evaluation as late as possible.
llvm-svn: 76911
2009-07-23 23:25:26 +00:00