Commit Graph

3652 Commits

Author SHA1 Message Date
Douglas Gregor ccb0776288 Finished semantic analysis of non-type template arguments, to check
for non-external names whose address becomes the template
argument. This completes C++ [temp.arg.nontype]p1.

Note that our interpretation of C++ [temp.arg.nontype]p1b3 differs
from EDG's interpretation (we're stricter, and GCC agrees with
us). They're opening a core issue about the matter.

llvm-svn: 64317
2009-02-11 19:52:55 +00:00
Mike Stump 761b90b825 Avoid bogus warning.
llvm-svn: 64313
2009-02-11 18:58:46 +00:00
Douglas Gregor 1515f76a5a Reverted r64307. Moved hasSameType and hasSameUnqualifiedType from
Sema to ASTContext.

llvm-svn: 64312
2009-02-11 18:22:40 +00:00
Douglas Gregor f8f868336e Allow the use of default template arguments when forming a class
template specialization (e.g., std::vector<int> would now be
well-formed, since it relies on a default argument for the Allocator
template parameter). 

This is much less interesting than one might expect, since (1) we're
not actually using the default arguments for anything important, such
as naming an actual Decl, and (2) we'll often need to instantiate the
default arguments to check their well-formedness. The real fun will
come later.

llvm-svn: 64310
2009-02-11 18:16:40 +00:00
Steve Naroff d5581d2af1 Fix <rdar://problem/6206858> [sema] type check @throw statements.
Added a FIXME to handle 'rethrow' check.

llvm-svn: 64308
2009-02-11 17:45:08 +00:00
Douglas Gregor 0ada9f5d46 Rename Sema::hasSameType to QualType::isSameAs
Rename Sema::hasSameUnqualifiedType to QualType::isSameIgnoringQalifiers

llvm-svn: 64307
2009-02-11 16:47:37 +00:00
Douglas Gregor 6ec47f0d59 Silence a warning about an unused variable in -Asserts builds
llvm-svn: 64306
2009-02-11 16:17:49 +00:00
Douglas Gregor 0e55853639 Implement semantic checking for template arguments that correspond to
pointer-to-member-data non-type template parameters. Also, get
consistent about what it means to returned a bool from
CheckTemplateArgument.

llvm-svn: 64305
2009-02-11 16:16:59 +00:00
Ted Kremenek 8527e3a727 PTH: Don't emit the PTH offset of the IdentifierInfo string data as that data is
referenced by other tables.

llvm-svn: 64304
2009-02-11 16:06:55 +00:00
Chris Lattner 746b21361f Fix rdar://6518463, increment of a bool is always true, due to
subtle and non-obvious promotion rules.  We already handle += 
and +1 correctly.

llvm-svn: 64296
2009-02-11 07:40:06 +00:00
Chris Lattner 60dcdc7062 finish off codegen support for sub of pointer to functions,
finishing off rdar://6520707

llvm-svn: 64295
2009-02-11 07:21:43 +00:00
Ted Kremenek bdc2c0c990 Per PR 3187, disable the missing -dealloc check for classes that subclass SenTestCase.
llvm-svn: 64292
2009-02-11 07:10:07 +00:00
Anders Carlsson d0d8c540ca Add pmmintrin.h header.
llvm-svn: 64291
2009-02-11 06:39:50 +00:00
Anders Carlsson 5bc94e625b Fix some mistakes I made when I tried to decipher the Intel documentation of the MXCSR register
llvm-svn: 64290
2009-02-11 06:29:32 +00:00
Douglas Gregor 483e510a83 CHAR_BIT == 8
llvm-svn: 64286
2009-02-11 04:02:22 +00:00
Douglas Gregor 6f233ef1d8 Add semantic checking for template arguments that correspond to
non-type template parameters that are references to functions or
pointers to member functions. Did a little bit of refactoring so that
these two cases, along with the handling of non-type template
parameters that are pointers to functions, are handled by the same
path. 

Also, tweaked FixOverloadedFunctionReference to cope with member
function pointers. This is a necessary step for getting all of the fun
member pointer conversions working outside of template arguments, too.

llvm-svn: 64277
2009-02-11 01:18:59 +00:00
Douglas Gregor a9faa44162 Semantic checking for template arguments that correspond to non-type
template parameters that have reference type. Effectively, we're doing
a very limited form of reference binding here.

llvm-svn: 64270
2009-02-11 00:44:29 +00:00
Douglas Gregor 3a7796bccc Add partial semantic checking of template arguments that are meant for
non-type template parameters of pointer-to-object and
pointer-to-function type. The most fun part of this is the use of
overload resolution to pick a function from the set of overloaded
functions that comes in as a template argument.

