Commit Graph

3249 Commits

Author SHA1 Message Date
Fariborz Jahanian 56b3b77c7d Protocol meta-data for objc2's non-fragile abi.
Lot more to do in this area.

llvm-svn: 63326
2009-01-29 19:24:30 +00:00
Chris Lattner 409f555400 diags moved, so these casts are no longer needed.
llvm-svn: 63324
2009-01-29 18:49:48 +00:00
Steve Naroff d25adc945e Hack Sema::LookupDeclInScope() to avoid calling Sema::LookupName() when parsing C/ObjC.
This results in a 1.7% improvement for "Cocoa.h". If we can figure out how to return a "Decl *", rather than a Sema::LookupResult(), we will likely bump the speedup from 1.7%->2.5%. I verified this, however couldn't get it to work without breaking a fair number of C++ test cases. Will discuss with Doug offline.

llvm-svn: 63320
2009-01-29 18:09:31 +00:00
Chris Lattner 4b6713ef20 next round of diagnostics cleanups, moving some
diags around, eliminating #defines, etc.  Patch by
Anders Johnsen!

llvm-svn: 63318
2009-01-29 17:46:13 +00:00
Douglas Gregor 0202cb406e Introduce a new expression node, ImplicitValueInitExpr, that
represents an implicit value-initialization of a subobject of a
particular type. This replaces the (ab)use of CXXZeroValueInitExpr
within initializer lists for the "holes" that occur due to the use of
C99 designated initializers.

The new test case is currently XFAIL'd, because CodeGen's
ConstExprEmitter (in lib/CodeGen/CGExprConstant.cpp) needs to be
taught to value-initialize when it sees ImplicitValueInitExprs.

llvm-svn: 63317
2009-01-29 17:44:32 +00:00
Douglas Gregor 5169570e28 Clean up designated initialization of unions, so that CodeGen doesn't
have to try to guess which member is being initialized.

llvm-svn: 63315
2009-01-29 16:53:55 +00:00
Douglas Gregor 4f5a889dc6 Suppress a warning
llvm-svn: 63310
2009-01-29 16:09:46 +00:00
Daniel Dunbar 5537b8bc6c x86_64 ABI: Handle fields / complex components which straddle
eightbyte boundaries.
 - Getting harder to test now that we handle cases gcc & llvm-gcc get
   wrong ( { _Complex char; _Complex int; } is a good example). :)

llvm-svn: 63305
2009-01-29 09:42:07 +00:00
Daniel Dunbar 7cd7d47c5c x86_64 ABI: Tweak merging algorithm so that we always bail early when
we see a Memory classification.

llvm-svn: 63295
2009-01-29 08:35:40 +00:00
Daniel Dunbar 012468aa7f ABI: When emitting calls which return an ignored argument, make sure
to still return an RValue of the correct type.

llvm-svn: 63294
2009-01-29 08:24:57 +00:00
Daniel Dunbar 17aa941534 x86_64 ABI: Implement classification for records.
- This is my best initial guess at what the "spec" means, although it is not
   particularly clear on a number of points. Will refine through testing.

llvm-svn: 63292
2009-01-29 08:13:58 +00:00
Daniel Dunbar 227e1a77ff x86_64: Support cases which map to returning multiple values in LLVM
(e.g., _Complex double -> { double, double } return).

llvm-svn: 63285
2009-01-29 07:36:07 +00:00
Daniel Dunbar 8e6652affc x86_64 ABI: Classify _Complex ints as integer.
llvm-svn: 63283
2009-01-29 07:22:20 +00:00
Chris Lattner 36790cf29a Fix -Wimplicit-function-declaration, which required some refactoring and
changes in various diagnostics code.

llvm-svn: 63282
2009-01-29 06:55:46 +00:00
Daniel Dunbar dc8b4b0594 Fix typo
llvm-svn: 63281
2009-01-29 06:44:03 +00:00
Daniel Dunbar 74f2425b89 Evaluate ==,!= for complex types.
llvm-svn: 63280
2009-01-29 06:43:41 +00:00
Daniel Dunbar b6f953e22a Evaluate casts to complex.
- Lift (int,float) -> (int,float) conversion into separate routines.

 - Fix handling of, e.g., char -> _Complex int, which was producing a
   _Complex char value instead.

llvm-svn: 63278
2009-01-29 06:16:07 +00:00
Chris Lattner 60f36223a9 move library-specific diagnostic headers into library private dirs. Reduce
redundant #includes.  Patch by Anders Johnsen!

