https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77748

--- Comment #22 from Bernd Edlinger <bernd.edlinger at hotmail dot de> ---
(In reply to Christophe Lyon from comment #21)
> Ha, indeed, that's one of the differences between arm-none-eabi and
> arm-none-linux-gnueabi.
> 
> Using -fno-short-enums does make execution succeed, unfortunately the linker
> complains because the startup code/libraries are not compiled with this flag:
> ld: warning: /tmp/ccKhI9uW.o uses 32-bit enums yet the output is to use
> variable-size enums; use of enum values across objects may fail
> 
> Is there an effective-target to check for short-enums?

target short_enums

but it looks like only checking the diagnostics from the compile
not the link.

Some use -Wl,--no-enum-size-warning which no other target undestands.


Maybe we try this:

Index: pr77550.C
===================================================================
--- pr77550.C   (revision 240540)
+++ pr77550.C   (working copy)
@@ -1,6 +1,7 @@
 // { dg-do run }
 // { dg-options "-std=c++14 -O3" }

+#define enum enum __attribute((mode(SI)))
 namespace std {
 typedef int size_t;
 inline namespace __cxx11 {}
@@ -229,15 +230,17 @@
   struct _Alloc_hider {
     _Alloc_hider(pointer, allocator<char> && = allocator<char>());
   } _M_dataplus;
-  size_type _M_string_length;
+  size_type _M_string_length = 0;
   enum { _S_local_capacity = 15 } _M_local_buf[_S_local_capacity];
-  pointer _M_local_data();
-  void _M_set_length(size_type);
-  basic_string() : _M_dataplus(_M_local_data()) { _M_set_length(0); }
+  basic_string() : _M_dataplus(0) {}
   basic_string(const basic_string &) : _M_dataplus(0) {}
   size_type size() { return _M_string_length; }
   char *data() const {}
 };
+//template<> basic_string<char, std::char_traits<char>,
std::allocator<char>>::
+//_Alloc_hider::_Alloc_hider(char*, std::allocator<char>&&) {}
+extern "C" void
+_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcOS3_
(...) {}
 }
 template <typename _CharT>
 int operator==(basic_string<_CharT> &p1, const basic_string<_CharT> &p2) {

Reply via email to