a.elovikov created this revision. a.elovikov added reviewers: Szelethus, erichkeane.
See also http://lists.llvm.org/pipermail/cfe-users/2016-January/000854.html for the reasons why it's bad. https://reviews.llvm.org/D50963 Files: clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp Index: clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp =================================================================== --- clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp +++ clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp @@ -215,12 +215,10 @@ llvm_unreachable("All cases are handled!"); } - // Temporary variable to avoid warning from -Wunused-function. - bool IsPrimitive = isPrimitiveType(DynT->getPointeeType()); - assert((IsPrimitive || DynT->isAnyPointerType() || DynT->isReferenceType()) && + assert((isPrimitiveType(DynT->getPointeeType()) || DynT->isAnyPointerType() || + DynT->isReferenceType()) && "At this point FR must either have a primitive dynamic type, or it " "must be a null, undefined, unknown or concrete pointer!"); - (void)IsPrimitive; if (isPrimitiveUninit(DerefdV)) { if (NeedsCastBack) Index: clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h =================================================================== --- clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h +++ clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h @@ -233,7 +233,7 @@ /// value is undefined or not, such as ints and doubles, can be analyzed with /// ease. This also helps ensuring that every special field type is handled /// correctly. -static bool isPrimitiveType(const QualType &T) { +inline bool isPrimitiveType(const QualType &T) { return T->isBuiltinType() || T->isEnumeralType() || T->isMemberPointerType(); }
Index: clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp =================================================================== --- clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp +++ clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp @@ -215,12 +215,10 @@ llvm_unreachable("All cases are handled!"); } - // Temporary variable to avoid warning from -Wunused-function. - bool IsPrimitive = isPrimitiveType(DynT->getPointeeType()); - assert((IsPrimitive || DynT->isAnyPointerType() || DynT->isReferenceType()) && + assert((isPrimitiveType(DynT->getPointeeType()) || DynT->isAnyPointerType() || + DynT->isReferenceType()) && "At this point FR must either have a primitive dynamic type, or it " "must be a null, undefined, unknown or concrete pointer!"); - (void)IsPrimitive; if (isPrimitiveUninit(DerefdV)) { if (NeedsCastBack) Index: clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h =================================================================== --- clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h +++ clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h @@ -233,7 +233,7 @@ /// value is undefined or not, such as ints and doubles, can be analyzed with /// ease. This also helps ensuring that every special field type is handled /// correctly. -static bool isPrimitiveType(const QualType &T) { +inline bool isPrimitiveType(const QualType &T) { return T->isBuiltinType() || T->isEnumeralType() || T->isMemberPointerType(); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits