Commit Graph

7023 Commits

Author SHA1 Message Date
Douglas Gregor 7f6d60dcc2 Optionally store a PreprocessingRecord in the preprocessor itself, and
tie its creation to a CC1 flag -detailed-preprocessing-record.

llvm-svn: 98963
2010-03-19 16:15:56 +00:00
John McCall ef01f71a5a Pretty-print anonymous types using their kind and presumed location.
Fixes PR6643.  Patch by Mike M!

llvm-svn: 98946
2010-03-19 07:56:44 +00:00
John McCall a0296f7987 Remember the "found declaration" for an overload candidate, which is the
entity (if applicable) which was actually looked up.  If a candidate was found
via a using declaration, this is the UsingShadowDecl;  otherwise, if
the candidate is template specialization, this is the template;  otherwise,
this is the function.

The point of this exercise is that "found declarations" are the entities
we do access control for, not their underlying declarations.  Broadly speaking,
this patch fixes access control for using declarations.

There is a *lot* of redundant code calling into the overload-resolution APIs;
we really ought to clean that up.

llvm-svn: 98945
2010-03-19 07:35:19 +00:00
Fariborz Jahanian 8342e5776e Some cleanup, change diagnostic when assigning to
a property which is not lvalue.

llvm-svn: 98848
2010-03-18 18:50:41 +00:00
Douglas Gregor 78ae2481b6 Explicitly link macro instantiations to macro definitions in the
preprocessing record. Use that link with clang_getCursorReferenced()
and clang_getCursorDefinition() to match instantiations of a macro to
the definition of the macro.

llvm-svn: 98842
2010-03-18 18:23:03 +00:00
Douglas Gregor 06d6d32762 Expose macro definitions as CIndex cursors. These can still only be
generated by clang_annotateTokens().

llvm-svn: 98837
2010-03-18 18:04:21 +00:00
Douglas Gregor 065f8d11ca Introduce the notion of a "preprocessing record", which keeps track of
the macro definitions and macro instantiations that are found
during preprocessing. Preprocessing records are *not* generated by
default; rather, we provide a PPCallbacks subclass that hooks into the
existing callback mechanism to record this activity.

The only client of preprocessing records is CIndex, which keeps track
of macro definitions and instantations so that they can be exposed via
cursors. At present, only token annotation uses these facilities, and
only for macro instantiations; both will change in the near
future. However, with this change, token annotation properly annotates
macro instantiations that do not produce any tokens and instantiations
of macros that are later undef'd, improving our consistency.

Preprocessing directives that are not macro definitions are still
handled by clang_annotateTokens() via re-lexing, so that we don't have
to track every preprocessing directive in the preprocessing record.

Performance impact of preprocessing records is still TBD, although it
is limited to CIndex and therefore out of the path of the main compiler.

llvm-svn: 98836
2010-03-18 17:52:52 +00:00
Douglas Gregor 02ded2a56c More token-annotation experimentation, preprocessing the annotated
token sequence to detect macro instantiations (that produce at least
token). WIP.

llvm-svn: 98826
2010-03-18 15:23:44 +00:00
Ted Kremenek 48ad2c92fc Bump clang minor version (1.5).
llvm-svn: 98801
2010-03-18 04:39:55 +00:00
Ted Kremenek 1ff615ce4c Turn several PCH reader assertions into compiler errors, thus making
the PCHReader more robust to corrupt or invalid PCH files.

llvm-svn: 98788
2010-03-18 00:56:54 +00:00
Douglas Gregor 92a524fd47 Experimental stab at using relexing to identify preprocessor
directives while annotating tokens in CIndex. This functionality
should probably be factored out of this routine, but we're not there
yet. 

llvm-svn: 98786
2010-03-18 00:42:48 +00:00
Douglas Gregor ee8fed0146 Reduce the default alignment for ASTContext and Stmt/Expr allocation
from 16 bytes to 8 bytes, since we don't ever use those low 4
bits. Should save some storage.

llvm-svn: 98754
2010-03-17 18:46:59 +00:00
Douglas Gregor 319aa6c4b5 Remove warning about shadowing a built-in; built-ins aren't actually
considered to be a part of the translation unit unless they're named
in a way that brings them into existence.

llvm-svn: 98729
2010-03-17 16:03:44 +00:00
Douglas Gregor 4ad3da2843 Entering the main source file in the preprocessor can fail if the
source file has been changed. Handle that failure more gracefully.

llvm-svn: 98727
2010-03-17 15:44:30 +00:00
Douglas Gregor 6597f59506 Use a simple diagnostic (file modified) when we detect that a file has
changed, rather than trying to point out how it changed. The "why"
doesn't matter.

