// { dg-options "-g -O0" } // { dg-do run } // { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // Copyright (C) 2014-2019 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the // Free Software Foundation; either version 3, or (at your option) // any later version. // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License along // with this library; see the file COPYING3. If not see // . // Test that current printers still support old definitions of types. namespace std { template struct tuple { T _M_head_impl; }; template struct default_delete { }; template> struct unique_ptr { unique_ptr(T* p) { _M_t._M_head_impl = p; } tuple _M_t; }; // Old representation of std::optional, before GCC 9 template struct _Optional_payload { _Optional_payload() : _M_empty(), _M_engaged(false) { } struct _Empty_byte { }; union { _Empty_byte _M_empty; T _M_payload; }; bool _M_engaged; }; template struct _Optional_base { _Optional_payload _M_payload; }; template struct optional : _Optional_base { optional() { } optional(T t) { this->_M_payload._M_payload = t; this->_M_payload._M_engaged = true; } }; } // namespace std int main() { struct datum { }; std::unique_ptr uptr (new datum); // { dg-final { regexp-test uptr {std::unique_ptr.datum. = {get\(\) = 0x.*}} } } std::unique_ptr &ruptr = uptr; // { dg-final { regexp-test ruptr {std::unique_ptr.datum. = {get\(\) = 0x.*}} } } using std::optional; optional o; // { dg-final { note-test o {std::optional [no contained value]} } } optional ob{false}; // { dg-final { note-test ob {std::optional = {[contained value] = false}} } } optional oi{5}; // { dg-final { note-test oi {std::optional = {[contained value] = 5}} } } optional op{nullptr}; // { dg-final { note-test op {std::optional = {[contained value] = 0x0}} } } __builtin_puts(""); return 0; // Mark SPOT } // { dg-final { gdb-test SPOT } }