Also, fixed two minor bugs in this area:
  - We were allowing non-type template parameters of type pointer to
  void.
  - We weren't patching up an expression that refers to an overloaded
  function set via "&f" properly.

We're still not performing complete checking of the expression to be
sure that it is referring to an object or function with external
linkage (C++ [temp.arg.nontype]p1).

llvm-svn: 64266
2009-02-11 00:19:33 +00:00
Ted Kremenek a3d9025dd3 BugReporter: Use llvm::raw_string_stream instead of std::ostringstream.
llvm-svn: 64259
2009-02-10 23:56:07 +00:00
Mike Stump 6abe6923e5 Add private extern to pretty printer(s).
llvm-svn: 64258
2009-02-10 23:49:50 +00:00
Douglas Gregor 86560404fc Add type-checking and implicit conversions for template parameters of
integral or enumeration type.

llvm-svn: 64256
2009-02-10 23:36:10 +00:00
Anders Carlsson 7ccf3e4e28 Handle the case where EmitBlock might be called multiple times for the same block. Fixes PR3536.
llvm-svn: 64252
2009-02-10 22:50:24 +00:00
Fariborz Jahanian d7264430e6 This patch is all it takes to pass all objc2's fast-enumeration
tests in the dejagnu test suite in the nonfragile abi mode.

llvm-svn: 64251
2009-02-10 22:46:12 +00:00
Ted Kremenek 86423a9993 PTH: Replace ad hoc 'file name' -> 'PTH data' lookup table in the PTH file with an on-disk chained hash table. This data structure is implemented using templates, and will be used to replace similar data structures. This change leads to no visibile performance impact on Cocoa.h, but now we only pay a price for the table on order with the number of files accessed and not the number in the PTH file.
llvm-svn: 64245
2009-02-10 22:16:22 +00:00
Douglas Gregor 09cfcff492 GNU allows structs with flexible array members to be placed inside
arrays and other structs/unions as an extension. Downgrade our error
to a warning. Fixes PR3540.

llvm-svn: 64239
2009-02-10 21:49:46 +00:00
Daniel Dunbar e46506eaea Pull CodeGenFunction::EmitVAArg into target specific ABIInfo classes.
- Missed this file.

llvm-svn: 64238
2009-02-10 21:44:36 +00:00
Daniel Dunbar 2d0746fb97 Pull CodeGenFunction::EmitVAArg into target specific ABIInfo classes.
llvm-svn: 64235
2009-02-10 20:44:09 +00:00
Fariborz Jahanian 4e7ae06b00 Generate ir for ivar offset. This will pass
type-nsobject-attribute.m in the dejagnu test suite
in the nonfragile abi mode.

llvm-svn: 64233
2009-02-10 20:21:06 +00:00
Mike Stump 74a7647973 Fixup -ast-print so that:
We handle indentation of decls better.
  We Indent extern "C" { } stuff better.
  We print out structure contents more often.
  We handle pass indentation information into the statement printer, so that
  nested things come out more indented.
  We print out FieldDecls.
  We print out Vars.
  We print out namespaces.
  We indent functions better.

llvm-svn: 64232
2009-02-10 20:16:46 +00:00
Mike Stump 1d05068395 Refactor FieldDecls to be ValueDecls instead of NamedDecls.
llvm-svn: 64231
2009-02-10 20:06:48 +00:00
Douglas Gregor 85e8b3eeed Fix a problem with bogus template shadowing warnings
llvm-svn: 64230
2009-02-10 19:52:54 +00:00
Douglas Gregor dba326363c Implement parsing, semantic analysis and ASTs for default template
arguments. This commit covers checking and merging default template
arguments from previous declarations, but it does not cover the actual
use of default template arguments when naming class template
specializations.

llvm-svn: 64229
2009-02-10 19:49:53 +00:00
Fariborz Jahanian 21fc74c15a Some refactoring of Ivar offset code gen.
in preparation for nonfragile ivar offset work.

