aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen
AgeCommit message (Collapse)Author
2009-05-13Fix rdar://6880259 - invalid function name in block call ↵Chris Lattner
(__NSConcreteGlobalBlock2) by using the appropriate CGM interface instead of directly creating a global. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71617 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-12implement l-value codegen of comma exprChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71595 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-12push GlobalDecl through enough of the CodeGenModule interfacesChris Lattner
to allow us to support generation of deferred ctors/dtors. It looks like codegen isn't emitting a call to the dtor in member-functions.cpp:test2, but when it does, its body should get emitted. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71594 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-12add an initial stab at emitting deferred c++ inline functions. This handles ↵Chris Lattner
static functions and methods declared inline, but not ctors/dtors or methods not declared inline (apparently my previous patch wasn't good enough). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71591 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-12cleanups, no functionality change.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71590 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-12static methods don't get this pointers.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71586 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-12revert my previous patch, I committed the wrong file.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71585 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-12static methods don't get this pointers.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71583 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-12Fixed typos, used DenseSet for keeping track ofFariborz Jahanian
selectors which need use Nonfrgile API for message dispatch. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71578 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-12Patch to implement ivar synthesis of properties declared in protocolsFariborz Jahanian
only and used in class imllementations (objc2 Nonfragile ABI specific). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71571 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-12Darwin x86-32 ABI: Now that structure passing is farther along, weDaniel Dunbar
don't need special treatment for unions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71559 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-12x86-64 ABI: clang incorrectly passes union { long double, float } inDaniel Dunbar
register. - Merge algorithm was returning MEMORY as it should. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71556 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-11Factor code that's common to EmitCXXMemberCallExpr and ↵Anders Carlsson
EmitCXXConstructorCall out into a EmitCXXMemberCall function. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71514 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-11Darwin x86-32: Multi-dimensional arrays were not handled correctly,Daniel Dunbar
spotted by Eli! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71490 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-11Patch to allow Nonfragile ABI to use 32-bit style legacyFariborz Jahanian
message dispage API for all but a few messages. This is a runtime performance improvement and there is not meant to be a functional change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71467 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-11Darwin x86_32: Treat records with unnamed bit-fields as "empty".Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71461 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-11More improvements for GNU runtime objc EH, patch by David Chisnall!Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71451 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-10Implement C++0x nullptr.Sebastian Redl
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71405 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-09Correct for renaming PaddedSize -> AllocSize inDuncan Sands
LLVM. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71350 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-08x86_64 ABI: Ignore padding bit-fields during classification.Daniel Dunbar
- {return-types,single-args}-{32,64} pass the first 1k ABI tests with bit-fields enabled. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71272 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-08Darwin x86_32: When coercing a "single element" structure, make sureDaniel Dunbar
to use a wide enough type. This might be wider than the "single element"'s type in the presence of padding bit-fields. - Darwin x86_32 now passes the first 1k ABI tests with bit-field generation enabled. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71270 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-08Darwin x86_32: Ignore padding bit-fields when looking for "singleDaniel Dunbar
element" structures. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71266 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-08Darwin x86_32: Improve bit-field handling for returning records.Daniel Dunbar
- This turns out to be a no-op now that most of the handling for everything else is in place. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71261 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-08Darwin x86_32: Ignore arrays of empty structures inside records.Daniel Dunbar
- This eliminates 5/1000 failures on return-types-32, on the current ABITest config. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71250 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-08further improvements to gnu objc EH stuff, patch by David Chisnall!Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71227 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-08"This patch fixes message sends to super in categories for the GNU runtime. ↵Chris Lattner
This used to work, but I broke it when I modified the code to emit the same thing as GCC for message sends to super in classes." Patch by David Chisnall! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71220 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-08reimplement __sync_* builtins to be variadic and to follow the sameChris Lattner
semantic rules that gcc and icc use. This implements the variadic and concrete versions as builtins and has sema do the disambiguation. There are probably a bunch of details to finish up but this seems like a large monotonic step forward :) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71212 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-08initial support for ObjC exceptions with the GNU runtime:Chris Lattner
"This patch is a first pass at adding support for exceptions for the GNU runtime. There are a few limitations at present: - @synchronized() is not yet supported at all. gcc currently emits calls to runtime library functions that don't exist for this directive. - Only id @catch statements are currently working. This is enough for NS_DURING and friends, but I need to spend more time reading the output from gcc -S to work out how it finds the class pointer to make arbitrary class type catch statements work. - I've tested it with a few common cases[1] and the clang test suite (which doesn't test exceptions for the GNU runtime, but shows I haven't broken anything else), but there are probably a lot of cases I've missed." Patch by David Chisnall! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71198 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-07Fix crash with constant initialization of bit-fields in unions.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71194 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-05Patch to support Gnu runtime's typed selectors.Fariborz Jahanian
Patch by David Chisnall. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71023 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-05When defining a function whose type has no prototype, make an effortChris Lattner
to go back and clean up existing uses of the bitcasted function. This is not just an optimization: it is required for correctness to get always inline functions to work, see testcases in function-attributes.c. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70971 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-05fix some more cases where we'd emit a file with a line of 0 for implicitChris Lattner
types. In this case, it was objc_selector and objc_class. This fixes rdar://6852754 - clang sometimes generates incorrect/unknown file/line info for DW_TAG__structure_type dies git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70969 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-05Do not generate bogus location info for DW_TAG_inheritanceChris Lattner
DIEs. We were generating a loc with line of 0 and a file. These tags do not need locations at all, just remove it. this fixes rdar://6852792 - Clang generates incorrect (and unnecessary) file and line info for DW_TAG_inheritance dies git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70966 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-05Fix generated debug info for decls with no location (which include self/_cmdChris Lattner
in ObjC) to not emit file/line location information. Previously we would output a file with bogus line information. This fixes: rdar://6852814 - Clang generates incorrect file & line info for automatic/understood formal parameters for objc-programs git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70965 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-05Refactor global decls to hold either a regular Decl or a CXXConstructorDecl ↵Anders Carlsson
+ ctor type or a CXXDestructorDecl + dtor type. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70962 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-05Remove an unneeded lookup routine.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70951 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-04Provide basic support for generation of objc2's Fariborz Jahanian
objc_assign_global API when assigning to global objective-c object pointer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70939 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-04Fix the field count in interface record layout (it was incorrectlyDaniel Dunbar
compensating for super classes). This was making the reported class sizes for empty classes very, very wrong. - Also, we now report the size info for an empty class like gcc (as the offset of the start, not as 0, 0). - Add a few more test cases we were mishandling before (padding bit field at end of struct, for example). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70938 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-04Compute interface instanceStart and instanceSize using the recordDaniel Dunbar
layout. - This is much simpler / more efficient. - This also properly computes the size in the presence of bit-fields. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70916 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-04"Fix" a problem with debug info in the presence of always_inlineChris Lattner
function calls. For a program like this: #include <stdio.h> static __inline__ __attribute__((always_inline)) int bar(int x) { return 4; } int main() { int X = bar(4); printf("%d\n", X); } clang was not outputing any debug info for the body of main(). This is because the backend is getting confused by the region_start/end that clang is emitting for block scopes. For now, just disable these (matching llvm-gcc), this stuff is in progress of rework anyway. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70889 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-04"The attached diff fixes the //FIXME in message send to super. This should ↵Chris Lattner
now be faster, and works in the presence of class posing. This is now the same approach as used in GCC (the earlier code was a quick hack to get something working)." Patch by David Chisnall! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70877 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-04Patch from David Chisnall:Daniel Dunbar
The attached diff fixes the //FIXME in message send to super. This should now be faster, and works in the presence of class posing. This is now the same approach as used in GCC (the earlier code was a quick hack to get something working). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70868 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-04Remove unnecessary copy of constraint info.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70835 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-04PR4143: don't crash generating debug info for incomplete enum types.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70825 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-04Remove unnecessary push_back (at least, I think it's unnecessary); Eli Friedman
hopefully, this fixes PR4144 without any regressions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70823 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-04Don't allow clients to traverse into superclass synthesized propertiesDaniel Dunbar
via CollectObjCIvars. - In places where we need them, we should have the implementation and access the properties through it. This is a fairly substantial functionality change: 1. @encode no longer encodes synthesized ivars, ever. 2. The ivar layout bitmap no longer encodes information for synthesized ivars in superclasses. Well, actually I had already broken that, but it is intentional now. We are now differing substantially from llvm-gcc and gcc here. However, in my opinion this fundamentally *must* work if non-fragile classes are to work. Without this change, the result of @encode and the ivar layout depend on the order that the implementation is seen in a file (if it is in the same file with its superclass). Since both scenarios should work the same, our behavior is now consistent with gcc behavior as if an implementation is never seen following an implementation of its superclass. Note that #2 is only a functionality change when (A) an implementation appears in the same translation unit with the implementation of its superclass, and (B) the superclass has synthesized ivars. My belief is that this situation does not occur in practice. I am not yet sure of the role/semantics of @encode when synthesized ivars are present... it's use is fairly unsound in a non-fragile world. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70822 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-03Inline GetFieldBaseOffset into sole callsite.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70813 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-03Avoid recomputing field offsets.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70812 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-03Normalize formattingDaniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70810 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-03Use the implementation decl for looking up offset while building theDaniel Dunbar
ivar layout. - The layout needs access to synthesized ivars. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70798 91177308-0d34-0410-b5e6-96231b3b80d8