13cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania/* 23cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * Copyright (C) 2009 The Android Open Source Project 33cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * All rights reserved. 43cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * 53cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * Redistribution and use in source and binary forms, with or without 63cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * modification, are permitted provided that the following conditions 73cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * are met: 83cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * * Redistributions of source code must retain the above copyright 93cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * notice, this list of conditions and the following disclaimer. 103cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * * Redistributions in binary form must reproduce the above copyright 113cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * notice, this list of conditions and the following disclaimer in 123cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * the documentation and/or other materials provided with the 133cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * distribution. 143cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * 153cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 163cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 173cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 183cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 193cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 203cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 213cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 223cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 233cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 243cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 253cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 263cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania * SUCH DAMAGE. 273cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania */ 283cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania 293cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania#include <cstddef> 30b381ead492251a797d2df4b260cb01eb1f64cfadDavid 'Digit' Turner#if defined BIONIC && !defined BIONIC_LIBSTDCPP_INCLUDE_CSTDDEF__ 311aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "Wrong header file included!!" 321aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif 331aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania 343cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania 353cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catanianamespace { 363cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Cataniaconst int kPassed = 0; 373cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Cataniaconst int kFailed = 1; 383cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania#define FAIL_UNLESS(f) if (!android::f()) return kFailed; 393cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania} // anonymous namespace 403cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania 413cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catanianamespace android { 423cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania// Dummy struct used to calculate offset of some of its fields. 433cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Cataniastruct Foo 443cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania{ 453cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania char field1; 463cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania char field2; 473cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania}; 483cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania 493cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania// Check various types are declared in the std namespace. 503cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Cataniabool testTypesStd() 513cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania{ 523cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania // size_t should be defined in both namespaces 533cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania volatile ::size_t size_t_in_top_ns = 0; 543cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania volatile ::std::size_t size_t_in_std_ns = 0; 553cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania 563cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania if (sizeof(::size_t) != sizeof(::std::size_t)) 573cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania { 583cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania return false; 593cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania } 603cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania 613cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania // ptrdiff_t should be defined in both namespaces 623cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania volatile ::ptrdiff_t ptrdiff_t_in_top_ns = 0; 633cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania volatile ::std::ptrdiff_t ptrdiff_t_in_std_ns = 0; 643cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania 653cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania if (sizeof(::ptrdiff_t) != sizeof(::std::ptrdiff_t)) 663cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania { 673cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania return false; 683cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania } 693cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania // NULL is only in the top namespace 703cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania volatile int *null_is_defined = NULL; 713cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania return true; 723cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania} 733cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania 743cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Cataniabool testOffsetOf() 753cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania{ 763cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania#ifndef offsetof 773cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania#error "offsetof is not a macro" 783cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania#endif 793cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania 803cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania // offsetof is only in the top namespace 813cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania volatile size_t offset = offsetof(struct Foo, field2); 823cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania return offset == 1; 833cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania} 843cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania 853cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Cataniabool testNull() 863cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania{ 873cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania#ifndef NULL 883cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania#error "NULL is not a macro" 893cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania#endif 903cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania // If NULL is void* this will issue a warning. 913cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania volatile int null_is_not_void_star = NULL; 923cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania return true; 933cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania} 943cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania 953cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania} // android namespace 963cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania 973cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Cataniaint main(int argc, char **argv) 983cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania{ 993cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania FAIL_UNLESS(testTypesStd); 1003cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania FAIL_UNLESS(testOffsetOf); 1013cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania FAIL_UNLESS(testNull); 1023cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania return kPassed; 1033cb2639f22f8aaf46852c9f03e825e05fc7e7362Niko Catania} 104