llvm-svn: 64225
2009-02-10 19:02:04 +00:00
Douglas Gregor 8133879c5e Semantic analysis for non-type template parameter declarations.
llvm-svn: 64223
2009-02-10 17:43:50 +00:00
Daniel Dunbar 9403cd6d85 Tweak x86-64 ABI to allow reuse for vararg handling.
llvm-svn: 64221
2009-02-10 17:06:09 +00:00
Anders Carlsson 7325b61e74 Fix an #ifndef that should be an #ifdef instead.
llvm-svn: 64206
2009-02-10 06:18:19 +00:00
Anders Carlsson 33c1b6528f Remove the last remnants of the Obj-C EH stack code.
llvm-svn: 64205
2009-02-10 06:07:49 +00:00
Anders Carlsson 33747b6c41 Start removing the old Obj-C EH stack now that the cleanup stack is used instead.
llvm-svn: 64203
2009-02-10 05:52:02 +00:00
Ted Kremenek a84522088f Fix a crash in GRSimpleVals::EvalCast due not handling transparent unions.
llvm-svn: 64200
2009-02-10 05:42:58 +00:00
Sanjiv Gupta e99ad00fd2 Function parameters for PIC16 are like local variables. So use the keyword ".auto." to mangle their names. The working of PIC16AsmPrinter relies on that keyword currently.
llvm-svn: 64198
2009-02-10 04:17:25 +00:00
Daniel Dunbar 0007961241 Support va_arg on _Complex.
gcc compat test suite results (Darwin x86-32 & -64):
--
# of expected passes		1110
# of unexpected failures	74
# of unresolved testcases	168
# of unsupported tests		2

llvm-svn: 64197
2009-02-10 03:03:30 +00:00
Daniel Dunbar 9bfb4de38b ABI: Correctly handle load/store of values which have a different LLVM
memory representation (e.g., bool).
 - This upgrades (downgrades) MultiSource/Applications/ClamAV/clamscan
   to a miscompile and fixes
   SingleSource/UnitTests/2003-05-31-CastToBool.

llvm-svn: 64194
2009-02-10 01:51:39 +00:00
Daniel Dunbar 1d425460d5 Add util Emit{LoadOf,StoreTo}Scalar methods to encapsulate conversion
from LLVM memory type to/from LLVM temporary type.
 - No intended functionality change.

llvm-svn: 64191
2009-02-10 00:57:50 +00:00
Douglas Gregor 97f34576d4 Teach the type-id/expression disambiguator about different
disambiguation contexts, so that we properly parse template arguments
such as

  A<int()>

as type-ids rather than as expressions. Since this can be confusing
(especially when the template parameter is a non-type template
parameter), we try to give a friendly error message.

Almost, eliminate a redundant error message (that should have been a
note) and add some ultra-basic checks for non-type template
arguments.

llvm-svn: 64189
2009-02-10 00:53:15 +00:00
Douglas Gregor 85e0f66250 Check template template arguments against their corresponding template
template parameters.

llvm-svn: 64188
2009-02-10 00:24:35 +00:00
Daniel Dunbar d5f1f55e28 Make sure to initialize local variables, even if they were ignored by
ABI.

llvm-svn: 64187
2009-02-10 00:06:49 +00:00
Douglas Gregor d32e028f79 Rudimentary checking of template arguments against their corresponding
template parameters when performing semantic analysis of a template-id
naming a class template specialization.

llvm-svn: 64185
2009-02-09 23:23:08 +00:00
Anders Carlsson ac0d7bd709 id<Foo> is a POD type.
llvm-svn: 64175
2009-02-09 21:53:01 +00:00
Douglas Gregor 0db4ccd7fb Implement Sebastian's idea for simplifying our handling of the greater-than operator/delimiter. Also, clean up after ourselves following a failed parse of a template-argument-list
llvm-svn: 64166
2009-02-09 21:04:56 +00:00
Ted Kremenek d7b4f40b18 CallExpr now uses ASTContext's allocate to allocate/delete its array of subexpressions.
llvm-svn: 64162
2009-02-09 20:51:47 +00:00
Anders Carlsson 15949b3a32 Use the new cleanup infrastructure for VLAs. The next iteration of patches will remove the old Obj-C EH cleanup code.
llvm-svn: 64161
2009-02-09 20:41:50 +00:00
Anders Carlsson bfee7e921b Use the new cleanup infrastructure for @try/@finally
llvm-svn: 64160
2009-02-09 20:38:58 +00:00
Anders Carlsson 1ac6282c5b Replace a bunch of EmitBranch calls with EmitBranchThroughCleanup. No functionality change (yet).
llvm-svn: 64159
2009-02-09 20:31:03 +00:00
Anders Carlsson ff0bb6ce62 Save and restore the DidCallStackSave variable
llvm-svn: 64157
2009-02-09 20:23:40 +00:00
Anders Carlsson f4478e94b8 Add DidCallStackSave variable to CodeGenFunction.
llvm-svn: 64156
2009-02-09 20:20:56 +00:00
Douglas Gregor aef040a28e When handling "the rest" of a designated array subobject, maybe sure
to tell it that it wasn't (directly) designated. This way, we unwind
back to the explicit initializer list properly rather than getting
stuck in the wrong subobject. Fixes llvm.org/PR3519