llvm-svn: 98725
2010-03-17 15:30:15 +00:00
Kovarththanan Rajaratnam 9ff84d9c27 Simplify ProcessWarningOptions since it can't fail
llvm-svn: 98721
2010-03-17 09:36:02 +00:00
Kovarththanan Rajaratnam 5d272cda19 Remove useless forward decl.
llvm-svn: 98720
2010-03-17 09:25:49 +00:00
Kovarththanan Rajaratnam 4a94ba56f1 Issue a proper diagnostic if we couldn't open dump file
llvm-svn: 98719
2010-03-17 09:24:48 +00:00
Kovarththanan Rajaratnam c1e817ef51 Remove useless foward decl.
llvm-svn: 98718
2010-03-17 08:44:19 +00:00
Zhongxing Xu 03fd76663e Mark CXXThisRegion in the current or parent stack frame context as live so that
their bindings are not removed.

llvm-svn: 98705
2010-03-17 03:35:08 +00:00
John McCall 59bb1d4657 Make -faccess-control and -fno-access-control driver options.
llvm-svn: 98703
2010-03-17 01:32:13 +00:00
John McCall 2ff380a43a Clean up after ourselves when there's an error parsing the base clause.
Fixes the crash-on-invalid in PR6629.

llvm-svn: 98698
2010-03-17 00:38:33 +00:00
Fariborz Jahanian b8b0ea330c objective-c patch to provide type safty when blocks are passing or
returning objc objects. There will be a corresponding objective-c++
patch soon.

llvm-svn: 98696
2010-03-17 00:20:01 +00:00
Douglas Gregor 82752ec843 Teach SourceManager's content cache to keep track of whether its
buffer was invalid when it was created, and use that bit to always set
the "Invalid" flag according to whether the buffer is invalid. This
ensures that all accesses to an invalid buffer are marked invalid,
improving recovery.

llvm-svn: 98690
2010-03-16 22:53:51 +00:00
John McCall a2a3f7dc11 Implement -Wshadow. Based on a patch by Mike M.!
llvm-svn: 98684
2010-03-16 21:48:18 +00:00
Douglas Gregor a71b9d0678 Update get*LineNumber() and get*ColumnNumber() functions to pass the
Invalid bit through; there are no safety-critical callers of these
functions.

llvm-svn: 98674
2010-03-16 20:53:17 +00:00
Douglas Gregor 42fe858cd6 Audit all callers of SourceManager::getCharacterData(); update some of
them to recover more gracefully on failure.

llvm-svn: 98672
2010-03-16 20:46:42 +00:00
Douglas Gregor 4fb7fbef3b Audit all getBuffer() callers (for both the FullSourceLoc and
SourceManager versions), updating those callers that need to recover
gracefully from failure.

llvm-svn: 98665
2010-03-16 20:01:30 +00:00
Daniel Dunbar 35621a9dcc Driver: Fix forwarding of -fno-lax-vector-conversions.
llvm-svn: 98639
2010-03-16 16:57:46 +00:00
Douglas Gregor 5712ebced0 Fix header-search problems with precompiled headers, where the
presence or absence of header map arguments when using the precompiled
header would cause Clang to get confused about which headers had
already been included/imported, along with their controlling
macros. The fundamental problem is that the serialization of the
header search information was relying on the UIDs of FileEntry objects
at PCH generation time and PCH load time to be equivalent, which
effectively means that we had to probe the same files in the same
order. Differing header map arguments caused an extra FileEntry
lookup, but it's easy to imagine other minor command-line arguments
triggering this problem.

Header-search information is now encoded along with the
source-location entry for a file, so that we register information
about a file's properties as a header at the same time we create the
FileEntry for that file.

Fixes <rdar://problem/7743243>.

llvm-svn: 98636
2010-03-16 16:35:32 +00:00
Benjamin Kramer 0ca3c62078 Switch another function to StringRef instead of char pointer pairs.
llvm-svn: 98631
2010-03-16 14:48:07 +00:00
Benjamin Kramer eb92dc0b09 Let SourceManager::getBufferData return StringRef instead of a pair of two const char*.
llvm-svn: 98630
2010-03-16 14:14:31 +00:00
Zhongxing Xu 0eb690390d Add VisitCXXContructExpr logic to the analyzer. This still has not fully worked
since RemoveDeadBinding mistakenly remove the binding to CXXThisRegion. 

llvm-svn: 98629
2010-03-16 13:14:16 +00:00
John McCall ab8c273b4f Access control for implicit calls to copy assignment operators and copy
constructors from implicitly-defined members.

llvm-svn: 98614
2010-03-16 06:11:48 +00:00
Douglas Gregor 00a0cf70d9 Don't consume tokens past the end-of-file in an @interface. Fixes
<rdar://problem/7735566>.