llvm-svn: 63271
2009-01-29 05:15:15 +00:00
Chris Lattner d9ae05ba50 fix an absolutely inscrutible gcc 4.0 error:
llvm[0]: Compiling SemaInit.cpp for Debug build 
SemaInit.cpp:171: error: ‘InitListChecker’ has not been declared
SemaInit.cpp:171: error: ISO C++ forbids declaration of ‘InitListChecker’ with no type
SemaInit.cpp: In function ‘int InitListChecker(clang::Sema*, clang::InitListExpr*, clang::QualType&)’:
SemaInit.cpp:172: error: ‘hadError’ was not declared in this scope
SemaInit.cpp:173: error: ‘SemaRef’ was not declared in this scope
SemaInit.cpp:177: error: ‘FullyStructuredList’ was not declared in this scope

llvm-svn: 63270
2009-01-29 05:10:57 +00:00
Daniel Dunbar 0aa2606190 Add folding for complex mul and fix some major bugs in complex float
evaluation (alternate part of real/imag init was being set to 3 not 0
because the wrong APFloat constructor was being called).
 - Test cases coming once some more support is in.

llvm-svn: 63264
2009-01-29 01:32:56 +00:00
Douglas Gregor cde232f7f0 Better documentation for our initialization checker
llvm-svn: 63261
2009-01-29 01:05:33 +00:00
Douglas Gregor 85df8d82c7 Move InitListChecker out of Sema.h
llvm-svn: 63258
2009-01-29 00:45:39 +00:00
Douglas Gregor f6d2752f12 Eliminate infinite looping in a wacky case with designated initializers. Simplifies (somewhat) the actually checking of the initializer expression following the designators
llvm-svn: 63257
2009-01-29 00:39:20 +00:00
Steve Naroff dcfe56d489 Refactor Sema::LookupDecl() into 2 functions: LookupDeclInScope() and LookupDeclInContext().
The previous interface was very confusing. This is much more explicit, which will be easier to understand/optimize/convert.

The plan is to eventually deprecate both of these functions. For now, I'm focused on performance.

llvm-svn: 63256
2009-01-29 00:07:50 +00:00
Douglas Gregor e6af7a028c Remove Expr::hasSideEffects. It doesn't work anyway
llvm-svn: 63254
2009-01-28 23:43:32 +00:00
Douglas Gregor 17bd094a6b Improvements to code-generation and semantic analysis of designated
initializers.

  - We now initialize unions properly when a member other than the
    first is named by a designated initializer.
  - We now provide proper semantic analysis and code generation for
    GNU array-range designators *except* that side effects will occur
    more than once. We warn about this.

llvm-svn: 63253
2009-01-28 23:36:17 +00:00
Fariborz Jahanian d27a820ae2 Add setter/getter methods to the list of methods
of class's meta-data (related to objc2 nonfragile abi).

llvm-svn: 63251
2009-01-28 22:46:49 +00:00
Ted Kremenek b4dd3f8685 Remove '#if 0' code.
llvm-svn: 63250
2009-01-28 22:35:55 +00:00
Ted Kremenek 2e561dd491 Remove method 'AddNE' from the public interface of ConstraintManager.
llvm-svn: 63249
2009-01-28 22:27:59 +00:00
Daniel Dunbar f50e60b23a Implement basic _Complex integer constant folding.
- Merged into single ComplexEvaluator, these share too much logic to
   be worth splitting for float/int (IMHO). Will split on request.

llvm-svn: 63248
2009-01-28 22:24:07 +00:00
Fariborz Jahanian 066347ec7b property metadata for objc2's nonfragile abi
llvm-svn: 63246
2009-01-28 22:18:42 +00:00
Douglas Gregor 347f7eabb9 Code generation support for C99 designated initializers.
The approach I've taken in this patch is relatively straightforward,
although the code itself is non-trivial. Essentially, as we process
an initializer list we build up a fully-explicit representation of the
initializer list, where each of the subobject initializations occurs
in order. Designators serve to "fill in" subobject initializations in
a non-linear way. The fully-explicit representation makes initializer
lists (both with and without designators) easy to grok for codegen and
later semantic analyses. We keep the syntactic form of the initializer
list linked into the AST for those clients interested in exactly what
the user wrote.

