Commit Graph

3563 Commits

Author SHA1 Message Date
Ted Kremenek 4c1d41f2b1 PTH: Have meta data be at the beginning of the PTH file, not the end.
llvm-svn: 64338
2009-02-11 23:34:32 +00:00
Mike Stump c89c8e3225 Fix comment.
llvm-svn: 64337
2009-02-11 23:03:27 +00:00
Douglas Gregor 4e5cbdcbed Initial implementation of function overloading in C.
This commit adds a new attribute, "overloadable", that enables C++
function overloading in C. The attribute can only be added to function
declarations, e.g.,

  int *f(int) __attribute__((overloadable));

If the "overloadable" attribute exists on a function with a given
name, *all* functions with that name (and in that scope) must have the
"overloadable" attribute. Sets of overloaded functions with the
"overloadable" attribute then follow the normal C++ rules for
overloaded functions, e.g., overloads must have different
parameter-type-lists from each other.

When calling an overloaded function in C, we follow the same
overloading rules as C++, with three extensions to the set of standard
conversions:

  - A value of a given struct or union type T can be converted to the
    type T. This is just the identity conversion. (In C++, this would
    go through a copy constructor).
  - A value of pointer type T* can be converted to a value of type U*
    if T and U are compatible types. This conversion has Conversion
    rank (it's considered a pointer conversion in C).
  - A value of type T can be converted to a value of type U if T and U
    are compatible (and are not both pointer types). This conversion
    has Conversion rank (it's considered to be a new kind of
    conversion unique to C, a "compatible" conversion).

Known defects (and, therefore, next steps):
  1) The standard-conversion handling does not understand conversions
  involving _Complex or vector extensions, so it is likely to get
  these wrong. We need to add these conversions.
  2) All overloadable functions with the same name will have the same
  linkage name, which means we'll get a collision in the linker (if
  not sooner). We'll need to mangle the names of these functions.

llvm-svn: 64336
2009-02-11 23:02:49 +00:00
Fariborz Jahanian 1f0a9ebf72 Patch to fix encoding in 64bit abi. With this patch
all but one dejagnu encoding tests for darwin
pass in nonfragile abi mode.

llvm-svn: 64334
2009-02-11 22:31:45 +00:00
Daniel Dunbar e9fcadd2a6 Use EmitVAListRef instead of EmitLValue directly to handle array decay
case on x86_64.

llvm-svn: 64333
2009-02-11 22:25:55 +00:00
Ted Kremenek e5554deb45 PTH: Replace string identifier to persistent ID lookup with a hashtable. This is
actually *slightly* slower than the binary search. Since this is algorithmically
better, further performance tuning should be able to make this faster.

llvm-svn: 64326
2009-02-11 21:29:16 +00:00
Daniel Dunbar 8d9dc4a6d5 Support IRgen of va_arg of structure as l-value.
llvm-svn: 64325
2009-02-11 20:59:32 +00:00
Fariborz Jahanian 74b7722c2c ir-gen for objc's @selector expression in nonfragile abi mode.
llvm-svn: 64323
2009-02-11 20:51:17 +00:00
Douglas Gregor 5bd22da927 Appease the language lawyers
llvm-svn: 64321
2009-02-11 20:46:19 +00:00
Steve Naroff 7a54c0d7d4 Fix <rdar://problem/6505139> [clang on growl]: need to allow unnamed selectors as the first argument
llvm-svn: 64320
2009-02-11 20:43:13 +00:00
Steve Naroff 5ee2c02ac6 Fix <rdar://problem/6243503> [sema] @throw; accepted outside catch block.
llvm-svn: 64318
2009-02-11 20:05:44 +00:00
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