Adds configure flags for msan and ubsan builds to make it easier to enable. These also encode the detail that address sanitizer and memory sanitizer should disable pymalloc. Define MEMORY_SANITIZER when appropriate at build time and adds workarounds to existing code to mark things as initialized where the sanitizer is otherwise unable to determine that. This lets our build succeed under the memory sanitizer. not all tests pass without sanitizer failures yet but we're in pretty good shape after this.
150 lines
3.2 KiB
C
150 lines
3.2 KiB
C
#ifndef Py_PYTHON_H
|
|
#define Py_PYTHON_H
|
|
/* Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" { */
|
|
|
|
/* Include nearly all Python header files */
|
|
|
|
#include "patchlevel.h"
|
|
#include "pyconfig.h"
|
|
#include "pymacconfig.h"
|
|
|
|
#include <limits.h>
|
|
|
|
#ifndef UCHAR_MAX
|
|
#error "Something's broken. UCHAR_MAX should be defined in limits.h."
|
|
#endif
|
|
|
|
#if UCHAR_MAX != 255
|
|
#error "Python's source code assumes C's unsigned char is an 8-bit type."
|
|
#endif
|
|
|
|
#if defined(__sgi) && !defined(_SGI_MP_SOURCE)
|
|
#define _SGI_MP_SOURCE
|
|
#endif
|
|
|
|
#include <stdio.h>
|
|
#ifndef NULL
|
|
# error "Python.h requires that stdio.h define NULL."
|
|
#endif
|
|
|
|
#include <string.h>
|
|
#ifdef HAVE_ERRNO_H
|
|
#include <errno.h>
|
|
#endif
|
|
#include <stdlib.h>
|
|
#ifndef MS_WINDOWS
|
|
#include <unistd.h>
|
|
#endif
|
|
#ifdef HAVE_CRYPT_H
|
|
#include <crypt.h>
|
|
#endif
|
|
|
|
/* For size_t? */
|
|
#ifdef HAVE_STDDEF_H
|
|
#include <stddef.h>
|
|
#endif
|
|
|
|
/* CAUTION: Build setups should ensure that NDEBUG is defined on the
|
|
* compiler command line when building Python in release mode; else
|
|
* assert() calls won't be removed.
|
|
*/
|
|
#include <assert.h>
|
|
|
|
#include "pyport.h"
|
|
#include "pymacro.h"
|
|
|
|
/* A convenient way for code to know if clang's memory sanitizer is enabled. */
|
|
#if defined(__has_feature)
|
|
# if __has_feature(memory_sanitizer)
|
|
# if !defined(MEMORY_SANITIZER)
|
|
# define MEMORY_SANITIZER
|
|
# endif
|
|
# endif
|
|
#endif
|
|
|
|
/* Debug-mode build with pymalloc implies PYMALLOC_DEBUG.
|
|
* PYMALLOC_DEBUG is in error if pymalloc is not in use.
|
|
*/
|
|
#if defined(Py_DEBUG) && defined(WITH_PYMALLOC) && !defined(PYMALLOC_DEBUG)
|
|
#define PYMALLOC_DEBUG
|
|
#endif
|
|
#if defined(PYMALLOC_DEBUG) && !defined(WITH_PYMALLOC)
|
|
#error "PYMALLOC_DEBUG requires WITH_PYMALLOC"
|
|
#endif
|
|
#include "pymath.h"
|
|
#include "pytime.h"
|
|
#include "pymem.h"
|
|
|
|
#include "object.h"
|
|
#include "objimpl.h"
|
|
#include "typeslots.h"
|
|
#include "pyhash.h"
|
|
|
|
#include "pydebug.h"
|
|
|
|
#include "bytearrayobject.h"
|
|
#include "bytesobject.h"
|
|
#include "unicodeobject.h"
|
|
#include "longobject.h"
|
|
#include "longintrepr.h"
|
|
#include "boolobject.h"
|
|
#include "floatobject.h"
|
|
#include "complexobject.h"
|
|
#include "rangeobject.h"
|
|
#include "memoryobject.h"
|
|
#include "tupleobject.h"
|
|
#include "listobject.h"
|
|
#include "dictobject.h"
|
|
#include "odictobject.h"
|
|
#include "enumobject.h"
|
|
#include "setobject.h"
|
|
#include "methodobject.h"
|
|
#include "moduleobject.h"
|
|
#include "funcobject.h"
|
|
#include "classobject.h"
|
|
#include "fileobject.h"
|
|
#include "pycapsule.h"
|
|
#include "traceback.h"
|
|
#include "sliceobject.h"
|
|
#include "cellobject.h"
|
|
#include "iterobject.h"
|
|
#include "genobject.h"
|
|
#include "descrobject.h"
|
|
#include "warnings.h"
|
|
#include "weakrefobject.h"
|
|
#include "structseq.h"
|
|
#include "namespaceobject.h"
|
|
|
|
#include "codecs.h"
|
|
#include "pyerrors.h"
|
|
|
|
#include "coreconfig.h"
|
|
#include "pystate.h"
|
|
#include "context.h"
|
|
|
|
#include "pyarena.h"
|
|
#include "modsupport.h"
|
|
#include "compile.h"
|
|
#include "pythonrun.h"
|
|
#include "pylifecycle.h"
|
|
#include "ceval.h"
|
|
#include "sysmodule.h"
|
|
#include "osmodule.h"
|
|
#include "intrcheck.h"
|
|
#include "import.h"
|
|
|
|
#include "abstract.h"
|
|
#include "bltinmodule.h"
|
|
|
|
#include "eval.h"
|
|
|
|
#include "pyctype.h"
|
|
#include "pystrtod.h"
|
|
#include "pystrcmp.h"
|
|
#include "dtoa.h"
|
|
#include "fileutils.h"
|
|
#include "pyfpe.h"
|
|
#include "tracemalloc.h"
|
|
|
|
#endif /* !Py_PYTHON_H */
|