Zhongxing Xu [Fri, 28 Nov 2008 08:41:39 +0000 (08:41 +0000)]
Fix a serious bug.
When initialized, the index of the ElementRegion was unsigned. But the index
value of the ArraySubscriptExpr is signed. This inconsistency caused the value
of the array element retrieved to be UnknownVal despite it was initialized to
symbolic.
This is only a hack. Real fix of this problem is required.
Zhongxing Xu [Fri, 28 Nov 2008 03:07:05 +0000 (03:07 +0000)]
Enable the GRStateManager to do something when we finish a path. For example,
the ConstraintManager can print its internal state before its solver instance is
destroyed.
Zhongxing Xu [Thu, 27 Nov 2008 01:55:08 +0000 (01:55 +0000)]
Add support for pluggable components of static analyzer.
- Creator function pointers are saved in ManagerRegistry.
- The Register* class is used to notify ManagerRegistry new module is
available.
- AnalysisManager queries ManagerRegistry for configurable module. Then it
passes them to GRExprEngine, in turn to GRStateManager.
Douglas Gregor [Thu, 27 Nov 2008 01:19:21 +0000 (01:19 +0000)]
Add implicit conversions for Objective-C qualified ids, e.g.,
id<P0>
The intended overloading behavior of these entities isn't entirely
clear, and GCC seems to have some strange limitations (e.g., the
inability to overload on id<P0> vs. id<P1>). We'll want to revisit
these semantics and determine just how Objective-C++ overloading
should really work.
Ted Kremenek [Wed, 26 Nov 2008 23:58:26 +0000 (23:58 +0000)]
- Enhance PTH generation to write out IdentifierInfo table in two parts:
- a table including the IdentifierInfo data
- an index from persistent IdentifierInfo IDs to indices within this file.
- Enhance PTH generation to write out file map information, mapping inodes to tokens.
Douglas Gregor [Wed, 26 Nov 2008 23:31:11 +0000 (23:31 +0000)]
Implement implicit conversions for Objective-C specific types, e.g.,
converting a pointer to one Objective-C interface into a pointer to another
Objective-C interface, and conversions with 'id'. The semantics seems
to match GCC, although they seem somewhat ad hoc.
Fixed a few cases where we assumed the C++ definition of isObjectType,
but were getting the C definition, causing failures in trouble with
conversions to void pointers.
-Change Parser::ParseCXXScopeSpecifier to MaybeParseCXXScopeSpecifier
-Remove Parser::isTokenCXXScopeSpecifier and fold it into MaybeParseCXXScopeSpecifier
-Rename Parser::TryAnnotateScopeToken to TryAnnotateCXXScopeToken and only allow it to be called when in C++
Add an overload for operator<<(const DiagnosticBuilder &DB,bool I).
Fixes building error on MSVC where passing bool couldn't resolve to one of the overloads.
Set default property attributes on each property.
Implemented anonymous category (also know as continuation class)
used to override main class's property attribute. This is work in
propgress.
Daniel Dunbar [Tue, 25 Nov 2008 23:05:24 +0000 (23:05 +0000)]
Only call TryAnnotateScopeToken when parsing C++.
- This improves -parse-noop of Carbon.h by +2%, and I believe
compensates for the majority of the performance regression in r58913.
Zhongxing Xu [Mon, 24 Nov 2008 09:44:56 +0000 (09:44 +0000)]
Add support for AllocaRegion extent with GDM.
One design problem that is emerging is the signed-ness problem during static
analysis. Many unsigned value have to be converted into signed value because
it partipates in operations with signed values.
On the other hand, we cannot blindly make all values occuring in static analysis
signed, because we do have cases where unsignedness is required, for example,
integer overflow detection.
Chris Lattner [Mon, 24 Nov 2008 06:25:27 +0000 (06:25 +0000)]
Change a whole lot of diagnostics to take QualType's directly
instead of converting them to strings first. This also fixes a
bunch of minor inconsistencies in the diagnostics emitted by clang
and adds a bunch of FIXME's to DiagnosticKinds.def.
Chris Lattner [Mon, 24 Nov 2008 05:29:24 +0000 (05:29 +0000)]
Rename NamedDecl::getName() to getNameAsString(). Replace a bunch of
uses of getName() with uses of getDeclName(). This upgrades a bunch of
diags to take DeclNames instead of std::strings.
This also tweaks a couple of diagnostics to be cleaner and changes
CheckInitializerTypes/PerformInitializationByConstructor to pass
around DeclarationNames instead of std::strings.
Chris Lattner [Mon, 24 Nov 2008 03:54:41 +0000 (03:54 +0000)]
Rename NamedDecl::getIdentifierName() to ::getNameAsCString() and make it
assert if the name is not an identifier. Update callers to do the right
thing and avoid this method in unsafe cases. This also fixes an objc
warning that was missing a space, and migrates a couple more to taking
IdentifierInfo and QualTypes instead of std::strings.
Chris Lattner [Mon, 24 Nov 2008 01:28:17 +0000 (01:28 +0000)]
Rewrite FindDiagnostics to be more strict about the formatting of the
expected-foo strings. Now the only allowed characters between
expected-error and {{ is whitespace.
Chris Lattner [Sun, 23 Nov 2008 22:46:27 +0000 (22:46 +0000)]
make some objc redefinition warnings more consistent: call definitions
"definitions", not declarations. Point out the location of the
original definition.
Chris Lattner [Sun, 23 Nov 2008 22:38:38 +0000 (22:38 +0000)]
Tweak duplicate category diagnostic to work like the duplicate protocol diagnostic.
Also, point out where the previous decl was. This unxfails two tests.
Chris Lattner [Sun, 23 Nov 2008 21:45:46 +0000 (21:45 +0000)]
Convert IdentifierInfo's to be printed the same as DeclarationNames
with implicit quotes around them. This has a bunch of follow-on
effects and requires tweaking to a whole lot of code. This causes
a regression in two tests (xfailed) by causing it to emit things like:
Line 10: duplicate interface declaration for category 'MyClass1' ('Category1')
instead of:
Line 10: duplicate interface declaration for category 'MyClass1(Category1)'
I will fix this in a follow-up commit.
As part of this, I had to start switching stuff to use ->getDeclName() instead
of Decl::getName() for consistency. This is good, but I was planning to do this
as an independent patch. There will be several follow-on patches
to clean up some of the mess, but this patch is already too big.
Chris Lattner [Sun, 23 Nov 2008 20:28:15 +0000 (20:28 +0000)]
add support for inserting a DeclarationName into a diagnostic directly
without calling getAsString(). This implicitly puts quotes around the
name, so diagnostics need to be tweaked to accommodate this.
Chris Lattner [Sun, 23 Nov 2008 09:13:29 +0000 (09:13 +0000)]
Add support for sending QualType's directly into diags and convert two
diags over to use this. QualTypes implicitly print single quotes around
them for uniformity and future extension.
Doing this requires a little function pointer dance to prevent libbasic
from depending on libast.