llvm-svn: 64155
2009-02-09 19:45:19 +00:00
Douglas Gregor 67b556a0da Eliminate TemplateArg so that we only have a single kind of
representation for template arguments. Also simplifies the interface
for ActOnClassTemplateSpecialization and eliminates some annoying
allocations of TemplateArgs.

My attempt at smart pointers for template arguments lists is
relatively lame. We can improve it once we're sure that we have the
right representation for template arguments.

llvm-svn: 64154
2009-02-09 19:34:22 +00:00
Douglas Gregor 8bf4205c70 Start processing template-ids as types when the template-name refers
to a class template. For example, the template-id 'vector<int>' now
has a nice, sugary type in the type system. What we can do now:

  - Parse template-ids like 'vector<int>' (where 'vector' names a
    class template) and form proper types for them in the type system.
  - Parse icky template-ids like 'A<5>' and 'A<(5 > 0)>' properly,
    using (sadly) a bool in the parser to tell it whether '>' should
    be treated as an operator or not.

This is a baby-step, with major problems and limitations:
  - There are currently two ways that we handle template arguments
  (whether they are types or expressions). These will be merged, and,
  most likely, TemplateArg will disappear.
  - We don't have any notion of the declaration of class template
  specializations or of template instantiations, so all template-ids
  are fancy names for 'int' :)

llvm-svn: 64153
2009-02-09 18:46:07 +00:00
Sebastian Redl 1df2bbe7f9 Update new expression to make use of Declarator::getSourceRange().
References are not objects; implement this in Type::isObjectType().

llvm-svn: 64152
2009-02-09 18:24:27 +00:00
Sebastian Redl f6591ca6d9 Implement Declarator::getSourceRange().
llvm-svn: 64151
2009-02-09 18:23:29 +00:00
Ted Kremenek 0203db73ee Fix PR 2514: Do not flag dead initializations for variables initialized to a constant global variable.
llvm-svn: 64149
2009-02-09 18:01:00 +00:00
Ted Kremenek e2559b22d0 Deallocate the StringLiteral itself in StringLiteral::Destroy() and deallocate the string data before running StringLiteral's destructor.
llvm-svn: 64146
2009-02-09 17:10:09 +00:00
Ted Kremenek 5b0d90fa79 Allocate the subexpression array for OberloadExpr from ASTContext's allocator.
llvm-svn: 64145
2009-02-09 17:08:14 +00:00
Douglas Gregor 9817f4a717 Make Sema::getTypeName return the opaque pointer of a QualType rather
than a Decl, which gives us some more flexibility to express the
results with the type system. There are no clients using this
flexibility yet, but it's meant to be able to describe qualified names
as written in the source (e.g., "foo::type") or template-ids that name
a class template specialization (e.g., "std::vector<INT>").

DeclSpec's TST_typedef has become TST_typename, to reflect its use to
describe types found by name (that may or may not be typedefs). The
type representation of a DeclSpec with TST_typename is an opaque
QualType pointer. All users of TST_typedef, both direct and indirect,
have been updated for these changes.

llvm-svn: 64141
2009-02-09 15:09:02 +00:00
Mike Stump fc49682f20 Add some more documentation. Also reflowed comments to 80 col.
llvm-svn: 64105
2009-02-08 23:14:22 +00:00
Anders Carlsson 9c964ac272 Reuse case destinations.
llvm-svn: 64100
2009-02-08 22:46:50 +00:00
Anders Carlsson f57b9eef62 Always check if we can remove branch fixups, even if the cleanup stack is empty.
llvm-svn: 64099
2009-02-08 22:45:15 +00:00
Anders Carlsson dcb149cbef Add a simplified EmitJumpThroughFinally and use it in CGObjC in preparation of making it use the cleanup stack.
llvm-svn: 64098
2009-02-08 22:25:30 +00:00
Anders Carlsson 76180ea456 Misc fixes to the cleanup stack code.
llvm-svn: 64096
2009-02-08 22:13:37 +00:00
Mike Stump a6dbd7b25a When we're at the stack depth we want, there isn't anything to do.
llvm-svn: 64095
2009-02-08 22:00:53 +00:00
Sebastian Redl c9ab3d430b Teach the constant evaluator about C++ const integral variables.
llvm-svn: 64086
2009-02-08 15:51:17 +00:00
Sebastian Redl df0913ba70 Fix redundant errors with missing default arguments in member declarations.
llvm-svn: 64085
2009-02-08 14:56:26 +00:00
Sebastian Redl 95ea38fa1a Fix redundant errors for redefinitions with multiple existing definitions.
llvm-svn: 64081
2009-02-08 10:49:44 +00:00
Mike Stump 284d177c7f Wire up break and continue processing to the new stack depth adjuster.
If people could beat on it and let me know if there are any new
semantics required by newer language standards or DRs or any little
details I goofed on, I'd be happy to fix any issues found.

