forked from OSchip/llvm-project
[clang-tidy] cppcoreguidelines-slicing: display discarded state size in bytes
https://reviews.llvm.org/D27212 llvm-svn: 290340
This commit is contained in:
parent
f6aeed3624
commit
4d260bf0c7
|
@ -122,10 +122,11 @@ void SlicingCheck::check(const MatchFinder::MatchResult &Result) {
|
|||
BaseDecl->getASTContext().getASTRecordLayout(BaseDecl);
|
||||
const auto &DerivedLayout =
|
||||
DerivedDecl->getASTContext().getASTRecordLayout(DerivedDecl);
|
||||
const auto StateSize = DerivedLayout.getDataSize() - BaseLayout.getDataSize();
|
||||
const CharUnits StateSize =
|
||||
DerivedLayout.getDataSize() - BaseLayout.getDataSize();
|
||||
if (StateSize.isPositive()) {
|
||||
diag(Call->getExprLoc(), "slicing object from type %0 to %1 discards "
|
||||
"%2*sizeof(char) bytes of state")
|
||||
"%2 bytes of state")
|
||||
<< DerivedDecl << BaseDecl << static_cast<int>(StateSize.getQuantity());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,18 +31,18 @@ DerivedWithMemberVariables ReturnsDerived();
|
|||
void positivesWithMemberVariables() {
|
||||
DerivedWithMemberVariables b;
|
||||
Base a{b};
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: slicing object from type 'DerivedWithMemberVariables' to 'Base' discards {{[0-9]*}}*sizeof(char) bytes of state [cppcoreguidelines-slicing]
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: slicing object from type 'DerivedWithMemberVariables' to 'Base' discards {{[0-9]*}} bytes of state [cppcoreguidelines-slicing]
|
||||
a = b;
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: slicing object from type 'DerivedWithMemberVariables' to 'Base' discards {{[0-9]*}}*sizeof(char) bytes of state
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: slicing object from type 'DerivedWithMemberVariables' to 'Base' discards {{[0-9]*}} bytes of state
|
||||
TakesBaseByValue(b);
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: slicing object from type 'DerivedWithMemberVariables' to 'Base' discards {{[0-9]*}}*sizeof(char) bytes of state
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: slicing object from type 'DerivedWithMemberVariables' to 'Base' discards {{[0-9]*}} bytes of state
|
||||
|
||||
TwiceDerivedWithNoMemberVariables c;
|
||||
a = c;
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: slicing object from type 'TwiceDerivedWithNoMemberVariables' to 'Base' discards {{[0-9]*}}*sizeof(char) bytes of state
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: slicing object from type 'TwiceDerivedWithNoMemberVariables' to 'Base' discards {{[0-9]*}} bytes of state
|
||||
|
||||
a = ReturnsDerived();
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: slicing object from type 'DerivedWithMemberVariables' to 'Base' discards {{[0-9]*}}*sizeof(char) bytes of state
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: slicing object from type 'DerivedWithMemberVariables' to 'Base' discards {{[0-9]*}} bytes of state
|
||||
}
|
||||
|
||||
void positivesWithOverride() {
|
||||
|
|
Loading…
Reference in New Issue