llvm-svn: 98613
2010-03-16 06:04:47 +00:00
John McCall 1064d7ef29 Perform access control for the implicit base and member destructor calls
required when emitting a destructor definition.

llvm-svn: 98609
2010-03-16 05:22:47 +00:00
Douglas Gregor 7bda4b8310 Introduce optional "Invalid" parameters to routines that invoke the
SourceManager's getBuffer() and, therefore, could fail, along with
Preprocessor::getSpelling(). Use the Invalid parameters in the literal
parsers (string, floating point, integral, character) to make them
robust against errors that stem from, e.g., PCH files that are not
consistent with the underlying file system.

I still need to audit every use caller to all of these routines, to
determine which ones need specific handling of error conditions.

llvm-svn: 98608
2010-03-16 05:20:39 +00:00
Douglas Gregor 874cc62876 Use SourceManager's Diagnostic object for all file-reading errors,
simplifying the SourceManager interfaces somewhat.

llvm-svn: 98598
2010-03-16 00:35:39 +00:00
Douglas Gregor e0fbb83b8b Give SourceManager a Diagnostic object with which to report errors,
and start simplifying the interfaces in SourceManager that can fail.

llvm-svn: 98594
2010-03-16 00:06:06 +00:00
Eric Christopher 8c6f61394f Add remaining sse4.1 intrinsics and builtins.
llvm-svn: 98587
2010-03-15 23:22:58 +00:00
Douglas Gregor 802b77601e Introduce a new BufferResult class to act as the return type of
SourceManager's getBuffer() (and similar) operations. This abstract
can be used to force callers to cope with errors in getBuffer(), such
as missing files and changed files. Fix a bunch of callers to use the
new interface.

Add some very basic checks for file consistency (file size,
modification time) into ContentCache::getBuffer(), although these
checks don't help much until we've updated the main callers (e.g.,
SourceManager::getSpelling()).

llvm-svn: 98585
2010-03-15 22:54:52 +00:00
Ted Kremenek d133a86aa3 Move method FindPropertyVisibleInPrimaryClass() from ObjCContainerDecl to ObjCInterfaceDecl.
Also change this method to lookup property declarations using DeclContext::lookup().

llvm-svn: 98574
2010-03-15 20:30:07 +00:00
Ted Kremenek ddcd1093a4 Change ObjCCategoryDecl::FindPropertyDeclaration() to lookup
property decls using DeclContext::lookup().

llvm-svn: 98571
2010-03-15 20:11:53 +00:00
Ted Kremenek 4fb821ec0d Make 'findPropertyDecl()' a static method of ObjCPropertyDecl.
llvm-svn: 98570
2010-03-15 20:11:46 +00:00
Ted Kremenek f3bc99dd56 Add comment to CFG to 'buildCFG()' arguments indicating that scope
support is not fully implemented.

llvm-svn: 98555
2010-03-15 17:45:13 +00:00
Ted Kremenek bc1a67bee3 Rename clang_constructUSR_ObjCategory to clang_constructUSR_ObjCCategory.
(there was a missing 'C').

llvm-svn: 98554
2010-03-15 17:38:58 +00:00
Kovarththanan Rajaratnam 94b9af889e Remove useless forward decl.
llvm-svn: 98553
2010-03-15 17:31:29 +00:00
Douglas Gregor ea16606fcd During C++ name lookup, use DeclContext::Equals() rather than
comparing DeclContext pointers, to avoid having to remember to call
getPrimaryContext() everywhere. This is the last part PR6594.

llvm-svn: 98546
2010-03-15 15:26:48 +00:00
John McCall c33dec3664 Add support for -Wwrite-strings. Patch by Mike M! Fixes PR 4804.
llvm-svn: 98541
2010-03-15 10:54:44 +00:00
John McCall 3e11ebebc8 Remember declaration scope qualifiers in the AST. Imposes no memory overhead
on unqualified declarations.

Patch by Enea Zaffanella!  Minimal adjustments:  allocate the ExtInfo nodes
with the ASTContext and delete them during Destroy().  I audited a bunch of
Destroy methods at the same time, to ensure that the correct teardown was
being done.

llvm-svn: 98540
2010-03-15 10:12:16 +00:00
John McCall 1e3a1a7eff Remember access paths for visible conversion decls.
llvm-svn: 98539
2010-03-15 09:07:48 +00:00
Rafael Espindola a530f9c03b Add missing space.
llvm-svn: 98448
2010-03-13 20:14:52 +00:00
Kovarththanan Rajaratnam ba2c65277a Use SmallString instead of SmallVector
llvm-svn: 98436
2010-03-13 10:17:05 +00:00
Ted Kremenek d071c6019a Implement several CIndex functions for constructing USRs from C-strings instead of AST elements.
llvm-svn: 98421
2010-03-13 02:50:34 +00:00
John McCall f3cd665d5a Remember whether a ParmVarDecl was spelled with a default argument or
whether it inherited one from a previous declaration.

Patch by Enea Zaffanella!

llvm-svn: 98362
2010-03-12 18:31:32 +00:00
Kovarththanan Rajaratnam 52ceee58d3 Make IdentifierTable::get(StringRef) "primary" (no functionality change)
llvm-svn: 98347
2010-03-12 12:01:19 +00:00
Kovarththanan Rajaratnam a3b09590e6 Add IdentifierTable::get() overload and start using it
llvm-svn: 98343
2010-03-12 10:32:27 +00:00
Kovarththanan Rajaratnam 47b55969c3 Cleanup using StringRef
llvm-svn: 98339
2010-03-12 09:33:31 +00:00
Kovarththanan Rajaratnam 661a309933 Switch over IdentifierInfoLookup to StringRef
llvm-svn: 98337
2010-03-12 08:23:34 +00:00
John McCall b8b94668b6 Extend the builtin syntax to allow address-space qualifiers on pointers and
references.  Based on a patch by Arnaud de Grandmaison!

llvm-svn: 98327
2010-03-12 04:21:28 +00:00
Eric Christopher 6932b2e8b7 Add SSE4 packed integer comparisons and corresponding intrinsics.
llvm-svn: 98323
2010-03-12 01:22:33 +00:00
John McCall 16927f6274 Implement basic support for friend types and functions in non-dependent
contexts.

llvm-svn: 98321
2010-03-12 01:19:31 +00:00
Ted Kremenek 86838aafee For ivars created using @synthesize, set their DeclContext to be
the @implementation (instead of the @interface) and actually add
the ivar to the DeclContext (which we weren't doing before).

This allows us to simplify ASTContext::CollectNonClassIvars() by
removing ASTContext::CollectProtocolSynthesizedIvars().  Now all
ivars can be found by either inspecting the ObjCInterfaceDecl and
its companion ObjCImplementationDecl.

llvm-svn: 98280
2010-03-11 19:44:54 +00:00
John McCall 71d8d9b468 Warn about comparing an unsigned expression with 0 in tautological ways.
Patch by mikem!

llvm-svn: 98279
2010-03-11 19:43:18 +00:00
John McCall e40b58ec2f Implement -Wmissing-field-initializers. Patch by mikem!
llvm-svn: 98275
2010-03-11 19:32:38 +00:00
Fariborz Jahanian 3a106e7029 Add tentative support for accessing local variables with
external linkage (static, extern, etc.) in blocks in
rewriter. wip.

llvm-svn: 98265
2010-03-11 18:20:03 +00:00
Daniel Dunbar 66187b3c6e Driver: Free Action objects.
llvm-svn: 98263
2010-03-11 18:04:58 +00:00
Daniel Dunbar 86d838970b Driver: Free synthesized derived arguments.
llvm-svn: 98262
2010-03-11 18:04:53 +00:00
Daniel Dunbar 66e2768918 Driver: Free jobs in JobList and PipedJob instances.
llvm-svn: 98261
2010-03-11 18:04:49 +00:00
John McCall bbbbe4eaaf Split C++ friend declarations into their own header/implementation file.
I'm expecting this portion of the AST to grow and change, and I'd like to
be able to do that with minimal recompilation.  If this proves unnecessary
when access control is fully-implemented, I'll fold the classes back into
DeclCXX.h.

llvm-svn: 98249
2010-03-11 07:50:04 +00:00
Anders Carlsson 6a84889d3f Replace the class offset vectors in RecordLayoutBuilder with maps instead so we'll have faster lookup and so we can detect duplicates.
llvm-svn: 98231
2010-03-11 04:10:39 +00:00
Ted Kremenek e0966be5ce Remove unused 'IVars' field from ObjCInterfaceDecl. That functionality
has migrated to DeclContext.

llvm-svn: 98213
2010-03-11 00:36:10 +00:00
John McCall 85f9055955 When pretty-printing tag types, only print the tag if we're in C (and
therefore not creating ElaboratedTypes, which are still pretty-printed
with the written tag).

Most of these testcase changes were done by script, so don't feel too
sorry for my fingers.

llvm-svn: 98149
2010-03-10 11:27:22 +00:00
John McCall 96f0b5f844 Allow the fast path through ASTContext::getTypeDeclType to be inlined.
llvm-svn: 98138
2010-03-10 06:48:02 +00:00
Zhongxing Xu 1bb6a1a593 Add use-after-free check to MallocChecker.
llvm-svn: 98136
2010-03-10 04:58:55 +00:00
John McCall e78aac41de Create a new InjectedClassNameType to represent bare-word references to the
injected class name of a class template or class template partial specialization.
This is a non-canonical type;  the canonical type is still a template 
specialization type.  This becomes the TypeForDecl of the pattern declaration,
which cleans up some amount of code (and complicates some other parts, but
whatever).

