Commit Graph

9455 Commits

Author SHA1 Message Date
Chris Lattner f4174b0c80 for now, disable all debug info generation at -O1 and above. This mirrors
similar logic in llvm-gcc and will hopefully be fixed soon.

llvm-svn: 64349
2009-02-12 01:50:58 +00:00
Chris Lattner 882018b890 search and replaceo?
llvm-svn: 64348
2009-02-12 01:37:35 +00:00
Douglas Gregor 4d0bd8bfc9 Add test for overloading with _Complex in C
llvm-svn: 64347
2009-02-12 00:57:03 +00:00
Anders Carlsson 2437cbfa3b Add support for generating block call expressions.
llvm-svn: 64346
2009-02-12 00:39:25 +00:00
Ted Kremenek c8b740eade Add lightweight shim "clang::StatSysCallCache" that caches 'stat' system calls
for use by FileManager. FileManager now takes a StatSysCallCache* in its
constructor (which defaults to NULL). This will be used for evaluating whether
or not caching 'stat' system calls in PTH is a performance win. This shim adds
no observable performance impact in the case where the 'StatSysCallCache*' is
null.

llvm-svn: 64345
2009-02-12 00:39:05 +00:00
Douglas Gregor 6752502b81 Expand the definition of a complex promotion to include complex ->
complex conversions where the conversion between the real types is an
integral promotion. This is how G++ handles complex promotions for its
complex integer extension.

llvm-svn: 64344
2009-02-12 00:26:06 +00:00
Douglas Gregor 78ca74d81d Introduce _Complex conversions into the function overloading
system. Since C99 doesn't have overloading and C++ doesn't have
_Complex, there is no specification for    this. Here's what I think
makes sense.

Complex conversions come in several flavors:

  - Complex promotions:  a complex -> complex   conversion where the
    underlying real-type conversion is a floating-point promotion. GCC
    seems to call this a promotion, EDG does something else. This is
    given "promotion" rank for determining the best viable function.
  - Complex conversions: a complex -> complex conversion that is
    not a complex promotion. This is given "conversion" rank for
    determining the best viable   function.
  - Complex-real conversions: a real -> complex or complex -> real
    conversion. This is given "conversion" rank for determining the
    best viable function.

These rules are the same for C99 (when using the "overloadable"
attribute) and C++. However, there is one difference in the handling
of floating-point promotions: in C99, float -> long double and double
-> long double are considered promotions (so we give them "promotion" 
rank), while C++ considers these conversions ("conversion" rank).

llvm-svn: 64343
2009-02-12 00:15:05 +00:00
Fariborz Jahanian 77b6b5d6d8 Last @encode'ing fix for objc2's nonfragile abi.
All relevant dejagnu enocding tests pass in this mode.

llvm-svn: 64341
2009-02-11 23:59:18 +00:00
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
Steve Naroff 22cc840947 Remove some non-ascii characters. Thanks Gabor.
llvm-svn: 64330
2009-02-11 22:01:48 +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
Ted Kremenek 345749aff4 Update checker build.
llvm-svn: 64297
2009-02-11 07:50:23 +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
Chris Lattner 54ef713d22 testcase for rdar://6096412 which already works.
llvm-svn: 64289
2009-02-11 06:22:30 +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
Mike Stump f9cf4fa08c One more tweak to account for gluing together llvm and clang into one.
llvm-svn: 64276
2009-02-11 01:11:36 +00:00
Mike Stump 9d5d3b9de5 More version experimentation.
llvm-svn: 64271
2009-02-11 01:01:17 +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
Mike Stump 081e354f11 Run a little experiment with version numbers.
llvm-svn: 64268
2009-02-11 00:36:04 +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
Ted Kremenek 5dcf9034c2 Add another test case for the MissingDealloc checker.
llvm-svn: 64257
2009-02-10 23:41:52 +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 c7d6964a38 PTH generation: Discard tokens that appear after and on the same line as '#endif'.
llvm-svn: 64250
2009-02-10 22:43:16 +00:00