aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CGClass.cpp
AgeCommit message (Collapse)AuthorFilesLines
2014-09-11MS ABI: Use the correct this arg when generating implict copy ctorDavid Majnemer1-4/+5
We assumed that the incoming this argument would be the last argument. However, this is not true under the MS ABI. This fixes PR20897. llvm-svn: 217642
2014-09-11Merge GetAddrOfCXXConstructor and GetAddrOfCXXDonstructor. NFC.Rafael Espindola1-3/+4
llvm-svn: 217598
2014-09-08Implement nonnull-attribute sanitizerAlexey Samsonov1-2/+3
Summary: This patch implements a new UBSan check, which verifies that function arguments declared to be nonnull with __attribute__((nonnull)) are actually nonnull in runtime. To implement this check, we pass FunctionDecl to CodeGenFunction::EmitCallArgs (where applicable) and if function declaration has nonnull attribute specified for a certain formal parameter, we compare the corresponding RValue to null as soon as it's calculated. Test Plan: regression test suite Reviewers: rsmith Reviewed By: rsmith Subscribers: cfe-commits, rnk Differential Revision: http://reviews.llvm.org/D5082 llvm-svn: 217389
2014-09-08Handle constructors and destructors a bit more uniformly in CodeGen.Rafael Espindola1-1/+2
There were code paths that are duplicated for constructors and destructors just because we have both CXXCtorType and CXXDtorsTypes. This patch introduces an unified enum and reduces code deplication a bit. llvm-svn: 217383
2014-08-28Kill one of EmitCallArgs overloads. NFC.Alexey Samsonov1-2/+1
llvm-svn: 216635
2014-08-26Fix an incorrect assert condition added in r216410.Alexey Samsonov1-1/+1
llvm-svn: 216479
2014-08-25Pass actual CXXConstructExpr instead of argument iteratorsAlexey Samsonov1-5/+4
into EmitSynthesizedCXXCopyCtorCall. No functionality change. llvm-svn: 216410
2014-08-21Pass expressions instead of argument ranges to EmitCall/EmitCXXConstructorCall.Alexey Samsonov1-31/+22
Summary: This is a first small step towards passing generic "Expr" instead of ArgBeg/ArgEnd pair into EmitCallArgs() family of methods. Having "Expr" will allow us to get the corresponding FunctionDecl and its ParmVarDecls, thus allowing us to alter CodeGen depending on the function/parameter attributes. No functionality change. Test Plan: regression test suite Reviewers: rnk Reviewed By: rnk Subscribers: aemerson, cfe-commits Differential Revision: http://reviews.llvm.org/D4915 llvm-svn: 216214
2014-08-01[modules] Remove IRGen special case for emitting implicit special members ifRichard Smith1-1/+3
they're somehow missing a body. Looks like this was left behind when the loop was generalized, and it's not been problematic before because without modules, a used, implicit special member function declaration must be a definition. This was resulting in us trying to emit a constructor declaration rather than a definition, and producing a constructor missing its member initializers. llvm-svn: 214473
2014-06-26Convert some function arguments to use ArrayRef.Craig Topper1-1/+1
llvm-svn: 211764
2014-05-30Start adding support for dllimport/dllexport on classes (PR11170)Hans Wennborg1-2/+2
This implements the central part of support for dllimport/dllexport on classes: allowing the attribute on class declarations, inheriting it to class members, and forcing emission of exported members. It's based on Nico Rieck's patch from http://reviews.llvm.org/D1099. This patch doesn't propagate dllexport to bases that are template specializations, which is an interesting problem. It also doesn't look at the rules when redeclaring classes with different attributes, I'd like to do that separately. Differential Revision: http://reviews.llvm.org/D3877 llvm-svn: 209908
2014-05-21[C++11] Use 'nullptr'. CodeGen edition.Craig Topper1-49/+49
llvm-svn: 209272
2014-03-17[C++11] Replacing CompoundStmt iterators body_begin() and body_end() with ↵Aaron Ballman1-5/+2
iterator_range body(). Updating all of the usages of the iterators with range-based for loops. llvm-svn: 204040
2014-03-13[C++11] Replacing CXXRecordDecl iterators vbases_begin() and vbases_end() ↵Aaron Ballman1-8/+3
with iterator_range vbases(). Updating all of the usages of the iterators with range-based for loops. llvm-svn: 203808
2014-03-13[C++11] Replacing CXXRecordDecl iterators bases_begin() and bases_end() with ↵Aaron Ballman1-14/+8
iterator_range bases(). Updating all of the usages of the iterators with range-based for loops. llvm-svn: 203803
2014-03-12[C++11] Add 'override' keyword to virtual methods that override their base ↵Craig Topper1-6/+6
class. llvm-svn: 203643
2014-03-08[C++11] Replacing RecordDecl iterators field_begin() and field_end() with ↵Aaron Ballman1-15/+5
iterator_range fields(). Updating all of the usages of the iterators with range-based for loops. llvm-svn: 203355
2014-03-07Renaming the chains() ranged iterator to chain() per suggestion by Richard ↵Aaron Ballman1-1/+1
Smith. llvm-svn: 203262
2014-03-07[C++11] Replacing IndirectFieldDecl iterators chain_begin() and chain_end() ↵Aaron Ballman1-4/+2
with iterator_range chains(). Updating all of the usages of the iterators with range-based for loops. llvm-svn: 203261
2014-03-07[C++11] Replacing BlockDecl iterators param_begin() and param_end() with ↵Aaron Ballman1-4/+2
iterator_range params(). Updating all of the usages of the iterators with range-based for loops. llvm-svn: 203250
2014-03-07[C++11] Replacing FunctionDecl iterators param_begin() and param_end() with ↵Aaron Ballman1-5/+3
iterator_range params(). Updating all of the usages of the iterators with range-based for loops. llvm-svn: 203248
2014-02-01[ms-cxxabi] Use inalloca on win32 when passing non-trivial C++ objectsReid Kleckner1-2/+1
When a non-trivial parameter is present, clang now gathers up all the parameters that lack inreg and puts them into a packed struct. MSVC always aligns each parameter to 4 bytes and no more, so this is a pretty simple struct to lay out. On win64, non-trivial records are passed indirectly. Prior to this change, clang was incorrectly using byval on win64. I'm able to self-host a working clang with this change and additional LLVM patches. Reviewers: rsmith Differential Revision: http://llvm-reviews.chandlerc.com/D2636 llvm-svn: 200597
2014-01-25Rename getResultType() on function and method declarations to getReturnType()Alp Toker1-1/+1
A return type is the declared or deduced part of the function type specified in the declaration. A result type is the (potentially adjusted) type of the value of an expression that calls the function. Rule of thumb: * Declarations have return types and parameters. * Expressions have result types and arguments. llvm-svn: 200082
2014-01-23CodeGen: Handle PGO counters for constructors and destructorsJustin Bogner1-0/+6
llvm-svn: 199864
2014-01-20Rename FunctionProtoType accessors from 'arguments' to 'parameters'Alp Toker1-3/+3
Fix a perennial source of confusion in the clang type system: Declarations and function prototypes have parameters to which arguments are supplied, so calling these 'arguments' was a stretch even in C mode, let alone C++ where default arguments, templates and overloading make the distinction important to get right. Readability win across the board, especially in the casting, ADL and overloading implementations which make a lot more sense at a glance now. Will keep an eye on the builders and update dependent projects shortly. No functional change. llvm-svn: 199686
2014-01-13[ms-abi] Always generate complete constructors in the Microsoft C++ ABIReid Kleckner1-0/+4
Fixes PR18435, where we generated a base ctor instead of a complete ctor, and so failed to construct virtual bases when constructing the complete object. llvm-svn: 199160
2014-01-07Sort all the #include lines with LLVM's utils/sort_includes.py whichChandler Carruth1-1/+1
encodes the canonical rules for LLVM's style. I noticed this had drifted quite a bit when cleaning up LLVM, so wanted to clean up Clang as well. llvm-svn: 198686
2013-12-18Fix comment-code function name mismatchHans Wennborg1-2/+2
llvm-svn: 197544
2013-12-17[ms-cxxabi] The 'most derived' ctor parameter usually comes lastReid Kleckner1-3/+26
Unlike Itanium's VTTs, the 'most derived' boolean or bitfield is the last parameter for non-variadic constructors, rather than the second. For variadic constructors, the 'most derived' parameter comes after the 'this' parameter. This affects constructor calls and constructor decls in a variety of places. Reviewers: timurrrr Differential Revision: http://llvm-reviews.chandlerc.com/D2405 llvm-svn: 197518
2013-12-13Move C++ destructor emission into CGCXXABIReid Kleckner1-17/+2
No functionality change. Only Itanium C++ destructors have implicit VTT parameters. llvm-svn: 197194
2013-12-04[ms-cxxabi] Construct and destroy call arguments in the correct orderReid Kleckner1-20/+5
Summary: MSVC destroys arguments in the callee from left to right. Because C++ objects have to be destroyed in the reverse order of construction, Clang has to construct arguments from right to left and destroy arguments from left to right. This patch fixes the ordering by reversing the order of evaluation of all call arguments under the MS C++ ABI. Fixes PR18035. Reviewers: rsmith Differential Revision: http://llvm-reviews.chandlerc.com/D2275 llvm-svn: 196402
2013-11-26Remove some unused localsAlp Toker1-1/+0
llvm-svn: 195714
2013-11-05C++1y sized deallocation: if we have a use, but not a definition, of a sizedRichard Smith1-1/+1
deallocation function (and the corresponding unsized deallocation function has been declared), emit a weak discardable definition of the function that forwards to the corresponding unsized deallocation. This allows a C++ standard library implementation to provide both a sized and an unsized deallocation function, where the unsized one does not just call the sized one, for instance by putting both in the same object file within an archive. llvm-svn: 194055
2013-10-30Add CodeGenABITypes.h for use in LLDB.Mark Lacey1-0/+1
CodeGenABITypes is a wrapper built on top of CodeGenModule that exposes some of the functionality of CodeGenTypes (held by CodeGenModule), specifically methods that determine the LLVM types appropriate for function argument and return values. I addition to CodeGenABITypes.h, CGFunctionInfo.h is introduced, and the definitions of ABIArgInfo, RequiredArgs, and CGFunctionInfo are moved into this new header from the private headers ABIInfo.h and CGCall.h. Exposing this functionality is one part of making it possible for LLDB to determine the actual ABI locations of function arguments and return values, making it possible for it to determine this for any supported target without hard-coding ABI knowledge in the LLDB code. llvm-svn: 193717
2013-10-16[-cxx-abi microsoft] Fix this argument/parameter offsets for virtual ↵Timur Iskhodzhanov1-3/+6
destructors in the presence of virtual bases Reviewed at http://llvm-reviews.chandlerc.com/D1939 llvm-svn: 192822
2013-10-09Initialize vtorDisp in class constructors and destructorsTimur Iskhodzhanov1-0/+3
Reviewed at http://llvm-reviews.chandlerc.com/D1867 llvm-svn: 192312
2013-10-02Thread a SourceLocation into the EmitCheck for "load_invalid_value". This occursNick Lewycky1-5/+7
when scalars are loaded / undergo lvalue-to-rvalue conversion. llvm-svn: 191808
2013-09-29Implement conversion to function pointer for generic lambdas without captures.Faisal Vali1-12/+21
The general strategy is to create template versions of the conversion function and static invoker and then during template argument deduction of the conversion function, create the corresponding call-operator and static invoker specializations, and when the conversion function is marked referenced generate the body of the conversion function using the corresponding static-invoker specialization. Similarly, Codegen does something similar - when asked to emit the IR for a specialized static invoker of a generic lambda, it forwards emission to the corresponding call operator. This patch has been reviewed in person both by Doug and Richard. Richard gave me the LGTM. A few minor changes: - per Richard's request i added a simple check to gracefully inform that captures (init, explicit or default) have not been added to generic lambdas just yet (instead of the assertion violation). - I removed a few lines of code that added the call operators instantiated parameters to the currentinstantiationscope. Not only did it not handle parameter packs, but it is more relevant in the patch for nested lambdas which will follow this one, and fix that problem more comprehensively. - Doug had commented that the original implementation strategy of using the TypeSourceInfo of the call operator to create the static-invoker was flawed and allowed const as a member qualifier to creep into the type of the static-invoker. I currently kludge around it - but after my initial discussion with Doug, with a follow up session with Richard, I have added a FIXME so that a more elegant solution that involves the use of TrivialTypeSourceInfo call followed by the correct wiring of the template parameters to the functionprototypeloc is forthcoming. Thanks! llvm-svn: 191634
2013-09-27Abstract out the emission of vtables, add basic support for vtable emission ↵Timur Iskhodzhanov1-27/+7
when using -cxx-abi microsoft Reviewed at http://llvm-reviews.chandlerc.com/D1532 llvm-svn: 191523
2013-09-11Disable the bool and enum sanitizers when emitting the implicitly-defined copyNick Lewycky1-8/+33
constructor, copy assignment operator and move assignment operator. llvm-svn: 190481
2013-08-25CodeGen: Unify two implementations of canDevirtualizeMemberFunctionCall.Benjamin Kramer1-44/+18
They were mostly copy&paste of each other, move it to CodeGenFunction. Of course the two implementations have diverged over time; the one in CGExprCXX seems to be the more modern one so I picked that one and moved it to CGClass which feels like a better home for it. No intended functionality change. llvm-svn: 189203
2013-08-21[CGF] Get rid of passing redundant VTable pointer around in ↵Timur Iskhodzhanov1-9/+4
CodeGenFunction::InitializeVTablePointer[s] llvm-svn: 188909
2013-08-21Abstract out virtual calls and virtual function prologue code generation; ↵Timur Iskhodzhanov1-1/+1
implement them for -cxx-abi microsoft llvm-svn: 188870
2013-08-07Eliminate CXXConstructorDecl::IsImplicitlyDefined.Jordan Rose1-3/+3
This field is just IsDefaulted && !IsDeleted; in all places it's used, a simple check for isDefaulted() is superior anyway, and we were forgetting to set it in a few cases. Also eliminate CXXDestructorDecl::IsImplicitlyDefined, for the same reasons. No intended functionality change. llvm-svn: 187891
2013-07-22[ms-cxxabi] Emit linkonce complete dtors in TUs that need themReid Kleckner1-3/+8
Based on Peter Collingbourne's destructor patches. Prior to this change, clang was considering ?1 to be the complete destructor and the base destructor, which was wrong. This lead to crashes when clang tried to emit two LLVM functions with the same name. In this ABI, TUs with non-inline dtors might not emit a complete destructor. They are emitted as inline thunks in TUs that need them, and they always delegate to the base dtors of the complete class and its virtual bases. This change uses the DeferredDecls machinery to emit complete dtors as needed. Currently in clang try body destructors can catch exceptions thrown by virtual base destructors. In the Microsoft C++ ABI, clang may not have the destructor definition, in which case clang won't wrap the virtual virtual base destructor calls in a try-catch. Diagnosing this in user code is TODO. Finally, for classes that don't use virtual inheritance, MSVC always calls the base destructor (?1) directly. This is a useful code size optimization that avoids emitting lots of extra thunks or aliases. Implementing it also means our existing tests continue to pass, and is consistent with MSVC's output. We can do the same for Itanium by tweaking GetAddrOfCXXDestructor, but it will require further testing. Reviewers: rjmccall CC: cfe-commits Differential Revision: http://llvm-reviews.chandlerc.com/D1066 llvm-svn: 186828
2013-07-13PR16214, PR14467: DebugInfo: use "RequireCompleteType" to decide when to ↵David Blaikie1-11/+0
emit the full definition of a type in -flimit-debug-info This simplifies the core benefit of -flimit-debug-info by taking a more systematic approach to avoid emitting debug info definitions for types that only require declarations. The previous ad-hoc approach (3 cases removed in this patch) had many holes. The general approach (adding a bit to TagDecl and callback through ASTConsumer) has been discussed with Richard Smith - though always open to revision. llvm-svn: 186262
2013-06-30Restore r184205 and associated commits (after commit of r185290)Stephen Lin1-11/+2
This allows clang to use the backend parameter attribute 'returned' when generating 'this'-returning constructors and destructors in ARM and MSVC C++ ABIs. llvm-svn: 185291
2013-06-28[ms-cxxabi] Move CodeGenVTables::needsVTTParameter to ItaniumCXXABI.Peter Collingbourne1-7/+8
This function only makes sense there. Eventually it should no longer be part of the CGCXXABI interface, as it is an Itanium-specific detail. Differential Revision: http://llvm-reviews.chandlerc.com/D821 llvm-svn: 185213
2013-06-19Revert r184205 and associated patches while investigating issue with broken ↵Stephen Lin1-2/+11
buildbot (possible interaction with LTO) <rdar://problem/14209661> llvm-svn: 184384
2013-06-19Corrections to r184205 ('this'-return optimization) due to the wrong version ↵Stephen Lin1-3/+2
of the patch being committed originally. 1) Removed useless return value of CGCXXABI::EmitConstructorCall and CGCXXABI::EmitVirtualDestructorCall and implementations 2) Corrected last portion of CodeGenCXX/constructor-destructor-return-this to correctly test for non-'this'-return of virtual destructor calls llvm-svn: 184330