diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-09-30 22:41:36 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-09-30 22:41:36 +0000 |
commit | 591390284f70b14fbd2f017c50c08785de170c61 (patch) | |
tree | e553f8935d8a96e8b8af200d602219ec960839b9 /clang/lib/Frontend/InitPreprocessor.cpp | |
parent | 7d5773e6108d92a8b259e9d4d58ecf1027d06a4f (diff) | |
download | bcm5719-llvm-591390284f70b14fbd2f017c50c08785de170c61.tar.gz bcm5719-llvm-591390284f70b14fbd2f017c50c08785de170c61.zip |
P0035R4: add predefined __STDCPP_DEFAULT_NEW_ALIGNMENT__ macro. By default, we
assume that ::operator new provides no more alignment than is necessary for any
primitive type, except when we're on a GNU OS, where glibc's malloc guarantees
to provide 64-bit alignment on 32-bit systems and 128-bit alignment on 64-bit
systems. This can be controlled by the command-line -fnew-alignment flag.
llvm-svn: 282974
Diffstat (limited to 'clang/lib/Frontend/InitPreprocessor.cpp')
-rw-r--r-- | clang/lib/Frontend/InitPreprocessor.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp index 7d15e4cd589..d7dccb1340b 100644 --- a/clang/lib/Frontend/InitPreprocessor.cpp +++ b/clang/lib/Frontend/InitPreprocessor.cpp @@ -392,6 +392,15 @@ static void InitializeStandardPredefinedMacros(const TargetInfo &TI, // C++ translation unit. else Builder.defineMacro("__cplusplus", "199711L"); + + // C++1z [cpp.predefined]p1: + // An integer literal of type std::size_t whose value is the alignment + // guaranteed by a call to operator new(std::size_t) + // + // We provide this in all language modes, since it seems generally useful. + Builder.defineMacro("__STDCPP_DEFAULT_NEW_ALIGNMENT__", + Twine(TI.getNewAlign() / TI.getCharWidth()) + + TI.getTypeConstantSuffix(TI.getSizeType())); } // In C11 these are environment macros. In C++11 they are only defined |