llvm-svn: 64079
2009-02-08 09:22:19 +00:00
Anders Carlsson 66c384ac2e More cleanup stack work, PopCleanupBlock now returns a struct with the switch block and end block.
llvm-svn: 64072
2009-02-08 07:46:24 +00:00
Anders Carlsson ae91d9b140 Split some functions up
llvm-svn: 64069
2009-02-08 03:55:35 +00:00
Anders Carlsson a586ad7f85 CleanupScope needs to push the cleanup block in its destructor
llvm-svn: 64068
2009-02-08 03:22:36 +00:00
Anders Carlsson 3c21dd5a80 Implement support for branch fixups.
llvm-svn: 64064
2009-02-08 01:23:05 +00:00
Chris Lattner 24c911e25a use some references to simplify code.
llvm-svn: 64063
2009-02-08 01:00:10 +00:00
Chris Lattner bf20a9a57d Genericize the existing logic for removing duplicate header dirs to apply
the "system dirs win over user dirs" logic to framework and headermap
search locations as well as normal directories.  This means that
clang t.m -F/System/Library/Frameworks  will treat /System/Library/Frameworks
as a system directory not a user directory.  If you use -v, the difference is:

Before:
ignoring nonexistent directory "/usr/libdata/gcc41"
ignoring duplicate framework "/System/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:

After:
ignoring nonexistent directory "/usr/libdata/gcc41"
ignoring duplicate directory "/System/Library/Frameworks"
  as it is a non-system directory that duplicates a system directory
#include "..." search starts here:
#include <...> search starts here:

This fixes rdar://6566429.

llvm-svn: 64060
2009-02-08 00:55:22 +00:00
Anders Carlsson 7d70fd27a4 More cleanup stack work.
llvm-svn: 64059
2009-02-08 00:50:42 +00:00
Anders Carlsson fbfb5e6530 When emitting blocks, keep track of which cleanup scope they have. Minor fixes and cleanup.
llvm-svn: 64053
2009-02-08 00:16:35 +00:00
Anders Carlsson cadb9a6a34 Emit a cleanup block for the cleanup attribute
llvm-svn: 64052
2009-02-07 23:51:38 +00:00
Anders Carlsson be0f76a712 Add support for emitting cleanup blocks. Make EmitCompoundStatement emit cleanup blocks if necessary
llvm-svn: 64051
2009-02-07 23:50:39 +00:00
Anders Carlsson 2cf8c44e43 Add a simple RAII object, to be used for pushing a cleanup entry and make the insertion point be the cleanup block.
llvm-svn: 64048
2009-02-07 23:30:41 +00:00
Anders Carlsson 723f55d697 Improve Sema of the cleanup attribute somewhat.
llvm-svn: 64047
2009-02-07 23:16:50 +00:00
Mike Stump 0509d9635b Ensure we track all the stack depths for all break and continue points
correctly.  This should lay the ground work to throw the big switch
and start code gening break and continue in the presense of vlas.

llvm-svn: 64046
2009-02-07 23:02:10 +00:00
Ted Kremenek eae2a0eb8f Fix null dereference.
llvm-svn: 64044
2009-02-07 22:54:59 +00:00
Anders Carlsson 15cb75a20c Add plumbing for the cleanup stack.
llvm-svn: 64043
2009-02-07 22:53:43 +00:00
Ted Kremenek 2a4028b728 For retain/release leaks, have the BugReport description indicate the allocation site and initial bindings.
llvm-svn: 64041
2009-02-07 22:38:00 +00:00
Ted Kremenek 79f955bfed Tidy up bug descriptions.
llvm-svn: 64039
2009-02-07 22:37:02 +00:00
Ted Kremenek 252b90ece6 Use BugReport::getDescription() for the compiler warning text.
llvm-svn: 64038
2009-02-07 22:36:41 +00:00
Chris Lattner 4293c8935a C++ really shouldn't check these #defines, thanks to Howard
for pointing this out!

