clang API Documentation

Functions
CastSizeChecker.cpp File Reference
#include "ClangSACheckers.h"
#include "clang/AST/CharUnits.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
#include "clang/StaticAnalyzer/Core/Checker.h"
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
Include dependency graph for CastSizeChecker.cpp:

Go to the source code of this file.

Functions

static bool evenFlexibleArraySize (ASTContext &Ctx, CharUnits RegionSize, CharUnits TypeSize, QualType ToPointeeTy)

Function Documentation

static bool evenFlexibleArraySize ( ASTContext Ctx,
CharUnits  RegionSize,
CharUnits  TypeSize,
QualType  ToPointeeTy 
) [static]

Check if we are casting to a struct with a flexible array at the end.

 struct foo {
   size_t len;
   struct bar data[];
 };

or

 struct foo {
   size_t len;
   struct bar data[0];
 }

In these cases it is also valid to allocate size of struct foo + a multiple of struct bar.

Definition at line 49 of file CastSizeChecker.cpp.

References clang::Type::getArrayElementTypeNoTypeQual(), clang::Type::getAs(), clang::ASTContext::getAsConstantArrayType(), clang::RecordType::getDecl(), clang::ASTContext::getTypeSizeInChars(), clang::RecordDecl::hasFlexibleArrayMember(), clang::CharUnits::isNegative(), clang::CharUnits::isZero(), and clang::LangAS::Last.