Fixes PR6326 and probably a few others, primarily by re-establishing a few
invariants about TypeLoc sizes.     

llvm-svn: 98134
2010-03-10 03:28:59 +00:00
John McCall 7242868e71 Value-initialize the written-builtin-specifiers field of DeclSpec, which
wasn't being initialized properly along the implicit-definition path.
Found by the valgrind buildbot.

llvm-svn: 98093
2010-03-09 22:39:49 +00:00
Ted Kremenek ff9021b675 Implement clang_isUnexposed(), a predicate function to simplify filtering out
unexposed AST elements.

llvm-svn: 97985
2010-03-08 21:17:29 +00:00
Ted Kremenek c3015a914f Allocate ASTRecordLayout objects using the allocator associated with ASTContext.
This allows them to be allocated using a BumpPtrAllocated
in the common case.

llvm-svn: 97978
2010-03-08 20:56:29 +00:00
John McCall 0fbf039db9 Rename -Wbad-literal to -Wliteral-range.
llvm-svn: 97968
2010-03-08 19:34:43 +00:00
Douglas Gregor 8a16769b61 Improve XML output for C++ classes, from Olaf Krzikalla!
llvm-svn: 97954
2010-03-08 18:51:03 +00:00
Douglas Gregor de4827dd34 Extend ObjCMessageExpr for class method sends with the source location
of the class name.

llvm-svn: 97943
2010-03-08 16:40:19 +00:00
Douglas Gregor 12852d9521 Keep track of type source information in the return type of an
Objective-C method declaration, e.g., for 

  - (Foo *)myMethod;

we now have TypeSourceInfo for the Foo*.

llvm-svn: 97942
2010-03-08 14:59:44 +00:00
Douglas Gregor 104ee00181 Downgrade errors when trying to catch a pointer or reference to
incomplete type to warnings; GCC (and EDG in GCC compatibility mode)
permit such handles. Fixes PR6527.

(For real this time)

llvm-svn: 97927
2010-03-08 01:47:36 +00:00
Chris Lattner 0a65574ccb implement support for -Wno-deprecated, PR6534. While
I'm in there, change the altivec diagnostics to use 'double' 
instead of "double" for consistency.

llvm-svn: 97919
2010-03-07 18:50:21 +00:00
Kovarththanan Rajaratnam 752a124aeb Rename to addPPCallbacks since we're effectively adding a callback and maybe chaining it to an existing one
llvm-svn: 97913
2010-03-07 07:30:06 +00:00
Eric Christopher 8fffe75eaa Add in movntdqa intrinsic for load hint.
llvm-svn: 97903
2010-03-07 06:28:34 +00:00
Eric Christopher 1d99699bda Add in dot product intrinsics for dpps and dppd.
llvm-svn: 97901
2010-03-07 06:16:56 +00:00
Tanya Lattner 5029d56cc1 Implement missing-braces warning and add a test case.
llvm-svn: 97893
2010-03-07 04:17:15 +00:00
Kovarththanan Rajaratnam 1c558cd773 Lowercase for consistency
llvm-svn: 97878
2010-03-06 12:07:48 +00:00
Eli Friedman 99d20f83ba PR6515: Implement __builtin_signbit and friends.
I'm reasonably sure my implementation is correct, but it would be nice if
someone could double-check.

llvm-svn: 97864
2010-03-06 02:17:52 +00:00
Fariborz Jahanian d2bccafe82 Patch to build qualifier on objective-c
pointer types. Fixes radar 7626768.

llvm-svn: 97847
2010-03-05 22:42:55 +00:00
Douglas Gregor 7829362620 The Windows build is just too weird; there's no real cost to doing the concurrency checks for ASTUnit in all builds
llvm-svn: 97840
2010-03-05 22:19:41 +00:00
Douglas Gregor 1e1973c0eb Switch from NDEBUG to _DEBUG, since our Windows build is funny
llvm-svn: 97835
2010-03-05 21:48:53 +00:00
Douglas Gregor 554e13efc6 Only make __ptr64 and __w64 keywords when Microsoft extensions are enabled.
llvm-svn: 97834
2010-03-05 21:39:18 +00:00
Douglas Gregor 0c7c2f8b4d A little hack to identify unwanted concurrency in CIndex
llvm-svn: 97831
2010-03-05 21:16:25 +00:00
Chris Lattner b2bc4b9880 Emit warning on indirect goto that potentially violates
scope instead of error, PR6517

