1/* { dg-do compile } */ 2/* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */ 3/* { dg-options "-ffat-lto-objects" } */ 4 5typedef unsigned char uint8_t; 6typedef unsigned int uint32_t; 7typedef uint8_t byte; 8typedef uint32_t u32bit; 9__extension__ typedef __SIZE_TYPE__ size_t; 10extern "C" { 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" } */ 16 } 17} 18inline void clear_mem(void* ptr, u32bit n) { 19 memset(ptr, 0, n); 20} 21template<typename T> class MemoryRegion { 22public: 23 u32bit size() const { 24 } 25 const T* begin() const { 26 } 27 void set(const T in[], u32bit n) { 28 create(n); 29 } 30 void set(const MemoryRegion<T>& in) { 31 set(in.begin(), in.size()); 32 } 33 void clear() { 34 clear_mem(buf, allocated); 35 } 36 void create(u32bit); 37 MemoryRegion() { 38 used = allocated = 0; 39 } 40 mutable T* buf; 41 mutable u32bit used; 42 mutable u32bit allocated; 43}; 44template<typename T> void MemoryRegion<T>::create(u32bit n) { 45 if(n <= allocated) { 46 clear(); 47 } 48} 49template<typename T> class SecureVector : public MemoryRegion<T> { 50public: 51 SecureVector<T>& operator=(const MemoryRegion<T>& in) { 52 if(this != &in) this->set(in); 53 } 54}; 55class OctetString { 56public: 57 SecureVector<byte> bits_of() const { 58 } 59 OctetString& operator^=(const OctetString&); 60 void change(const MemoryRegion<byte>& in) { 61 bits = in; 62 } 63 OctetString(const MemoryRegion<byte>& in) { 64 change(in); 65 } 66 SecureVector<byte> bits; 67}; 68OctetString& OctetString::operator^=(const OctetString& k) { 69 if(&k == this) { 70 bits.clear(); 71 } 72} 73bool __attribute__((flatten)) 74operator==(const OctetString& s1, const OctetString& s2) { 75 return (s1.bits_of() == s2.bits_of()); 76} 77