aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/AST/CXXInheritance.cpp
AgeCommit message (Collapse)AuthorFilesLines
2017-05-18[index] Avoid one more crash caused by infinite recursion that happens whenAlex Lorenz1-2/+10
looking up a dependent name in a record that derives from itself rdar://32273000 Differential Revision: https://reviews.llvm.org/D33324 llvm-svn: 303366
2017-05-16[index] Avoid another crash that happens when looking up a dependent nameAlex Lorenz1-0/+2
in a record that has a base without a definition rdar://32224197 llvm-svn: 303192
2017-05-10[index] Index simple dependent declaration referencesAlex Lorenz1-18/+94
This commit implements basic support for indexing of dependent declaration references. Now the indexer tries to find a suitable match in the base template for a dependent member ref/decl ref/dependent type. rdar://29158210 Differential Revision: https://reviews.llvm.org/D32972 llvm-svn: 302632
2017-01-13Remove unused lambda captures. NFCMalcolm Parsons1-2/+2
llvm-svn: 291939
2016-07-18[NFC] Header cleanupMehdi Amini1-1/+0
Summary: Removed unused headers, replaced some headers with forward class declarations Patch by: Eugene <claprix@yandex.ru> Differential Revision: https://reviews.llvm.org/D20100 llvm-svn: 275882
2016-05-19Fix PR27601 by reverting [r267453] - Refactor traversal of bases in ↵Faisal Vali1-9/+6
deduction of template parameters from base This reversal is being done with r267453's author's (i.e. Richard Smith's) permission. This fixes https://llvm.org/bugs/show_bug.cgi?id=27601 Also, per Richard's request the examples from the bug report have been added to our test suite. llvm-svn: 270016
2016-04-25Refactor traversal of bases in deduction of template parameters from baseRichard Smith1-6/+9
classes of an argument to use CXXRecordDecl::forallBases. Fix forallBases to only visit each base class once. llvm-svn: 267453
2016-03-03[OPENMP 4.0] Initial support for 'omp declare reduction' construct.Alexey Bataev1-0/+15
Add parsing, sema analysis and serialization/deserialization for 'declare reduction' construct. User-defined reductions are defined as #pragma omp declare reduction( reduction-identifier : typename-list : combiner ) [initializer ( initializer-expr )] These custom reductions may be used in 'reduction' clauses of OpenMP constructs. The combiner specifies how partial results can be combined into a single value. The combiner can use the special variable identifiers omp_in and omp_out that are of the type of the variables being reduced with this reduction-identifier. Each of them will denote one of the values to be combined before executing the combiner. It is assumed that the special omp_out identifier will refer to the storage that holds the resulting combined value after executing the combiner. As the initializer-expr value of a user-defined reduction is not known a priori the initializer-clause can be used to specify one. Then the contents of the initializer-clause will be used as the initializer for private copies of reduction list items where the omp_priv identifier will refer to the storage to be initialized. The special identifier omp_orig can also appear in the initializer-clause and it will refer to the storage of the original variable to be reduced. Differential Revision: http://reviews.llvm.org/D11182 llvm-svn: 262582
2015-08-18unique_ptrify CXXBasePaths::DeclsFound & remove the then-unnecessary ↵David Blaikie1-4/+4
user-defined dtor Maybe this and the NumDeclsFound member should just be a std::vector instead. (it could be a std::dynarray, but that missed standardization) llvm-svn: 245392
2015-07-25Capture 'this' so GCC 4.7 can find a static members.Benjamin Kramer1-4/+6
llvm-svn: 243218
2015-07-25[AST] Turn the callbacks of lookupInBases and forallBases into a function_refBenjamin Kramer1-37/+34
This lets us pass functors (and lambdas) without void * tricks. On the downside we can't pass CXXRecordDecl's Find* members (which are now type safe) to lookupInBases directly, but a lambda trampoline is a small price to pay. No functionality change intended. llvm-svn: 243217
2015-06-22Revert r240270 ("Fixed/added namespace ending comments using clang-tidy").Alexander Kornienko1-1/+1
llvm-svn: 240353
2015-06-22Fixed/added namespace ending comments using clang-tidy. NFCAlexander Kornienko1-1/+1
The patch is generated using this command: $ tools/extra/clang-tidy/tool/run-clang-tidy.py -fix \ -checks=-*,llvm-namespace-comment -header-filter='llvm/.*|clang/.*' \ work/llvm/tools/clang To reduce churn, not touching namespaces spanning less than 10 lines. llvm-svn: 240270
2015-02-11CXXInheritance: Modernize removal of hidden virtual base class decls.Benjamin Kramer1-76/+42
NFC. llvm-svn: 228864
2015-02-06Update APIs that return a pair of iterators to return an iterator_range instead.Benjamin Kramer1-12/+8
Convert uses of those APIs into ranged for loops. NFC. llvm-svn: 228404
2014-05-12[C++11] Use 'nullptr'. AST edition.Craig Topper1-6/+6
llvm-svn: 208517
2014-03-14[C++11] Removing the found_decls_begin() and found_decls_end() APIs and ↵Aaron Ballman1-7/+3
replacing with a range-only found_decls() API. llvm-svn: 203975
2014-03-13[C++11] Replacing CXXRecordDecl iterators method_begin() and method_end() ↵Aaron Ballman1-4/+1
with iterator_range methods(). Updating all of the usages of the iterators with range-based for loops. llvm-svn: 203812
2014-03-13[C++11] Replacing CXXRecordDecl iterators bases_begin() and bases_end() with ↵Aaron Ballman1-30/+23
iterator_range bases(). Updating all of the usages of the iterators with range-based for loops. llvm-svn: 203803
2013-08-23Use pop_back_val() instead of both back() and pop_back().Robert Wilhelm1-3/+3
No functionality change intended. llvm-svn: 189112
2013-07-04Use SmallVectorImpl instead of SmallVector for iterators and references to ↵Craig Topper1-4/+4
avoid specifying the vector size unnecessarily. llvm-svn: 185610
2013-01-15Fix CastDavid Greene1-1/+2
Avoid a cast-away-const error by properly using const_cast<>. llvm-svn: 172558
2012-12-19Change DeclContextLookup(Const)Result to (Mutable)ArrayRef<NamedDecl*>, as ↵David Blaikie1-11/+11
per review discussion in r170365 This does limit these typedefs to being sequences, but no current usage requires them to be contiguous (we could expand this to a more general iterator pair range concept at some point). Also, it'd be nice if SmallVector were constructible directly from an ArrayRef but this is a bit tricky since ArrayRef depends on SmallVectorBaseImpl for the inverse conversion. (& generalizing over all range-like things, while nice, would require some nontrivial SFINAE I haven't thought about yet) llvm-svn: 170482
2012-12-04Sort all of Clang's files under 'lib', and fix up the broken headersChandler Carruth1-1/+1
uncovered. This required manually correcting all of the incorrect main-module headers I could find, and running the new llvm/utils/sort_includes.py script over the files. I also manually added quite a few missing headers that were uncovered by shuffling the order or moving headers up to be main-module-headers. llvm-svn: 169237
2012-11-22Fix CXXRecordDecl::forallBases to not look through bases which are dependentRichard Smith1-2/+14
and defined within the current instantiation, but which are not part of the current instantiation. Previously, it would look at bases which could be specialized separately from the current template. llvm-svn: 168477
2012-11-10Rework my implementation of circular-reference finding to not useDouglas Gregor1-5/+5
CXXRecordDecl::forallBases, which does *not* do what I need. Fixes the failure introduced in r167651. llvm-svn: 167668
2012-11-10Diagnostic circular inheritance involving dependent base classes. WeDouglas Gregor1-5/+5
would have diagnosed this at instantiation time anyway, if only we didn't hang on all of these test cases. Fixes <rdar://problem/12629723> llvm-svn: 167651
2012-09-12Convert a few more getAs cases to castAs where we immediately call a member ↵Ted Kremenek1-2/+2
function. llvm-svn: 163684
2012-09-11Switch a SmallPtrSet/SmallVector pair over to SetVector.Douglas Gregor1-4/+3
llvm-svn: 163600
2012-08-23Change a bunch of cases where we do "getAs<...>->doSomething()" toTed Kremenek1-8/+11
"castAs<...>->doSomething()". The analyzer was flagging these as potential null dereferences, which is technically true. The invariants appear to be that these casts should never fail, so let's use castAs<> instead and avoid a runtime check. llvm-svn: 162468
2012-08-23array_pod_sort on the addresses of declaration pointers leads toDouglas Gregor1-5/+3
inconsistent ordering of results; instead, use use SmallPtrSet to eliminate duplicates. llvm-svn: 162429
2012-08-08Constify CXXRecordDecl::isVirtuallyDerivedFrom.Jordan Rose1-4/+8
No functionality change. A couple ugly const_casts because the ancestor search code is used for other purposes as well. llvm-svn: 161509
2012-07-04Remove get(V)BaseClassOffsetInBits, the CharUnit functions should be used ↵Benjamin Kramer1-0/+1
instead. No functionality change. llvm-svn: 159719
2012-05-27PR12962: Fix a rare use after free when collecting virtual overrides.Benjamin Kramer1-2/+7
The DenseMap reallocates after 64 insertions so this only happened in large test cases under very specific circumstances. llvm-svn: 157549
2012-02-23Actually remove the duplicated elements from the vector.Benjamin Kramer1-1/+1
llvm-svn: 151270
2012-02-23Unique CXXBasePath decls with the SmallVector/pod_sort/std::unique idiom ↵Benjamin Kramer1-6/+9
instead of employing a wasteful std::set. llvm-svn: 151255
2011-07-23remove unneeded llvm:: namespace qualifiers on some core types now that ↵Chris Lattner1-6/+6
LLVM.h imports them into the clang namespace. llvm-svn: 135852
2011-04-15Support for C++11 (non-template) alias declarations.Richard Smith1-1/+1
llvm-svn: 129567
2011-01-28Fix some corner cases in the __is_base_of logic.John McCall1-3/+6
llvm-svn: 124505
2010-11-24Rename RecordLayout::getPrimaryBaseWasVirtual to isPrimaryBaseVirtual.Anders Carlsson1-1/+1
llvm-svn: 120133
2010-11-24Fix typo.Anders Carlsson1-2/+2
llvm-svn: 120130
2010-11-24Add CXXRecordDecl::getIndirectPrimaryBases.Anders Carlsson1-0/+48
llvm-svn: 120129
2010-06-04Add a short circuit in isVirtuallyDerivedFrom.Anders Carlsson1-0/+3
llvm-svn: 105457
2010-06-03Add all final overriders to the map.Anders Carlsson1-14/+21
llvm-svn: 105374
2010-05-21Use CanQualType to enforce the use of a canonical type argument toDouglas Gregor1-3/+2
CXXBasePaths::isAmbiguous(), rather than just asserting that we have a canonical type. Fixes PR7176. llvm-svn: 104374
2010-03-23Implement computation of the final overriders for each virtualDouglas Gregor1-0/+237
function within a class hierarchy (C++ [class.virtual]p2). We use the final-overrider computation to determine when a particular class is ill-formed because it has multiple final overriders for a given virtual function (e.g., because two virtual functions override the same virtual function in the same virtual base class). Fixes PR5973. We also use the final-overrider computation to determine which virtual member functions are pure when determining whether a class is abstract or diagnosing the improper use of an abstract class. The prior approach to determining whether there were any pure virtual functions in a class didn't cope with virtual base class subobjects properly, and could not easily be fixed to deal with the oddities of subobject hiding. Fixes PR6631. llvm-svn: 99351
2010-03-03Implement name hiding for names found through virtual base subobjectsDouglas Gregor1-1/+83
that are hidden by other derived base subobjects reached along a lookup path that does *not* pass through the hiding subobject (C++ [class.member.lookup]p6). Fixes PR6462. llvm-svn: 97640
2010-03-03Refactor CXXRecordDecl::lookupInBases() to push the recursion down aDouglas Gregor1-27/+35
level. No functionality change, and it obeys access control this time. llvm-svn: 97634
2010-03-03Revert r97618. Access control sucksDouglas Gregor1-18/+9
llvm-svn: 97621
2010-03-03Factor out the recursive lookup into C++ base classes into a separate,Douglas Gregor1-9/+18
static function. No functionality change. llvm-svn: 97618