llvm-svn: 97826
2010-03-05 20:38:02 +00:00
Chris Lattner 2df50e6573 address PR6502 by downgrading the scope checker's address
of label error to a warning controllable with a -W flag.

llvm-svn: 97815
2010-03-05 19:26:49 +00:00
Zhongxing Xu e73584384a Remove reference to AnalysisContext in Environment. We already have LocationContext
information in ExplodedNode.

llvm-svn: 97785
2010-03-05 04:45:36 +00:00
Douglas Gregor 90d4717767 When we invalidate a declaration, make it public, so that it doesn't
trigger access control or one of the many assertions we have for valid
access specifiers.

llvm-svn: 97767
2010-03-05 00:26:45 +00:00
Chris Lattner 09797543bd add TCE target support, patch by Pekka J!
llvm-svn: 97746
2010-03-04 21:07:38 +00:00
Zhongxing Xu 6f84d46f33 The FIXME is fixed.
llvm-svn: 97725
2010-03-04 09:05:58 +00:00
Zhongxing Xu 5cb8d9d40f When profiling Environment, also profile with AnalysisContext*, bacause
we now may have identical states with different analysis context.

Set the right AnalysisContext in state when entering and leaving a callee.

With both of the above changes, we can pass the test case.

llvm-svn: 97724
2010-03-04 09:04:52 +00:00
John McCall 731be6620c Revert changes r97693, r97700, and r97718.
Our testing framework can't deal with disabled targets yet.

llvm-svn: 97719
2010-03-04 04:29:44 +00:00
Eric Christopher 399ffa55d2 Add in -msse4.1 and -msse4.2 options and continuing a rather
hacky solution for translating.  Expanded on comment explaining
the hack a bit.

llvm-svn: 97714
2010-03-04 02:26:37 +00:00
Eric Christopher 45fa7e60fb Fix __builtin_ia32_roundss and __builtin_ia32_roundsd definitions.
Re-enable test.

llvm-svn: 97707
2010-03-04 01:34:19 +00:00
John McCall 6abe39c61e Create a TargetMachine whenever we create a CodeGenAction. The codegen of
some builtins will rely on target knowledge.

llvm-svn: 97693
2010-03-04 00:23:29 +00:00
Chris Lattner 5cc15e058b add framework for ARM builtins, Patch by Edmund Grimley Evans!
llvm-svn: 97656
2010-03-03 19:03:45 +00:00
Ted Kremenek fb4961dfd0 Add clang_getCursorLinkage(), which returns the
underlying linkage for the entity referred to by a
CXCursor.

llvm-svn: 97646
2010-03-03 06:36:57 +00:00
Douglas Gregor 3e637467d7 Implement name hiding for names found through virtual base subobjects
that are hidden by other derived base subobjects reached along a
lookup path that does *not* pass through the hiding subobject (C++
[class.member.lookup]p6). Fixes PR6462.

llvm-svn: 97640
2010-03-03 04:38:46 +00:00
Douglas Gregor 0555f7eefa Refactor CXXRecordDecl::lookupInBases() to push the recursion down a
level. No functionality change, and it obeys access control this
time.

llvm-svn: 97634
2010-03-03 02:18:00 +00:00
Douglas Gregor aa5087f6e5 Initialize your storage, dummy
llvm-svn: 97615
2010-03-03 00:29:43 +00:00
Douglas Gregor 832940b321 Eliminate the static map of overridden C++ methods, which was going to
come back to bite us at some point. 

llvm-svn: 97607
2010-03-02 23:58:15 +00:00
Douglas Gregor 5f6bea713b Bump the default maximum template-instantiation depth to 500, as in
GCC. Fixes PR6301.

llvm-svn: 97579
2010-03-02 19:14:36 +00:00
Douglas Gregor dc70c3abc0 Diagnose the declaration of enum templates. Also, be a bit more
careful about value-dependent enumerators. Fixes PR5786.

llvm-svn: 97570
2010-03-02 17:53:14 +00:00
Kovarththanan Rajaratnam daca645655 Move Emit24 to clang::io
llvm-svn: 97569
2010-03-02 17:41:26 +00:00
John McCall b6cc2c0439 Inspired by seeing "MIPS" go by in the commits, I've gone ahead and
implemented a (codegen) target hook for __builtin_extend_pointer.
I'm also making it return a uint64_t instead of an unsigned word;  this
comports with typical usage (i.e. the one use I know of).

I don't know if any of the existing targets requires this hook to be
set (other than x86 and x86_64, which I know do not).

llvm-svn: 97547
2010-03-02 03:50:12 +00:00
John McCall 4b613fae35 After much consultation aimed at figuring out what this builtin actually
does, document the results and then implement __builtin_extend_pointer for
platforms where it's a no-op.

