1 /* { dg-do compile } */
2 /* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
3 /* { dg-options "-ffat-lto-objects" } */
5 typedef unsigned char uint8_t;
6 typedef unsigned int uint32_t;
8 typedef uint32_t u32bit;
9 __extension__ typedef __SIZE_TYPE__ size_t;
11 extern void __warn_memset_zero_len (void) __attribute__((__warning__ ("")));
12 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__))
13 void * memset (void *__dest, int __ch, size_t __len) throw () {
14 if (__builtin_constant_p (__len) && __len == 0)
15 __warn_memset_zero_len (); /* { dg-warning "declared with attribute warning" } */
20 inline void clear_mem(void* ptr, u32bit n) {
23 template<typename T> class MemoryRegion {
27 const T* begin() const {
29 void set(const T in[], u32bit n) {
32 void set(const MemoryRegion<T>& in) {
33 set(in.begin(), in.size());
36 clear_mem(buf, allocated);
44 mutable u32bit allocated;
46 template<typename T> void MemoryRegion<T>::create(u32bit n) {
51 template<typename T> class SecureVector : public MemoryRegion<T> {
53 SecureVector<T>& operator=(const MemoryRegion<T>& in) {
54 if(this != &in) this->set(in);
60 SecureVector<byte> bits_of() const {
61 return SecureVector<byte> ();
63 OctetString& operator^=(const OctetString&);
64 void change(const MemoryRegion<byte>& in) {
67 OctetString(const MemoryRegion<byte>& in) {
70 SecureVector<byte> bits;
72 OctetString& OctetString::operator^=(const OctetString& k) {
79 bool __attribute__((flatten))
80 operator==(const OctetString& s1, const OctetString& s2) {
81 return (s1.bits_of() == s2.bits_of());