llvm-svn: 64037
2009-02-07 22:21:31 +00:00
Ted Kremenek 008242f6ea Determining the allocation site for a leak when constructing a CFRefLeakReport. This avoids repeated calls to GetAllocationSite when Profiling a CFRefLeakReport object.
llvm-svn: 64036
2009-02-07 22:19:59 +00:00
Ted Kremenek 14036554d2 Split logic for 'getEndPath()' for CFRefReport and CFRefLeakReport.
llvm-svn: 64034
2009-02-07 22:04:05 +00:00
Ted Kremenek da545836f0 Convert a use of 'std::ostringstream' to 'llvm::raw_string_ostream'.
llvm-svn: 64033
2009-02-07 21:59:45 +00:00
Anders Carlsson bf8a1be33c Split the exception object out into its own stack.
llvm-svn: 64032
2009-02-07 21:37:21 +00:00
Anders Carlsson da0e4560a1 Simplify the Objective-C exception handling.
llvm-svn: 64031
2009-02-07 21:26:04 +00:00
Mike Stump 56d2a15829 Format for 80-cols.
llvm-svn: 64030
2009-02-07 20:14:12 +00:00
Sebastian Redl 5822f08cd6 Move CheckPointerToMemberOperands to SemaExprCXX.cpp
llvm-svn: 64029
2009-02-07 20:10:22 +00:00
Mike Stump 6d8a617474 Ensure that we don't miscodegen if vlas creap into the top of the for.
This will allow us to generate break and continue even if vlas are
involved without worry that we'll silently generate bad code.

llvm-svn: 64028
2009-02-07 20:09:00 +00:00
Sebastian Redl 7b7cec6895 Fix pretty-printing of if conditions. Patch by Ben Lickly.
llvm-svn: 64027
2009-02-07 20:05:48 +00:00
Mike Stump dc0d6be7b9 Arrange to have the correct StackDepth for while statements.
llvm-svn: 64021
2009-02-07 18:08:12 +00:00
Mike Stump 1f8be1b9ac Fit into 80-col.
llvm-svn: 64020
2009-02-07 17:18:33 +00:00
Sebastian Redl f3b5e27fee Make const-initialized const integral variables I-C-Es in C++.
llvm-svn: 64015
2009-02-07 13:06:23 +00:00
Mike Stump 1d91dd98ad Fixup goto codegen in and around VLAs.
llvm-svn: 64014
2009-02-07 12:52:26 +00:00
Chris Lattner 6726d42059 remove two eroneous suffixes, these promote to int. Thanks to Neil
for pointing this out.

llvm-svn: 64011
2009-02-07 08:49:37 +00:00
Chris Lattner 04441a10a5 add note, weirdness.
llvm-svn: 64010
2009-02-07 07:13:51 +00:00
Chris Lattner a7cc1267cf fix some missing parens, thanks for Eli's review!
Obviously I make a miserable header developer :)

llvm-svn: 64009
2009-02-07 06:42:04 +00:00
Chris Lattner 14bc3528f5 fix a typo that Sebastian noticed!
llvm-svn: 64008
2009-02-07 06:38:41 +00:00
Chris Lattner 5455db4273 make sure that UINTMAX_MAX has an unsigned type. This assumes that
uintmax_t is unsigned long long, which is not optimal, but is assumed 
elsewhere already.

llvm-svn: 64007
2009-02-07 06:38:06 +00:00
Chris Lattner 6bda45cec0 make various MAX/MIN constants be preprocessor constants, not C constants.
Thanks to Eli for pointing this out.

llvm-svn: 64006
2009-02-07 06:33:44 +00:00
Mike Stump 1f36fb1de0 Ensure that we assert if given an unhandled value.
llvm-svn: 64004
2009-02-07 03:46:08 +00:00
Daniel Dunbar ee9e4c274b Set load/store alignment when doing ABI coercions.
- Currently, this is producing poor code, but we prefer correctness
   to performance for now. Eventually we should be able to generally
   avoid having to set the alignment when we control the alignment of
   the alloca.

 - This knocks out 33/1000 failures on my single argument ABI tests,
   down to 22/1000 and 18 of these appear to be gcc bugs. Woot.

llvm-svn: 64001
2009-02-07 02:46:03 +00:00
Ted Kremenek 0b41d6c43d Use 'Destroy(Context)' instead of 'Context.Deallocate()' (does recursive freeing of memory).
llvm-svn: 63998
2009-02-07 01:51:40 +00:00
Ted Kremenek 5a201951ca Overhaul of Stmt allocation:
- Made allocation of Stmt objects using vanilla new/delete a *compiler
  error* by making this new/delete "protected" within class Stmt.