llvm-svn: 97540
2010-03-02 02:31:24 +00:00
John McCall bd8d9bd39c Split out types that are non-canonical unless dependent as their own
category.  Use this in a few places to eliminate unnecessary TST cases and
do some future-proofing.  Provide terrible manglings for typeof.  Mangle
decltype with some hope of accuracy.

Our manglings for some of the cases covered in the testcase are different
from gcc's, which I've raised as an issue with the ABI list.

llvm-svn: 97523
2010-03-01 23:49:17 +00:00
Douglas Gregor ea99b5d736 Unbreak the build
llvm-svn: 97519
2010-03-01 23:31:19 +00:00
Douglas Gregor 9a28e84b32 Keep an explicit stack of function and block scopes, each element of
which has the label map, switch statement stack, etc. Previously, we
had a single set of maps in Sema (for the function) along with a stack
of block scopes. However, this lead to funky behavior with nested
functions, e.g., in the member functions of local classes.

The explicit-stack approach is far cleaner, and we retain a 1-element
cache so that we're not malloc/free'ing every time we enter a
function. Fixes PR6382.

Also, tweaked the unused-variable warning suppression logic to look at
errors within a given Scope rather than within a given function. The
prior code wasn't looking at the right number-of-errors count when
dealing with blocks, since the block's count would be deallocated
before we got to ActOnPopScope. This approach works with nested
blocks/functions, and gives tighter error recovery.

llvm-svn: 97518
2010-03-01 23:15:13 +00:00
Chris Lattner 30d0cfda35 Implement jump checking for initialized c++ variables, implementing
a fixme and PR6451.

Only perform jump checking if the containing function has no errors,
and add the infrastructure needed to do this.

On the testcase in the PR, we produce:

t.cc:6:3: error: illegal goto into protected scope
  goto later;
  ^
t.cc:7:5: note: jump bypasses variable initialization
  X x;
    ^

llvm-svn: 97497
2010-03-01 20:59:53 +00:00
Douglas Gregor 604c30299d Robustify instantiation of templates when there are errors in the
template definition. Do this both by being more tolerant of errors in
our asserts and by not dropping a variable declaration completely when
its initializer is ill-formed. Fixes the crash-on-invalid in PR6375,
but not the original issue.

llvm-svn: 97463
2010-03-01 18:27:54 +00:00
Douglas Gregor a04f2ca19a When looking for the instantiated declaration that corresponds to a
given declaration in a template, make sure that the context we're
searching through is complete. Fixes PR6376.

llvm-svn: 97444
2010-03-01 15:56:25 +00:00
Zhongxing Xu 6d3cc382df Since now we store the cast type with an ElementRegion, there is
no need to store a type with SymbolRegionValue.

llvm-svn: 97437
2010-03-01 06:56:52 +00:00
Zhongxing Xu aba9436f85 Add comments.
llvm-svn: 97435
2010-03-01 03:48:10 +00:00
Chandler Carruth b30f39a4ae Pass '-no-canonical-prefixes' on down to GCC. It's not specific to the Clang
driver and was in fact based on a feature in GCC. =]

llvm-svn: 97424
2010-02-28 22:33:07 +00:00
Chris Lattner 73a9c7d891 pull some altivec stuff out of line.
llvm-svn: 97405
2010-02-28 18:33:55 +00:00
Douglas Gregor e489a7d3d3 Warn about the deprecated string literal -> char* conversion. Fixes PR6428.
llvm-svn: 97404
2010-02-28 18:30:25 +00:00
Chris Lattner fd48afe412 Implement PR6423 by using one token of lookahead to disambiguate
an *almost* always incorrect case.  This only does the lookahead
in the insanely unlikely case, so it shouldn't impact performance.

On this testcase:

struct foo {
}
typedef int x;

Before:

t.c:3:9: error: cannot combine with previous 'struct' declaration specifier
typedef int x;
        ^

After:

t.c:2:2: error: expected ';' after struct
}
 ^
 ;

llvm-svn: 97403
2010-02-28 18:18:36 +00:00
Benjamin Kramer a197fb6731 Move method out-of-line. I thought this would be a candidate for inlining but I was wrong.
llvm-svn: 97330
2010-02-27 17:05:45 +00:00
Benjamin Kramer c5c65d2993 Fix thinko.
llvm-svn: 97323
2010-02-27 14:15:42 +00:00
Benjamin Kramer 0a1abd4088 Add an overload of Preprocessor::getSpelling which takes a SmallVector and
returns a StringRef. Use it to simplify some repetitive code.