Known limitations:
  - Designating a member of a union that isn't the first member may
    result in bogus initialization (we warn about this)
  - GNU array-range designators are not supported (we warn about this)

llvm-svn: 63242
2009-01-28 21:54:33 +00:00
Ted Kremenek c783209605 retain/release checker: Always generate an "autorelease" summary for an "autorelease" message, and have the summary processing logic treat it as a no-op in GC mode. This change is motivated to encode more of the semantics in the summaries themselves for eventual better diagnostics.
llvm-svn: 63241
2009-01-28 21:44:40 +00:00
Daniel Dunbar 804c0441c2 Handle complex types in ASTContext::mergeTypes
llvm-svn: 63238
2009-01-28 21:22:12 +00:00
Ted Kremenek 62224c1d7f Add more PTH diagnostics for invalid PTH files, etc.
llvm-svn: 63232
2009-01-28 21:02:43 +00:00
Ted Kremenek 3b0589e4b4 Enhance PTHManager::Create() to take an optional Diagnostic* argument that can be used to report issues such as a missing PTH file.
llvm-svn: 63231
2009-01-28 20:49:33 +00:00
Ted Kremenek 5241832d1d Fix TextDiagnosticPrinter::HandleDiagnostic to handle invalid FullSourceLocs that do not have a SourceManager.
llvm-svn: 63230
2009-01-28 20:47:47 +00:00
Ted Kremenek bf16554640 Add method FullSourceLoc::getBufferData().
llvm-svn: 63229
2009-01-28 20:46:26 +00:00
Steve Naroff 16c8e598ae Name change (isTypeName->getTypeName).
Since it doesn't return a bool, is shouldn't be prefixed with 'is'.

llvm-svn: 63226
2009-01-28 19:39:02 +00:00
Steve Naroff b04867265c Change Parser::ParseFunctionDeclarator() to annotate typename tokens.
This removes ~10% of the calls to Sema::isTypeName(), which amount to a little less than a 1% reduction in usertime (for Cocoa.h).

llvm-svn: 63219
2009-01-28 19:16:40 +00:00
Fariborz Jahanian b042a59230 Some refactoring of common code. No change in functionality.
llvm-svn: 63218
2009-01-28 19:12:34 +00:00
Sebastian Redl ed8f200318 Implement pointer to member handling in static_cast.
Fix a stupid mistake in UnwrapSimilarPointers that made any two member pointers compatible as long as the pointee was the same.
Make a few style corrections as suggested by Chris.

llvm-svn: 63215
2009-01-28 18:33:18 +00:00
Douglas Gregor fb03466388 Complete semantic checking for typedef redeclarations in C++. The
rules are slightly different than in C, and now we handle both
dialects properly.

llvm-svn: 63211
2009-01-28 17:15:10 +00:00
Steve Naroff aec0f37d11 Remove 'NamespaceNameOnly' argument to Sema::LookupDecl(). It is unused.
Even though Sema::LookupDecl() is deprecated, it's still used all over the place. Simplifying the interface will make it easier to understand/optimize/convert.

llvm-svn: 63210
2009-01-28 16:09:22 +00:00
Steve Naroff 49f97d7eb2 Remove 'enableLazyBuiltinCreation' argument to Sema::LookupDecl(). It is unused.
Even though Sema::LookupDecl() is deprecated, it's still used all over the place. Simplifying the interface will make it easier to understand/optimize/convert.

llvm-svn: 63208
2009-01-28 15:51:12 +00:00
Chris Lattner 22ebe7ba66 long long and double have 64-bit alignment on x86-64.
llvm-svn: 63191
2009-01-28 06:58:19 +00:00
Ted Kremenek 4daeccf28f retain/release checker: Improve diagnostics to indicate that CF objects are not automatically garbage collected.
llvm-svn: 63187
2009-01-28 06:25:48 +00:00
Ted Kremenek f0ec316a04 retain/release checker: Indicate whether a tracked object is a Core Foundation or Objective-C object.
llvm-svn: 63186
2009-01-28 06:06:36 +00:00
Ted Kremenek bdaa384453 retain/release checker: More diagnostic refactoring.
llvm-svn: 63184
2009-01-28 06:01:42 +00:00
Ted Kremenek aeb115f93a retain/release checker: Embed an "object type" into the RetEffect/RetVal objects to help distinguish between Objective-C and Core Foundation objects (for better diagnostics).
llvm-svn: 63183
2009-01-28 05:56:51 +00:00