diff options
| author | Aaron Ballman <aaron@aaronballman.com> | 2016-10-04 14:48:05 +0000 |
|---|---|---|
| committer | Aaron Ballman <aaron@aaronballman.com> | 2016-10-04 14:48:05 +0000 |
| commit | fdaabf1ca7bc95c2de6c0b834c03629a287bcb3a (patch) | |
| tree | 75af0a1138919bc1f75acf5eeaefb6e0de4524b5 /clang-tools-extra/clang-tidy/utils | |
| parent | 92589990bae53c00179b772fd500ef6679455c90 (diff) | |
| download | bcm5719-llvm-fdaabf1ca7bc95c2de6c0b834c03629a287bcb3a.tar.gz bcm5719-llvm-fdaabf1ca7bc95c2de6c0b834c03629a287bcb3a.zip | |
Fix some false-positives with cppcoreguidelines-pro-type-member-init. Handle classes with default constructors that are defaulted or are not present in the AST.
Classes with virtual methods or virtual bases are not trivially default constructible, so their members and bases need to be initialized.
Patch by Malcolm Parsons.
llvm-svn: 283224
Diffstat (limited to 'clang-tools-extra/clang-tidy/utils')
| -rw-r--r-- | clang-tools-extra/clang-tidy/utils/TypeTraits.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp b/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp index a0e40fe7954..03b05d19632 100644 --- a/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp +++ b/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp @@ -58,6 +58,9 @@ bool recordIsTriviallyDefaultConstructible(const RecordDecl &RecordDecl, // constructible. if (ClassDecl->hasUserProvidedDefaultConstructor()) return false; + // A polymorphic class is not trivially constructible + if (ClassDecl->isPolymorphic()) + return false; // A class is trivially constructible if it has a trivial default constructor. if (ClassDecl->hasTrivialDefaultConstructor()) return true; @@ -73,6 +76,8 @@ bool recordIsTriviallyDefaultConstructible(const RecordDecl &RecordDecl, for (const CXXBaseSpecifier &Base : ClassDecl->bases()) { if (!isTriviallyDefaultConstructible(Base.getType(), Context)) return false; + if (Base.isVirtual()) + return false; } return true; |

