Add #ifdef case for 16 bits in cow-stdexcept.cc
authorFelipe Magno de Almeida <felipe@expertisesolutions.com.br>
Tue, 6 Dec 2016 17:58:10 +0000 (17:58 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Tue, 6 Dec 2016 17:58:10 +0000 (17:58 +0000)
Added #ifdef case for when void* is 16 bits so it compiles in AVR
target.

2016-12-06  Felipe Magno de Almeida  <felipe@expertisesolutions.com.br>

* src/c++11/cow-stdexcept.cc: Add special case for 16 bit pointers.

From-SVN: r243310

libstdc++-v3/ChangeLog
libstdc++-v3/src/c++11/cow-stdexcept.cc

index face139ee0ffcee8024cc7b146385f5e51aa03b4..138a0208b2070e9db784945c8fca433362f0149c 100644 (file)
@@ -1,5 +1,7 @@
 2016-12-06  Felipe Magno de Almeida  <felipe@expertisesolutions.com.br>
 
+       * src/c++11/cow-stdexcept.cc: Add special case for 16 bit pointers.
+
        * crossconfig.m4: Add avr target for cross-compilation.
        * configure: Regenerate.
 
index 31a89dfd5541aba4253f7d6de44012905780ab9f..641b372ccf8d29fe0eadd679f7129bdc4048a7ce 100644 (file)
@@ -208,6 +208,8 @@ extern void* _ZGTtnaX (size_t sz) __attribute__((weak));
 extern void _ZGTtdlPv (void* ptr) __attribute__((weak));
 extern uint8_t _ITM_RU1(const uint8_t *p)
   ITM_REGPARM __attribute__((weak));
+extern uint16_t _ITM_RU2(const uint16_t *p)
+  ITM_REGPARM __attribute__((weak));
 extern uint32_t _ITM_RU4(const uint32_t *p)
   ITM_REGPARM __attribute__((weak));
 extern uint64_t _ITM_RU8(const uint64_t *p)
@@ -272,12 +274,15 @@ _txnal_cow_string_C1_for_exceptions(void* that, const char* s,
 static void* txnal_read_ptr(void* const * ptr)
 {
   static_assert(sizeof(uint64_t) == sizeof(void*)
-               || sizeof(uint32_t) == sizeof(void*),
-               "Pointers must be 32 bits or 64 bits wide");
+               || sizeof(uint32_t) == sizeof(void*)
+               || sizeof(uint16_t) == sizeof(void*),
+               "Pointers must be 16 bits, 32 bits or 64 bits wide");
 #if __UINTPTR_MAX__ == __UINT64_MAX__
   return (void*)_ITM_RU8((const uint64_t*)ptr);
-#else
+#elif __UINTPTR_MAX__ == __UINT32_MAX__
   return (void*)_ITM_RU4((const uint32_t*)ptr);
+#else
+  return (void*)_ITM_RU2((const uint16_t*)ptr);
 #endif
 }