- Now the only way to allocate Stmt objects is by using the new
  operator that takes ASTContext& as an argument.  This ensures that
  all Stmt nodes are allocated from the same (pool) allocator.
- Naturally, these two changes required that *all* creation sites for
  AST nodes use new (ASTContext&).  This is a large patch, but the
  majority of the changes are just this mechanical adjustment.
- The above changes also mean that AST nodes can no longer be
  deallocated using 'delete'.  Instead, one most do
  StmtObject->Destroy(ASTContext&) or do
  ASTContextObject.Deallocate(StmtObject) (the latter not running the
  'Destroy' method).

Along the way I also...
- Made CompoundStmt allocate its array of Stmt* using the allocator in
  ASTContext (previously it used std::vector).  There are a whole
  bunch of other Stmt classes that need to be similarly changed to
  ensure that all memory allocated for ASTs comes from the allocator
  in ASTContext.
- Added a new smart pointer ExprOwningPtr to Sema.h.  This replaces
  the uses of llvm::OwningPtr within Sema, as llvm::OwningPtr used
  'delete' to free memory instead of a Stmt's 'Destroy' method.

Big thanks to Doug Gregor for helping with the acrobatics of making
'new/delete' private and the new smart pointer ExprOwningPtr!

llvm-svn: 63997
2009-02-07 01:47:29 +00:00
Ted Kremenek 5d7662cfe0 GRExprEngine: When processing compound assignments, do a switch table lookup to get the non-compound opcode from the compound opcode instead of relying on the order of BinaryOperator::opcode values. This unbreaks the misc-ps.c test.
llvm-svn: 63991
2009-02-07 00:52:24 +00:00
Chris Lattner 19179ad680 start of tgmath, yuck.
llvm-svn: 63990
2009-02-07 00:47:29 +00:00
Sebastian Redl 9c3b4b1bc5 Add negative test cases and fix diagnostics for member pointer dereferencing.
llvm-svn: 63987
2009-02-07 00:41:42 +00:00
Daniel Dunbar d404862cf9 When making dummy file entries, the directory name should also be
non-empty.

llvm-svn: 63986
2009-02-07 00:40:41 +00:00
Chris Lattner 01af63beb4 Apparently it is important to define intptr_t and uintptr_t to
long instead of int.  This is because system heaers like to redefine
typedefs and that is an error if they don't exactly match.  Use long
for intptr_t on all systems where long is the right size.

llvm-svn: 63984
2009-02-07 00:23:17 +00:00
Sebastian Redl 112a976616 Implement dereferencing of pointers-to-member.
llvm-svn: 63983
2009-02-07 00:15:38 +00:00
Sebastian Redl ad41b83816 Fix some errors in the new stdint.h.
llvm-svn: 63982
2009-02-06 23:57:52 +00:00
Fariborz Jahanian c76e741622 Fixed an objc2 nonfragile-abi code gen bug.
Now we can say 'hello world' objective-c style
in the nonfragile abi.

llvm-svn: 63981
2009-02-06 23:46:26 +00:00
Chris Lattner 6fbf3a07bc only define MB_LEN_MAX if the system <limits.h> doesn't.
don't typecast CHAR_MIN to char, this makes it not a PP constant
and gives it the wrong unpromoted type.  Thanks to Sebastian for
pointing this out!

llvm-svn: 63980
2009-02-06 23:29:39 +00:00
Chris Lattner 404c2fb9cc add a stdint.h header.
llvm-svn: 63977
2009-02-06 22:59:47 +00:00
Chris Lattner 0763cc6bfd Export __INT8_TYPE__ / __INT16_TYPE__ / __INT32_TYPE__ / __INT64_TYPE__
in a gcc 4.5 compatible way so that stdint.h can follow the compiler's 
notion of types.

llvm-svn: 63976
2009-02-06 22:59:26 +00:00
Douglas Gregor 706a6a9cbf Clean up an already-fixed FIXME
llvm-svn: 63975
2009-02-06 22:58:38 +00:00
Douglas Gregor cd72ba97e7 Semantic checking for class template declarations and
redeclarations. For example, checks that a class template
redeclaration has the same template parameters as previous
declarations.

Detangled class-template checking from ActOnTag, whose logic was
getting rather convoluted because it tried to handle C, C++, and C++
template semantics in one shot.

Made some inroads toward eliminating extraneous "declaration does not
declare anything" errors by adding an "error" type specifier.