llvm-svn: 97322
2010-02-27 13:44:12 +00:00
Ted Kremenek af11dcf348 Add reference to positional arguments documentation.
llvm-svn: 97298
2010-02-27 01:46:29 +00:00
Ted Kremenek d166819c26 For printf format string checking, add support for positional format strings.
Along the way, coelesce some of the diagnostics.

llvm-svn: 97297
2010-02-27 01:41:03 +00:00
Douglas Gregor 89a56c561f When given unsaved files in clang_createTranslationUnitFromSourceFile,
copy the source buffers provided rather than referencing them
directly, so that the caller can free those buffers immediately after
calling clang_createTranslationUnitFromSourceFile(). Otherwise, we
risk hitting those buffers later (when building source ranges, forming
diagnostics, etc.). 

llvm-svn: 97296
2010-02-27 01:32:48 +00:00
John McCall 013b006557 Put BadLiteral in the NonGCC group. I'd completely forgotten about this.
llvm-svn: 97286
2010-02-26 23:48:57 +00:00
John McCall 62abc944d6 At sabre's request, drop the FP bounds diagnostics down to warnings and file
them under -Wbad-literal.  They're still on by default.

llvm-svn: 97284
2010-02-26 23:35:57 +00:00
Ted Kremenek 4a49d9818b For printf format string checking, move the tracking of the data argument index out of
Sema and into analyze_printf::ParseFormatString().  Also use a bitvector to determine
what arguments have been covered (instead of just checking to see if the last argument consumed is the max argument).  This is prep. for support positional arguments (an IEEE extension).

llvm-svn: 97248
2010-02-26 19:18:41 +00:00
Chandler Carruth e750212f8c Make the destructor public. ddunbar, lemme know if you'd prefer a different
fix, just trying to get the build bots happy again.

llvm-svn: 97223
2010-02-26 08:51:12 +00:00
Zhongxing Xu ea5297baa0 Make GDM private.
llvm-svn: 97222
2010-02-26 08:46:13 +00:00
John McCall 1f476a1783 Fix an assertion-on-error during tentative constructor parsing by
propagating error conditions out of the various annotate-me-a-snowflake
routines.  Generally (but not universally) removes redundant diagnostics
as well as, you know, not crashing on bad code.  On the other hand,
I have just signed myself up to fix fiddly parser errors for the next
week.  Again.

llvm-svn: 97221
2010-02-26 08:45:28 +00:00
Douglas Gregor 6642ca217e Implement semantic analysis for C++ [expr.new]p18-20, which describe
how we find the operator delete that matches withe operator new we
found in a C++ new-expression.

This will also need CodeGen support. On a happy note, we're now a
"nans" away from building tramp3d-v4.

llvm-svn: 97209
2010-02-26 05:06:18 +00:00
Zhongxing Xu d041bc6ff4 Remove derelict GRStmtNodeBuilder::LastNode.
llvm-svn: 97207
2010-02-26 02:38:09 +00:00
John McCall 2da83a3a38 Use the power of types to track down another canonicalization bug in
the ABI-computation interface.  Fixes <rdar://problem/7691046>.

llvm-svn: 97197
2010-02-26 00:48:12 +00:00
Douglas Gregor 6f5f642ca2 When computing the composite pointer type for relational comparisons,
equality comparisons, and conditional operators, produce a composite
pointer type with the appropriate additional "const" qualifiers if the
pointer types would otherwise be incompatible. This is a small
extension (also present in GCC and EDG in a slightly different form)
that permits code like:

  void** i; void const** j; 
  i == j; 

with the following extwarn:

t.cpp:5:5: warning: comparison of distinct pointer types ('void **' and
      'void const **') uses non-standard composite pointer type
      'void const *const *' [-pedantic]
  i == j; 
  ~ ^  ~

Fixes PR6346, and I'll be filing a core issue about this with the C++
committee.

llvm-svn: 97177
2010-02-25 22:29:57 +00:00
Daniel Dunbar e8ecf9a0db Move ~CodeGenAction out-of-line.
llvm-svn: 97166
2010-02-25 20:37:44 +00:00
Douglas Gregor a2fbc94458 Restore Zhongxing's commits r97122 r97127 r97129 r97131 which were reverted due to a Clang-on-Clang failure
llvm-svn: 97162
2010-02-25 19:01:53 +00:00
Jakob Stoklund Olesen 5a8f9acaa8 Revert patches r97122 r97127 r97129 r97131.
They were breaking clang-x86_64-darwin10-selfhost

llvm-svn: 97138
2010-02-25 15:47:53 +00:00
Zhongxing Xu 9516feac36 Move the dead bindings removal logic from CallInliner to GRExprEngine::ProcessCallExit().
llvm-svn: 97129
2010-02-25 07:36:34 +00:00