libstdc++: contracts support changes

libstdc++-v3/ChangeLog:

	* src/c++17/contract.cc: Remove member functions.
	* config/abi/pre/gnu.ver: Remove their symbols, move to latest
	version.
	* include/std/contract: Make them inline.
	Change string_view data members to const char *.
	Use libstdc++ naming pattern.
diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver
index e423584..94a3e47 100644
--- a/libstdc++-v3/config/abi/pre/gnu.ver
+++ b/libstdc++-v3/config/abi/pre/gnu.ver
@@ -2282,18 +2282,6 @@
     _ZNSt7codecvtID[is]Du*;
     _ZT[ISV]St7codecvtID[is]Du*E;
 
-    # std::contract_violation::contract_violation (int, std::string_view, std::string_view, std::string_view, std::string_view, std::string_view, std::contract_violation_continuation_mode)
-    _ZNSt18contract_violationC1EiSt17basic_string_viewIcSt11char_traitsIcEES3_S3_S3_S3_St36contract_violation_continuation_mode;
-    _ZNKSt18contract_violation11line_numberEv;
-    _ZNKSt18contract_violation13function_nameEv;
-    _ZNKSt18contract_violation15assertion_levelEv;
-    _ZNKSt18contract_violation14assertion_roleEv;
-    _ZNKSt18contract_violation7commentEv;
-    _ZNKSt18contract_violation9file_nameEv;
-    _ZNKSt18contract_violation17continuation_modeEv;
-
-    _Z25handle_contract_violationRKSt18contract_violation;
-    _Z23__on_contract_violationbiPKcS0_S0_S0_S0_i;
 } GLIBCXX_3.4.25;
 
 GLIBCXX_3.4.27 {
@@ -2407,6 +2395,10 @@
     # std::to_chars(char*, char*, [float|double|long double], chars_format, int)
     _ZSt8to_charsPcS_[def]St12chars_formati;
 
+    # experimental contracts support
+    _Z25handle_contract_violationRKSt18contract_violation;
+    _Z23__on_contract_violationbiPKcS0_S0_S0_S0_i;
+
 } GLIBCXX_3.4.28;
 
 # Symbols in the support library (libsupc++) have their own tag.
diff --git a/libstdc++-v3/include/std/contract b/libstdc++-v3/include/std/contract
index 039a8e2..2eabb31 100644
--- a/libstdc++-v3/include/std/contract
+++ b/libstdc++-v3/include/std/contract
@@ -23,6 +23,10 @@
 // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 // <http://www.gnu.org/licenses/>.
 
+// FIXME experimental
+// FIXME string_view vs. freestanding
+// FIXME remove on_contract_violation?
+
 /** @file contract
  *  This is a Standard C++ Library header.
  */
@@ -46,23 +50,27 @@
   };
 
   class contract_violation {
-    int line_number_;
-    string_view file_name_;
-    string_view function_name_;
-    string_view comment_;
-    string_view assertion_level_;
-    string_view assertion_role_;
-    contract_violation_continuation_mode continuation_mode_;
+    int _M_line; // FIXME uint_least32_t
+    const char* _M_file;
+    const char* _M_function;
+    const char* _M_comment;
+    const char* _M_level;
+    const char* _M_role;
+    contract_violation_continuation_mode _M_continue;
   public:
-    contract_violation (int, string_view, string_view, string_view, string_view,
-                        string_view, contract_violation_continuation_mode);
-    int line_number() const noexcept;
-    string_view file_name() const noexcept;
-    string_view function_name() const noexcept;
-    string_view comment() const noexcept;
-    string_view assertion_level() const noexcept;
-    string_view assertion_role() const noexcept;
-    contract_violation_continuation_mode continuation_mode() const noexcept;
+    contract_violation (int __l, const char* __f, const char* __fn,
+			const char* __c, const char* __lv, const char *__r,
+                        contract_violation_continuation_mode __m)
+      : _M_line(__l), _M_file(__f), _M_function(__fn), _M_comment(__c),
+	_M_level(__lv), _M_role(__r), _M_continue(__m) { }
+    int line_number() const noexcept { return _M_line; }
+    string_view file_name() const noexcept { return _M_file; }
+    string_view function_name() const noexcept { return _M_function; }
+    string_view comment() const noexcept { return _M_comment; }
+    string_view assertion_level() const noexcept { return _M_level; }
+    string_view assertion_role() const noexcept { return _M_role; }
+    contract_violation_continuation_mode continuation_mode() const noexcept
+    { return _M_continue; }
   };
 
   //void handle_contract_violation (const contract_violation &);
diff --git a/libstdc++-v3/src/c++17/contract.cc b/libstdc++-v3/src/c++17/contract.cc
index 56ee9c8..769e6d3 100644
--- a/libstdc++-v3/src/c++17/contract.cc
+++ b/libstdc++-v3/src/c++17/contract.cc
@@ -23,75 +23,8 @@
 // <http://www.gnu.org/licenses/>.
 
 #include <contract>
-#include <exception>
 #include <iostream>
 #include <cstdlib>
-#include <cstdio>
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-contract_violation::contract_violation (int line_number,
-  string_view file_name,
-  string_view function_name,
-  string_view comment,
-  string_view assertion_level,
-  string_view assertion_role,
-  contract_violation_continuation_mode continuation_mode)
-  : line_number_(line_number),
-    file_name_(file_name),
-    function_name_(function_name),
-    comment_(comment),
-    assertion_level_(assertion_level),
-    assertion_role_(assertion_role),
-    continuation_mode_(continuation_mode)
-  { }
-
-int
-contract_violation::line_number () const noexcept
-{
-  return this->line_number_;
-}
-
-string_view
-contract_violation::file_name () const noexcept
-{
-  return this->file_name_;
-}
-
-string_view
-contract_violation::function_name () const noexcept
-{
-  return this->function_name_;
-}
-
-string_view
-contract_violation::comment () const noexcept
-{
-  return this->comment_;
-}
-
-string_view
-contract_violation::assertion_level () const noexcept
-{
-  return this->assertion_level_;
-}
-
-string_view
-contract_violation::assertion_role () const noexcept
-{
-  return this->assertion_role_;
-}
-
-contract_violation_continuation_mode
-contract_violation::continuation_mode () const noexcept
-{
-  return this->continuation_mode_;
-}
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace std
-
 
 __attribute__ ((weak)) void
 handle_contract_violation (const std::contract_violation &violation)
@@ -133,4 +66,3 @@
 
   return 0;
 }
-