llvm-svn: 63973
2009-02-06 22:42:48 +00:00
Fariborz Jahanian 6b7cd6e5f4 objc2's nonfragile abi API for messages sent to 'super'.
llvm-svn: 63959
2009-02-06 20:09:23 +00:00
Ted Kremenek 6b7ecf6819 Move StringLiteral to allocate its internal string data using the allocator in
ASTContext. This required changing all clients to pass in the ASTContext& to the
constructor of StringLiteral. I also changed all allocations of StringLiteral to
use new(ASTContext&).

Along the way, I updated a bunch of new()'s in StmtSerialization.cpp to use the
allocator from ASTContext& (not complete).

llvm-svn: 63958
2009-02-06 19:55:15 +00:00
Daniel Dunbar fe2fb0af5a Use 'compile' instead of 'codegen' when reporting error to user.
llvm-svn: 63952
2009-02-06 19:18:03 +00:00
Chris Lattner 0b0cfbcb62 correct description
llvm-svn: 63947
2009-02-06 18:45:59 +00:00
Chris Lattner 1cee17aa5f first hack at limits.h
llvm-svn: 63945
2009-02-06 18:34:27 +00:00
Chris Lattner a31829b5bc -funsigned-char sets __CHAR_UNSIGNED__
llvm-svn: 63942
2009-02-06 18:20:57 +00:00
Douglas Gregor 8af63e42e3 Diagnose attempts to define a namespace member out-of-line when no
matching member exists. Thanks to Piotr Rak for reporting the problem!

llvm-svn: 63939
2009-02-06 17:46:57 +00:00
Zhongxing Xu e42755334c SymbolicRegions really have unknown sizes.
llvm-svn: 63929
2009-02-06 08:51:30 +00:00
Zhongxing Xu dec48a50df Create ElementRegion when the base is SymbolicRegion. This is like what we do
for FieldRegion. This enables us to track more values.

Simplify SymbolicRegion::getRValueType(). We assume the symbol always has
pointer type.

llvm-svn: 63928
2009-02-06 08:44:27 +00:00
Chris Lattner 1630c3c4f0 Add an implementation of -dM that follows GCC closely enough to permit
diffing the output of:
  clang -dM -o - -E -x c foo.c | sort

llvm-svn: 63926
2009-02-06 06:45:26 +00:00
Chris Lattner 5c7cd6043e add interface for walking macro table.
llvm-svn: 63925
2009-02-06 06:26:42 +00:00
Chris Lattner bba531ce99 get __WCHAR_TYPE__ from the targetinfo hook
llvm-svn: 63920
2009-02-06 05:06:07 +00:00
Chris Lattner a91c30fdb0 simplify and refactor a bunch of type definition code in Preprocessor
predefines buffer initialization.

llvm-svn: 63919
2009-02-06 05:04:11 +00:00
Chris Lattner 61898606dc remove some ad-hocery and use DefineTypeSize for more things.
Now you too can have a 47 bit long long!

llvm-svn: 63918
2009-02-06 04:55:18 +00:00
Chris Lattner a3dc5d8423 refactor some code into a DefineTypeSize function.
llvm-svn: 63917
2009-02-06 04:50:25 +00:00
Chris Lattner 9e03119446 don't emit any diagnostics after a fatal one.
llvm-svn: 63914
2009-02-06 04:16:02 +00:00
Chris Lattner b05f49e7fd handle fatal errors, rely on warnings to point out missing cases.
llvm-svn: 63913
2009-02-06 03:57:44 +00:00
Ted Kremenek fe7a9601e9 Use ASTContext's allocator to deallocate Stmt objects instead of using 'delete'. This fixes <rdar://problem/6561143>.
llvm-svn: 63905
2009-02-06 01:42:09 +00:00
Douglas Gregor eff93e0401 Improve the representation of template type parameters. We now
canonicalize by template parameter depth, index, and name, and the
unnamed version of a template parameter serves as the canonical.

TemplateTypeParmDecl no longer needs to inherit from
TemplateParmPosition, since depth and index information is present
within the type.

llvm-svn: 63899
2009-02-05 23:33:38 +00:00
Chris Lattner fbe2272fc8 add support to the diagnostics machinery for mapping warnings and
errors to 'fatal' error severity.

llvm-svn: 63894
2009-02-05 22:47:05 +00:00
Ted Kremenek 0ca23d3f73 Add 'AppendValue' to the list of magic CF function names that cause a tracked object to escape. Fixes <rdar://problem/6560661>.
llvm-svn: 63891
2009-02-05 22:34:53 +00:00