public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Jakub Jelinek <jakub@fedoraproject.org>
To: git-commits@fedoraproject.org
Subject: [rpms/gcc] rhel-f41-base: 4.4.2-13
Date: Mon, 29 Jun 2026 12:24:40 GMT	[thread overview]
Message-ID: <178273588007.1.3263159773626094524.rpms-gcc-462317c02b50@fedoraproject.org> (raw)

A new commit has been pushed.

Repo   : rpms/gcc
Branch : rhel-f41-base
Commit : 462317c02b501137eee4ec4c31acfcf05f89fd76
Author : Jakub Jelinek <jakub@fedoraproject.org>
Date   : 2009-12-04T12:41:27+00:00
Stats  : +186/-1696 in 7 file(s)
URL    : https://src.fedoraproject.org/rpms/gcc/c/462317c02b501137eee4ec4c31acfcf05f89fd76?branch=rhel-f41-base

Log:
4.4.2-13

---
diff --git a/.cvsignore b/.cvsignore
index 241fa39..f2dfc1c 100644
--- a/.cvsignore
+++ b/.cvsignore
@@ -1,2 +1,2 @@
 fastjar-0.97.tar.gz
-gcc-4.4.1-20091001.tar.bz2
+gcc-4.4.2-20091204.tar.bz2

diff --git a/gcc.spec b/gcc.spec
index 5ad8e5b..d86311c 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,9 +1,9 @@
-%global DATE 20091001
-%global SVNREV 152364
-%global gcc_version 4.4.1
+%global DATE 20091204
+%global SVNREV 154977
+%global gcc_version 4.4.2
 # Note, gcc_release must be integer, if you want to add suffixes to
 # %{release}, append them after %{gcc_release} on Release: line.
-%global gcc_release 18
+%global gcc_release 14
 %global _unpackaged_files_terminate_build 0
 %global multilib_64_archs sparc64 ppc64 s390x x86_64
 %global include_gappletviewer 1
@@ -40,7 +40,7 @@
 Summary: Various compilers (C, C++, Objective-C, Java, ...)
 Name: gcc
 Version: %{gcc_version}
-Release: %{gcc_release}
+Release: %{gcc_release}%{?dist}
 # libgcc, libgfortran, libmudflap, libgomp, libstdc++ and crtstuff have
 # GCC Runtime Exception.
 License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions
@@ -65,7 +65,8 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 # Need binutils which support mffgpr and mftgpr >= 2.17.50.0.2-8
 # Need binutils which support --build-id >= 2.17.50.0.17-3
 # Need binutils which support %gnu_unique_object >= 2.19.51.0.14
-BuildRequires: binutils >= 2.19.51.0.14
+# Need binutils which support .cfi_sections >= 2.19.51.0.14-33
+BuildRequires: binutils >= 2.19.51.0.14-33
 # While gcc doesn't include statically linked binaries, during testing
 # -static is used several times.
 BuildRequires: glibc-static
@@ -118,8 +119,9 @@ Requires: cpp = %{version}-%{release}
 # Need binutils that supports --hash-style=gnu
 # Need binutils that support mffgpr/mftgpr
 # Need binutils that support --build-id
-# Need binutils which support %gnu_unique_object
-Requires: binutils >= 2.19.51.0.14
+# Need binutils that support %gnu_unique_object
+# Need binutils that support .cfi_sections
+Requires: binutils >= 2.19.51.0.14-33
 # Make sure gdb will understand DW_FORM_strp
 Conflicts: gdb < 5.1-2
 Requires: glibc-devel >= 2.2.90-12
@@ -155,12 +157,10 @@ Patch11: gcc44-sparc-config-detection.patch
 Patch12: gcc44-libgomp-omp_h-multilib.patch
 Patch13: gcc44-libtool-no-rpath.patch
 Patch14: gcc44-cloog-dl.patch
-Patch15: gcc44-raw-string.patch
 Patch16: gcc44-unwind-debug-hook.patch
 Patch17: gcc44-pr38757.patch
 Patch18: gcc44-libstdc++-docs.patch
 Patch19: gcc44-ppc64-aixdesc.patch
-Patch20: gcc44-vta-rh521991.patch
 
 Patch1000: fastjar-0.97-segfault.patch
 
@@ -218,7 +218,7 @@ C++ Library.
 %package -n libstdc++-devel
 Summary: Header files and libraries for C++ development
 Group: Development/Libraries
-Requires: libstdc++ = %{version}-%{release}, %{_prefix}/%{_lib}/libstdc++.so.6
+Requires: libstdc++%{?_isa} = %{version}-%{release}
 Autoreq: true
 
 %description -n libstdc++-devel
@@ -362,8 +362,8 @@ programs compiled using the Java compiler from GNU Compiler Collection (gcj).
 %package -n libgcj-devel
 Summary: Libraries for Java development using GCC
 Group: Development/Languages
-Requires: libgcj = %{version}-%{release}, %{_prefix}/%{_lib}/libgcj.so.10
-Requires: zlib-devel, %{_prefix}/%{_lib}/libz.so
+Requires: libgcj%{?_isa} = %{version}-%{release}
+Requires: zlib-devel%{?_isa}
 Requires: /bin/awk
 Autoreq: false
 Autoprov: false
@@ -460,14 +460,12 @@ which are required to compile with the GNAT.
 %if %{build_cloog}
 %patch14 -p0 -b .cloog-dl~
 %endif
-%patch15 -p0 -b .raw-string~
 %patch16 -p0 -b .unwind-debug-hook~
 %patch17 -p0 -b .pr38757~
 %if %{build_libstdcxx_docs}
 %patch18 -p0 -b .libstdc++-docs~
 %endif
 %patch19 -p0 -b .ppc64-aixdesc~
-%patch20 -p0 -b .vta-rh521991~
 
 # This testcase doesn't compile.
 rm libjava/testsuite/libjava.lang/PR35020*
@@ -480,7 +478,7 @@ tar xzf %{SOURCE4}
 tar xjf %{SOURCE10}
 %endif
 
-sed -i -e 's/4\.4\.2/4.4.1/' gcc/BASE-VER
+sed -i -e 's/4\.4\.3/4.4.2/' gcc/BASE-VER
 echo 'Red Hat %{version}-%{gcc_release}' > gcc/DEV-PHASE
 
 # Default to -gdwarf-3 rather than -gdwarf-2
@@ -643,6 +641,11 @@ CC="$CC" CFLAGS="$OPT_FLAGS" CXXFLAGS="`echo $OPT_FLAGS | sed 's/ -Wall / /g'`" 
 %ifarch sparc sparcv9
 	--host=%{gcc_target_platform} --build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=v7
 %endif
+%if 0%{?rhel} >= 6
+%ifarch ppc ppc64
+	--with-cpu-32=power4 --with-tune-32=power6 --with-cpu-64=power4 --with-tune-64=power6 \
+%endif
+%endif
 %ifarch ppc
 	--build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=default32
 %endif
@@ -1170,6 +1173,13 @@ chmod 644 %{buildroot}%{_mandir}/man1/unprotoize.1
 %check
 cd obj-%{gcc_target_platform}
 
+%if %{build_java}
+export PATH=`pwd`/../fastjar-%{fastjar_ver}/obj-%{gcc_target_platform}${PATH:+:$PATH}
+%if !%{bootstrap_java}
+export PATH=`pwd`/java_hacks${PATH:+:$PATH}
+%endif
+%endif
+
 # run the tests.
 make %{?_smp_mflags} -k check ALT_CC_UNDER_TEST=gcc ALT_CXX_UNDER_TEST=g++ RUNTESTFLAGS="--target_board=unix/'{,-fstack-protector}'" || :
 echo ====================TESTING=========================
@@ -1371,6 +1381,8 @@ fi
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/avxintrin.h
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/x86intrin.h
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/fma4intrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/xopintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/lwpintrin.h
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mm_malloc.h
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mm3dnow.h
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/cpuid.h
@@ -1837,6 +1849,157 @@ fi
 %doc rpm.doc/changelogs/libmudflap/ChangeLog*
 
 %changelog
+* Fri Dec  4 2009 Jakub Jelinek <jakub@redhat.com> 4.4.2-14
+- update from gcc-4_4-branch
+  - PRs libstdc++/42261, middle-end/42049
+- backport C++0x ICE fix from trunk (PR c++/42266)
+- fortran !$omp workshare improvements (PR fortran/35423)
+- FMA4 and XOP fixes
+
+* Wed Dec  2 2009 Jakub Jelinek <jakub@redhat.com> 4.4.2-13
+- fix security issues in libltdl bundled within libgcj (CVE-2009-3736)
+
+* Wed Dec  2 2009 Jakub Jelinek <jakub@redhat.com> 4.4.2-12
+- update from gcc-4_4-branch
+  - PRs c++/42234, fortran/41278, fortran/41807, fortran/42162, target/42113,
+	target/42165
+  - don't ICE on -O256 (#539923)
+- fix -mregnames on ppc/ppc64
+- optimize even COMDAT constructors and destructors without virtual
+  bases (PR c++/3187)
+
+* Mon Nov 23 2009 Jakub Jelinek <jakub@redhat.com> 4.4.2-11
+- update from gcc-4_4-branch
+  - PRs c++/42059, c++/42061, libgfortran/42090
+- VTA backports
+  - PRs debug/41886, debug/41888, debug/41926, tree-optimization/42078
+- optimize non-COMDAT constructors and destructors without virtual
+  bases by making the base and complete ctor or dtor aliases of
+  each other (PR c++/3187)
+
+* Sat Nov 14 2009 Jakub Jelinek <jakub@redhat.com> 4.4.2-10
+- update from gcc-4_4-branch
+  - PRs c++/21008, c++/37037, c++/41972, c++/41994, middle-end/40946,
+	middle-end/42029
+- VTA backports
+  - PR middle-end/41930
+- optimize deleting destructors for size (PR c++/3187)
+- try to avoid file Requires by requiring package%%{?_isa} (#533947)
+
+* Mon Nov  9 2009 Jakub Jelinek <jakub@redhat.com> 4.4.2-9
+- update from gcc-4_4-branch
+  - PRs c++/35067, c++/36912, c++/36959, c++/37093, c++/38699, c++/39786,
+	c++/41856, c++/41876, c++/41967, c++/9381, fortran/41772,
+	fortran/41909, middle-end/41963, rtl-optimization/41917,
+	target/41900, tree-optimization/41643
+- selected backports from trunk
+  - PRs debug/41801, middle-end/41837, target/41985, tree-optimization/41841
+- initial AMD Orochi -mxop and -mlwp support
+- try to avoid wrapping CONST_INTs/VOIDmode CONST_DOUBLEs into CONST
+
+* Mon Nov  2 2009 Jakub Jelinek <jakub@redhat.com> 4.4.2-8
+- update from gcc-4_4-branch
+  - PRs c++/41754, fortran/41777, fortran/41850, libstdc++/40852
+- fix ICE with unmatched #pragma GCC visibility push/pop (PR c++/41774)
+- fix VTA ICE with -combine (#531385, PR debug/41893)
+- fix RTTI for anon namespace classes
+- fix incorrect uses of __restrict keyword in valarray (PR libstdc++/41763)
+
+* Tue Oct 27 2009 Jakub Jelinek <jakub@redhat.com> 4.4.2-7
+- update from gcc-4_4-branch
+  - PRs c++/40808, c/41842, cp-tools/39177
+- VTA backports
+  - PR bootstrap/41345
+- don't emit DW_AT_name: <anonymous struct> etc. into debug info
+  (#530304, PR debug/41828)
+- power7 ABI fixes (PR target/41787)
+- fix ICE in ix86_pic_register_p (PR target/41762)
+
+* Thu Oct 22 2009 Jakub Jelinek <jakub@redhat.com> 4.4.2-6
+- update from gcc-4_4-branch
+  - PR target/41702
+  - fix a pod2man error in gcc.1 (#530102)
+  - fix mangling of very large names
+- document -print-multi-os-directory in gcc.info and gcc.1
+  (#529659, PR other/25507)
+
+* Mon Oct 19 2009 Jakub Jelinek <jakub@redhat.com> 4.4.2-5
+- update from gcc-4_4-branch
+  - PR fortran/41755
+  - s390 z10 tuning fixes
+- provide accurate attributes for powerpc builtins (PR target/23983)
+- fix -fcompare-debug differences caused by DCE removal of debug stmts
+- fix updating of speculation status with VTA (PR debug/41739)
+
+* Sun Oct 18 2009 Jakub Jelinek <jakub@redhat.com> 4.4.2-4
+- update from gcc-4_4-branch
+  - PRs c++/37204, c++/37766, c++/37875, c++/38798, c++/40092,
+	libstdc++/40654, libstdc++/40826
+- fix VTA ICE on invalid pointer arithmetics (#529512)
+
+* Sat Oct 17 2009 Jakub Jelinek <jakub@redhat.com> 4.4.2-3
+- fix VTA handling in the scheduler (PR debug/41535)
+- fix up %%check section to be able to find ecj1
+
+* Fri Oct 16 2009 Jakub Jelinek <jakub@redhat.com> 4.4.2-2
+- update from gcc-4_4-branch
+  - PR target/40913
+- VTA backports
+  - PR debug/41717
+- fix Ada .eh_frame generation (PR debug/40521)
+
+* Thu Oct 15 2009 Jakub Jelinek <jakub@redhat.com> 4.4.2-1
+- update from gcc-4_4-branch
+  - GCC 4.4.2 release
+  - PRs middle-end/22072, target/41665
+- don't emit -Wpadded warnings for builtin structures
+- don't generate .eh_frame, but generate .debug_frame when -g and none of
+  -fasynchronous-unwind-tables/-fexceptions/-funwind-tables is used
+  (PR debug/40521)
+
+* Wed Oct 14 2009 Jakub Jelinek <jakub@redhat.com> 4.4.1-22
+- update from gcc-4_4-branch
+  - PRs target/26515, target/38948
+  - fix s390{,x} BLKmode symbol handling
+  - fix i?86 testqi splitter (#528206, PR target/41680)
+- VTA backports
+  - introduce debug temps (PRs debug/41264, debug/41338, debug/41343,
+    debug/41447, target/41693)
+  - build debug stmts on updates (PR debug/41616)
+  - fix another with/without -save-temps debug info difference
+    (#526841, PR preprocessor/41543)
+  - fix invalid ranges in .debug_loc section (PR debug/41695)
+%if 0%{?rhel} >= 6
+- if -mcpu= isn't specified, default to -mcpu=power4 (#463549)
+%endif
+
+* Sat Oct 10 2009 Jakub Jelinek <jakub@redhat.com> 4.4.1-21
+- update from gcc-4_4-branch
+  - fix s390{,x} prefetch for pre-z10 CPUs (#524552)
+- VTA backports
+  - fix debug info differences with/without -save-temps
+    (PR preprocessor/41445)
+- fix ICE with small BLKmode returning call (#516028,
+  PR rtl-optimization/41646)
+
+* Thu Oct  8 2009 Jakub Jelinek <jakub@redhat.com> 4.4.1-20
+- update from gcc-4_4-branch
+  - PRs c++/39863, c++/41038
+- avoid redundant DW_AT_const_value when abstract origin already has one
+  (#527430) 
+- another VTA debug stmt renaming bugfix (#521991)
+
+* Mon Oct  5 2009 Jakub Jelinek <jakub@redhat.com> 4.4.1-19
+- update from gcc-4_4-branch
+  - PRs fortran/41479, fortran/41515
+- VTA backports
+  - PRs debug/41353, debug/41404, rtl-optimization/41511
+  - another debug info fix for decls passed by reference (#527057,
+    PR debug/41558)
+  - don't emit DW_AT_name on DW_TAG_const_type (#526970)
+- avoid invalid folding of casts to addresses of first fields
+  (#527121, PR middle-end/41317)
+
 * Thu Oct  1 2009 Jakub Jelinek <jakub@redhat.com> 4.4.1-18
 - update from gcc-4_4-branch
   - PRs ada/41100, target/22093

diff --git a/gcc44-hack.patch b/gcc44-hack.patch
index c770339..8719d17 100644
--- a/gcc44-hack.patch
+++ b/gcc44-hack.patch
@@ -1,6 +1,6 @@
 --- libada/Makefile.in.jj	2009-01-14 12:07:35.000000000 +0100
 +++ libada/Makefile.in	2009-01-15 14:25:33.000000000 +0100
-@@ -67,17 +67,39 @@ version := $(shell cat $(srcdir)/../gcc/
+@@ -69,18 +69,40 @@ version := $(shell cat $(srcdir)/../gcc/
  libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR)
  ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR))
  
@@ -38,12 +38,14 @@
          "SHELL=$(SHELL)" \
 -        "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS)" \
 -        "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS)" \
+-        "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS)" \
 +        "GNATLIBFLAGS=$(strip $(GNATLIBFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS))" \
 +        "GNATLIBCFLAGS=$(strip $(GNATLIBCFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS))" \
++        "GNATLIBCFLAGS_FOR_C=$(strip $(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS))" \
          "TARGET_LIBGCC2_CFLAGS=$(TARGET_LIBGCC2_CFLAGS)" \
          "THREAD_KIND=$(THREAD_KIND)" \
          "TRACE=$(TRACE)" \
-@@ -88,7 +110,7 @@ LIBADA_FLAGS_TO_PASS = \
+@@ -91,7 +113,7 @@ LIBADA_FLAGS_TO_PASS = \
          "exeext=.exeext.should.not.be.used " \
  	'CC=the.host.compiler.should.not.be.needed' \
  	"GCC_FOR_TARGET=$(CC)" \

diff --git a/gcc44-raw-string.patch b/gcc44-raw-string.patch
deleted file mode 100644
index 92a2d57..0000000
--- a/gcc44-raw-string.patch
+++ /dev/null
@@ -1,1495 +0,0 @@
-2008-09-12  Jakub Jelinek  <jakub@redhat.com>
-
-	* charset.c (cpp_init_iconv): Initialize utf8_cset_desc.
-	(_cpp_destroy_iconv): Destroy utf8_cset_desc, char16_cset_desc
-	and char32_cset_desc.
-	(converter_for_type): Handle CPP_UTF8STRING.
-	(cpp_interpret_string): Handle CPP_UTF8STRING and raw-strings.
-	* directives.c (get__Pragma_string): Handle CPP_UTF8STRING.
-	* include/cpplib.h (CPP_UTF8STRING): New token type.
-	* internal.h (struct cpp_reader): Add utf8_cset_desc field.
-	* lex.c (lex_raw_string): New function.
-	(lex_string): Handle u8 string literals, call lex_raw_string
-	for raw string literals.
-	(_cpp_lex_direct): Call lex_string even for u8" and {,u,U,L,u8}R"
-	sequences.
-	* macro.c (stringify_arg): Handle CPP_UTF8STRING.
-
-	* c-common.c (c_parse_error): Handle CPP_UTF8STRING.
-	* c-lex.c (c_lex_with_flags, lex_string): Likewise.
-	* c-parser.c (c_parser_postfix_expression): Likewise.
-
-	* parser.c (cp_lexer_print_token, cp_parser_is_string_literal,
-	cp_parser_string_literal, cp_parser_primary_expression): Likewise.
-
-	* gcc.dg/raw-string-1.c: New test.
-	* gcc.dg/raw-string-2.c: New test.
-	* gcc.dg/raw-string-3.c: New test.
-	* gcc.dg/raw-string-4.c: New test.
-	* gcc.dg/raw-string-5.c: New test.
-	* gcc.dg/raw-string-6.c: New test.
-	* gcc.dg/raw-string-7.c: New test.
-	* gcc.dg/utf8-1.c: New test.
-	* gcc.dg/utf8-2.c: New test.
-	* gcc.dg/utf-badconcat2.c: New test.
-	* gcc.dg/utf-dflt2.c: New test.
-	* g++.dg/ext/raw-string-1.C: New test.
-	* g++.dg/ext/raw-string-2.C: New test.
-	* g++.dg/ext/raw-string-3.C: New test.
-	* g++.dg/ext/raw-string-4.C: New test.
-	* g++.dg/ext/raw-string-5.C: New test.
-	* g++.dg/ext/raw-string-6.C: New test.
-	* g++.dg/ext/raw-string-7.C: New test.
-	* g++.dg/ext/utf8-1.C: New test.
-	* g++.dg/ext/utf8-2.C: New test.
-	* g++.dg/ext/utf-badconcat2.C: New test.
-	* g++.dg/ext/utf-dflt2.C: New test.
-
---- libcpp/charset.c.jj	2008-09-05 12:59:49.000000000 +0200
-+++ libcpp/charset.c	2008-09-11 22:11:02.000000000 +0200
-@@ -721,6 +721,8 @@ cpp_init_iconv (cpp_reader *pfile)
- 
-   pfile->narrow_cset_desc = init_iconv_desc (pfile, ncset, SOURCE_CHARSET);
-   pfile->narrow_cset_desc.width = CPP_OPTION (pfile, char_precision);
-+  pfile->utf8_cset_desc = init_iconv_desc (pfile, "UTF-8", SOURCE_CHARSET);
-+  pfile->utf8_cset_desc.width = CPP_OPTION (pfile, char_precision);
-   pfile->char16_cset_desc = init_iconv_desc (pfile,
- 					     be ? "UTF-16BE" : "UTF-16LE",
- 					     SOURCE_CHARSET);
-@@ -741,6 +743,12 @@ _cpp_destroy_iconv (cpp_reader *pfile)
-     {
-       if (pfile->narrow_cset_desc.func == convert_using_iconv)
- 	iconv_close (pfile->narrow_cset_desc.cd);
-+      if (pfile->utf8_cset_desc.func == convert_using_iconv)
-+	iconv_close (pfile->utf8_cset_desc.cd);
-+      if (pfile->char16_cset_desc.func == convert_using_iconv)
-+	iconv_close (pfile->char16_cset_desc.cd);
-+      if (pfile->char32_cset_desc.func == convert_using_iconv)
-+	iconv_close (pfile->char32_cset_desc.cd);
-       if (pfile->wide_cset_desc.func == convert_using_iconv)
- 	iconv_close (pfile->wide_cset_desc.cd);
-     }
-@@ -1330,6 +1338,8 @@ converter_for_type (cpp_reader *pfile, e
-     {
-     default:
- 	return pfile->narrow_cset_desc;
-+    case CPP_UTF8STRING:
-+	return pfile->utf8_cset_desc;
-     case CPP_CHAR16:
-     case CPP_STRING16:
- 	return pfile->char16_cset_desc;
-@@ -1364,7 +1374,47 @@ cpp_interpret_string (cpp_reader *pfile,
-   for (i = 0; i < count; i++)
-     {
-       p = from[i].text;
--      if (*p == 'L' || *p == 'u' || *p == 'U') p++;
-+      if (*p == 'u')
-+	{
-+	  if (*++p == '8')
-+	    p++;
-+	}
-+      else if (*p == 'L' || *p == 'U') p++;
-+      if (*p == 'R')
-+	{
-+	  const uchar *prefix;
-+
-+	  /* Skip over 'R"'.  */
-+	  p += 2;
-+	  prefix = p;
-+	  while (*p != '[')
-+	    p++;
-+	  p++;
-+	  limit = from[i].text + from[i].len;
-+	  if (limit >= p + (p - prefix) + 1)
-+	    limit -= (p - prefix) + 1;
-+
-+	  for (;;)
-+	    {
-+	      base = p;
-+	      while (p < limit && (*p != '\\' || (p[1] != 'u' && p[1] != 'U')))
-+		p++;
-+	      if (p > base)
-+		{
-+		  /* We have a run of normal characters; these can be fed
-+		     directly to convert_cset.  */
-+		  if (!APPLY_CONVERSION (cvt, base, p - base, &tbuf))
-+		    goto fail;
-+		}
-+	      if (p == limit)
-+		break;
-+
-+	      p = convert_ucn (pfile, p + 1, limit, &tbuf, cvt);
-+	    }
-+
-+	  continue;
-+	}
-+
-       p++; /* Skip leading quote.  */
-       limit = from[i].text + from[i].len - 1; /* Skip trailing quote.  */
- 
---- libcpp/directives.c.jj	2008-09-05 12:59:49.000000000 +0200
-+++ libcpp/directives.c	2008-09-11 20:27:32.000000000 +0200
-@@ -1519,7 +1519,8 @@ get__Pragma_string (cpp_reader *pfile)
-   if (string->type == CPP_EOF)
-     _cpp_backup_tokens (pfile, 1);
-   if (string->type != CPP_STRING && string->type != CPP_WSTRING
--      && string->type != CPP_STRING32 && string->type != CPP_STRING16)
-+      && string->type != CPP_STRING32 && string->type != CPP_STRING16
-+      && string->type != CPP_UTF8STRING)
-     return NULL;
- 
-   paren = get_token_no_padding (pfile);
---- libcpp/include/cpplib.h.jj	2008-09-05 12:59:47.000000000 +0200
-+++ libcpp/include/cpplib.h	2008-09-11 20:23:53.000000000 +0200
-@@ -131,6 +131,7 @@ struct _cpp_file;
-   TK(WSTRING,		LITERAL) /* L"string" */			\
-   TK(STRING16,		LITERAL) /* u"string" */			\
-   TK(STRING32,		LITERAL) /* U"string" */			\
-+  TK(UTF8STRING,	LITERAL) /* u8"string" */			\
-   TK(OBJC_STRING,	LITERAL) /* @"string" - Objective-C */		\
-   TK(HEADER_NAME,	LITERAL) /* <stdio.h> in #include */		\
- 									\
-@@ -724,10 +725,10 @@ extern const unsigned char *cpp_macro_de
- extern void _cpp_backup_tokens (cpp_reader *, unsigned int);
- extern const cpp_token *cpp_peek_token (cpp_reader *, int);
- 
--/* Evaluate a CPP_CHAR or CPP_WCHAR token.  */
-+/* Evaluate a CPP_*CHAR* token.  */
- extern cppchar_t cpp_interpret_charconst (cpp_reader *, const cpp_token *,
- 					  unsigned int *, int *);
--/* Evaluate a vector of CPP_STRING or CPP_WSTRING tokens.  */
-+/* Evaluate a vector of CPP_*STRING* tokens.  */
- extern bool cpp_interpret_string (cpp_reader *,
- 				  const cpp_string *, size_t,
- 				  cpp_string *, enum cpp_ttype);
---- libcpp/internal.h.jj	2008-09-05 12:59:49.000000000 +0200
-+++ libcpp/internal.h	2008-09-11 18:23:02.000000000 +0200
-@@ -400,6 +400,10 @@ struct cpp_reader
-   struct cset_converter narrow_cset_desc;
- 
-   /* Descriptor for converting from the source character set to the
-+     UTF-8 execution character set.  */
-+  struct cset_converter utf8_cset_desc;
-+
-+  /* Descriptor for converting from the source character set to the
-      UTF-16 execution character set.  */
-   struct cset_converter char16_cset_desc;
- 
---- libcpp/lex.c.jj	2008-09-05 12:59:49.000000000 +0200
-+++ libcpp/lex.c	2008-09-12 13:54:01.000000000 +0200
-@@ -610,12 +610,186 @@ create_literal (cpp_reader *pfile, cpp_t
-   token->val.str.text = dest;
- }
- 
-+/* Lexes raw a string.  The stored string contains the spelling, including
-+   double quotes, delimiter string, '[' and ']', any leading
-+   'L', 'u', 'U' or 'u8' and 'R' modifier.  It returns the type of the
-+   literal, or CPP_OTHER if it was not properly terminated.
-+
-+   The spelling is NUL-terminated, but it is not guaranteed that this
-+   is the first NUL since embedded NULs are preserved.  */
-+
-+static void
-+lex_raw_string (cpp_reader *pfile, cpp_token *token, const uchar *base,
-+		const uchar *cur)
-+{
-+  bool saw_NUL = false;
-+  const uchar *raw_prefix;
-+  unsigned int raw_prefix_len = 0;
-+  enum cpp_ttype type;
-+  size_t total_len = 0;
-+  _cpp_buff *first_buff = NULL, *last_buff = NULL;
-+
-+  type = (*base == 'L' ? CPP_WSTRING :
-+	  *base == 'U' ? CPP_STRING32 :
-+	  *base == 'u' ? (base[1] == '8' ? CPP_UTF8STRING : CPP_STRING16)
-+	  : CPP_STRING);
-+
-+  raw_prefix = cur + 1;
-+  while (raw_prefix_len < 16)
-+    {
-+      switch (raw_prefix[raw_prefix_len])
-+	{
-+	case ' ': case '[': case ']': case '\t':
-+	case '\v': case '\f': case '\n': default:
-+	  break;
-+	/* Basic source charset except the above chars.  */
-+	case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-+	case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
-+	case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
-+	case 's': case 't': case 'u': case 'v': case 'w': case 'x':
-+	case 'y': case 'z':
-+	case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-+	case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
-+	case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-+	case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
-+	case 'Y': case 'Z':
-+	case '0': case '1': case '2': case '3': case '4': case '5':
-+	case '6': case '7': case '8': case '9':
-+	case '_': case '{': case '}': case '#': case '(': case ')':
-+	case '<': case '>': case '%': case ':': case ';': case '.':
-+	case '?': case '*': case '+': case '-': case '/': case '^':
-+	case '&': case '|': case '~': case '!': case '=': case ',':
-+	case '\\': case '"': case '\'':
-+	  raw_prefix_len++;
-+	  continue;
-+	}
-+      break;
-+    }
-+
-+  if (raw_prefix[raw_prefix_len] != '[')
-+    {
-+      if (raw_prefix_len == 16)
-+	cpp_error (pfile, CPP_DL_ERROR,
-+		   "raw string delimiter longer than 16 characters");
-+      else
-+	cpp_error (pfile, CPP_DL_ERROR,
-+		   "invalid character '%c' in raw string delimiter",
-+		   (int) raw_prefix[raw_prefix_len]);
-+      pfile->buffer->cur = raw_prefix - 1;
-+      create_literal (pfile, token, base, raw_prefix - 1 - base, CPP_OTHER);
-+      return;
-+    }
-+
-+  cur = raw_prefix + raw_prefix_len + 1;
-+  for (;;)
-+    {
-+      cppchar_t c = *cur++;
-+
-+      if (c == ']'
-+	  && strncmp ((const char *) cur, (const char *) raw_prefix,
-+		      raw_prefix_len) == 0
-+	  && cur[raw_prefix_len] == '"')
-+	{
-+	  cur += raw_prefix_len + 1;
-+	  break;
-+	}
-+      else if (c == '\n')
-+	{
-+	  if (pfile->state.in_directive
-+	      || pfile->state.parsing_args
-+	      || pfile->state.in_deferred_pragma)
-+	    {
-+	      cur--;
-+	      type = CPP_OTHER;
-+	      cpp_error (pfile, CPP_DL_ERROR, "unterminated raw string");
-+	      break;
-+	    }
-+
-+	  /* raw strings allow embedded non-escaped newlines, which
-+	     complicates this routine a lot.  */
-+	  if (first_buff == NULL)
-+	    {
-+	      total_len = cur - base;
-+	      first_buff = last_buff = _cpp_get_buff (pfile, total_len);
-+	      memcpy (BUFF_FRONT (last_buff), base, total_len);
-+	      raw_prefix = BUFF_FRONT (last_buff) + (raw_prefix - base);
-+	      BUFF_FRONT (last_buff) += total_len;
-+	    }
-+	  else
-+	    {
-+	      size_t len = cur - base;
-+	      size_t cur_len = len > BUFF_ROOM (last_buff)
-+			       ? BUFF_ROOM (last_buff) : len;
-+
-+	      total_len += len;
-+	      memcpy (BUFF_FRONT (last_buff), base, cur_len);
-+	      BUFF_FRONT (last_buff) += cur_len;
-+	      if (len > cur_len)
-+		{
-+		  last_buff = _cpp_append_extend_buff (pfile, last_buff,
-+						       len - cur_len);
-+		  memcpy (BUFF_FRONT (last_buff), base + cur_len,
-+			  len - cur_len);
-+		  BUFF_FRONT (last_buff) += len - cur_len;
-+		}
-+	    }
-+
-+	  if (pfile->buffer->cur < pfile->buffer->rlimit)
-+	    CPP_INCREMENT_LINE (pfile, 0);
-+	  pfile->buffer->need_line = true;
-+
-+	  if (!_cpp_get_fresh_line (pfile))
-+	    {
-+	      token->type = CPP_EOF;
-+	      /* Tell the compiler the line number of the EOF token.  */
-+	      token->src_loc = pfile->line_table->highest_line;
-+	      token->flags = BOL;
-+	      if (first_buff != NULL)
-+		_cpp_release_buff (pfile, first_buff);
-+	      cpp_error (pfile, CPP_DL_ERROR, "unterminated raw string");
-+	      return;
-+	    }
-+
-+	  cur = base = pfile->buffer->cur;
-+	}
-+      else if (c == '\0')
-+	saw_NUL = true;
-+    }
-+
-+  if (saw_NUL && !pfile->state.skipping)
-+    cpp_error (pfile, CPP_DL_WARNING,
-+	       "null character(s) preserved in literal");
-+
-+  pfile->buffer->cur = cur;
-+  if (first_buff == NULL)
-+    create_literal (pfile, token, base, cur - base, type);
-+  else
-+    {
-+      uchar *dest = _cpp_unaligned_alloc (pfile, total_len + (cur - base) + 1);
-+
-+      token->type = type;
-+      token->val.str.len = total_len + (cur - base);
-+      token->val.str.text = dest;
-+      last_buff = first_buff;
-+      while (last_buff != NULL)
-+	{
-+	  memcpy (dest, last_buff->base,
-+		  BUFF_FRONT (last_buff) - last_buff->base);
-+	  dest += BUFF_FRONT (last_buff) - last_buff->base;
-+	  last_buff = last_buff->next;
-+	}
-+      _cpp_release_buff (pfile, first_buff);
-+      memcpy (dest, base, cur - base);
-+      dest[cur - base] = '\0';
-+    }
-+}
-+
- /* Lexes a string, character constant, or angle-bracketed header file
-    name.  The stored string contains the spelling, including opening
--   quote and leading any leading 'L', 'u' or 'U'.  It returns the type
--   of the literal, or CPP_OTHER if it was not properly terminated, or
--   CPP_LESS for an unterminated header name which must be relexed as
--   normal tokens.
-+   quote and any leading 'L', 'u', 'U' or 'u8' and optional
-+   'R' modifier.  It returns the type of the literal, or CPP_OTHER
-+   if it was not properly terminated, or CPP_LESS for an unterminated
-+   header name which must be relexed as normal tokens.
- 
-    The spelling is NUL-terminated, but it is not guaranteed that this
-    is the first NUL since embedded NULs are preserved.  */
-@@ -629,12 +803,24 @@ lex_string (cpp_reader *pfile, cpp_token
- 
-   cur = base;
-   terminator = *cur++;
--  if (terminator == 'L' || terminator == 'u' || terminator == 'U')
-+  if (terminator == 'L' || terminator == 'U')
-     terminator = *cur++;
--  if (terminator == '\"')
-+  else if (terminator == 'u')
-+    {
-+      terminator = *cur++;
-+      if (terminator == '8')
-+	terminator = *cur++;
-+    }
-+  if (terminator == 'R')
-+    {
-+      lex_raw_string (pfile, token, base, cur);
-+      return;
-+    }
-+  if (terminator == '"')
-     type = (*base == 'L' ? CPP_WSTRING :
- 	    *base == 'U' ? CPP_STRING32 :
--	    *base == 'u' ? CPP_STRING16 : CPP_STRING);
-+	    *base == 'u' ? (base[1] == '8' ? CPP_UTF8STRING : CPP_STRING16)
-+			 : CPP_STRING);
-   else if (terminator == '\'')
-     type = (*base == 'L' ? CPP_WCHAR :
- 	    *base == 'U' ? CPP_CHAR32 :
-@@ -1094,10 +1280,20 @@ _cpp_lex_direct (cpp_reader *pfile)
-     case 'L':
-     case 'u':
-     case 'U':
-+    case 'R':
-       /* 'L', 'u' or 'U' may introduce wide characters or strings.  */
-       if (c == 'L' || CPP_OPTION (pfile, uliterals))
- 	{
--	  if (*buffer->cur == '\'' || *buffer->cur == '"')
-+	  if ((*buffer->cur == '\'' && c != 'R')
-+	      || *buffer->cur == '"'
-+	      || (*buffer->cur == 'R'
-+		  && c != 'R'
-+		  && buffer->cur[1] == '"'
-+		  && CPP_OPTION (pfile, uliterals))
-+	      || (*buffer->cur == '8'
-+		  && c == 'u'
-+		  && (buffer->cur[1] == '"'
-+		      || (buffer->cur[1] == 'R' && buffer->cur[2] == '"'))))
- 	    {
- 	      lex_string (pfile, result, buffer->cur - 1);
- 	      break;
-@@ -1113,7 +1309,7 @@ _cpp_lex_direct (cpp_reader *pfile)
-     case 'y': case 'z':
-     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-     case 'G': case 'H': case 'I': case 'J': case 'K':
--    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-+    case 'M': case 'N': case 'O': case 'P': case 'Q':
-     case 'S': case 'T':           case 'V': case 'W': case 'X':
-     case 'Y': case 'Z':
-       result->type = CPP_NAME;
---- libcpp/macro.c.jj	2008-09-05 12:59:49.000000000 +0200
-+++ libcpp/macro.c	2008-09-11 20:25:20.000000000 +0200
-@@ -377,7 +377,8 @@ stringify_arg (cpp_reader *pfile, macro_
-       escape_it = (token->type == CPP_STRING || token->type == CPP_CHAR
- 		   || token->type == CPP_WSTRING || token->type == CPP_WCHAR
- 		   || token->type == CPP_STRING32 || token->type == CPP_CHAR32
--		   || token->type == CPP_STRING16 || token->type == CPP_CHAR16);
-+		   || token->type == CPP_STRING16 || token->type == CPP_CHAR16
-+		   || token->type == CPP_UTF8STRING);
- 
-       /* Room for each char being written in octal, initial space and
- 	 final quote and NUL.  */
---- gcc/c-common.c.jj	2008-09-09 16:08:04.000000000 +0200
-+++ gcc/c-common.c	2008-09-11 20:30:57.000000000 +0200
-@@ -7472,7 +7472,7 @@ c_parse_error (const char *gmsgid, enum 
-       message = NULL;
-     }
-   else if (token == CPP_STRING || token == CPP_WSTRING || token == CPP_STRING16
--	   || token == CPP_STRING32)
-+	   || token == CPP_STRING32 || token == CPP_UTF8STRING)
-     message = catenate_messages (gmsgid, " before string constant");
-   else if (token == CPP_NUMBER)
-     message = catenate_messages (gmsgid, " before numeric constant");
---- gcc/c-lex.c.jj	2008-09-05 12:56:31.000000000 +0200
-+++ gcc/c-lex.c	2008-09-11 20:34:06.000000000 +0200
-@@ -365,6 +365,7 @@ c_lex_with_flags (tree *value, location_
- 	    case CPP_WSTRING:
- 	    case CPP_STRING16:
- 	    case CPP_STRING32:
-+	    case CPP_UTF8STRING:
- 	      type = lex_string (tok, value, true, true);
- 	      break;
- 
-@@ -423,6 +424,7 @@ c_lex_with_flags (tree *value, location_
-     case CPP_WSTRING:
-     case CPP_STRING16:
-     case CPP_STRING32:
-+    case CPP_UTF8STRING:
-       if ((lex_flags & C_LEX_RAW_STRINGS) == 0)
- 	{
- 	  type = lex_string (tok, value, false,
-@@ -830,12 +832,13 @@ interpret_fixed (const cpp_token *token,
-   return value;
- }
- 
--/* Convert a series of STRING, WSTRING, STRING16 and/or STRING32 tokens
--   into a tree, performing string constant concatenation.  TOK is the
--   first of these.  VALP is the location to write the string into.
--   OBJC_STRING indicates whether an '@' token preceded the incoming token.
-+/* Convert a series of STRING, WSTRING, STRING16, STRING32 and/or
-+   UTF8STRING tokens into a tree, performing string constant
-+   concatenation.  TOK is the first of these.  VALP is the location
-+   to write the string into. OBJC_STRING indicates whether an '@' token
-+   preceded the incoming token.
-    Returns the CPP token type of the result (CPP_STRING, CPP_WSTRING,
--   CPP_STRING32, CPP_STRING16, or CPP_OBJC_STRING).
-+   CPP_STRING32, CPP_STRING16, CPP_UTF8STRING, or CPP_OBJC_STRING).
- 
-    This is unfortunately more work than it should be.  If any of the
-    strings in the series has an L prefix, the result is a wide string
-@@ -880,6 +883,7 @@ lex_string (const cpp_token *tok, tree *
-     case CPP_WSTRING:
-     case CPP_STRING16:
-     case CPP_STRING32:
-+    case CPP_UTF8STRING:
-       if (type != tok->type)
- 	{
- 	  if (type == CPP_STRING)
-@@ -925,6 +929,7 @@ lex_string (const cpp_token *tok, tree *
- 	{
- 	default:
- 	case CPP_STRING:
-+	case CPP_UTF8STRING:
- 	  value = build_string (1, "");
- 	  break;
- 	case CPP_STRING16:
-@@ -950,6 +955,7 @@ lex_string (const cpp_token *tok, tree *
-     {
-     default:
-     case CPP_STRING:
-+    case CPP_UTF8STRING:
-       TREE_TYPE (value) = char_array_type_node;
-       break;
-     case CPP_STRING16:
---- gcc/c-parser.c.jj	2008-09-09 16:08:04.000000000 +0200
-+++ gcc/c-parser.c	2008-09-11 20:34:34.000000000 +0200
-@@ -5085,6 +5085,7 @@ c_parser_postfix_expression (c_parser *p
-     case CPP_STRING16:
-     case CPP_STRING32:
-     case CPP_WSTRING:
-+    case CPP_UTF8STRING:
-       expr.value = c_parser_peek_token (parser)->value;
-       expr.original_code = STRING_CST;
-       c_parser_consume_token (parser);
---- gcc/cp/parser.c.jj	2008-09-09 16:08:03.000000000 +0200
-+++ gcc/cp/parser.c	2008-09-11 20:36:10.000000000 +0200
-@@ -797,6 +797,7 @@ cp_lexer_print_token (FILE * stream, cp_
-     case CPP_STRING16:
-     case CPP_STRING32:
-     case CPP_WSTRING:
-+    case CPP_UTF8STRING:
-       fprintf (stream, " \"%s\"", TREE_STRING_POINTER (token->u.value));
-       break;
- 
-@@ -2049,7 +2050,8 @@ cp_parser_is_string_literal (cp_token* t
-   return (token->type == CPP_STRING ||
- 	  token->type == CPP_STRING16 ||
- 	  token->type == CPP_STRING32 ||
--	  token->type == CPP_WSTRING);
-+	  token->type == CPP_WSTRING ||
-+	  token->type == CPP_UTF8STRING);
- }
- 
- /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
-@@ -2972,6 +2974,7 @@ cp_parser_string_literal (cp_parser *par
- 	{
- 	default:
- 	case CPP_STRING:
-+	case CPP_UTF8STRING:
- 	  TREE_TYPE (value) = char_array_type_node;
- 	  break;
- 	case CPP_STRING16:
-@@ -3195,6 +3198,7 @@ cp_parser_primary_expression (cp_parser 
-     case CPP_STRING16:
-     case CPP_STRING32:
-     case CPP_WSTRING:
-+    case CPP_UTF8STRING:
-       /* ??? Should wide strings be allowed when parser->translate_strings_p
- 	 is false (i.e. in attributes)?  If not, we can kill the third
- 	 argument to cp_parser_string_literal.  */
---- gcc/testsuite/gcc.dg/raw-string-1.c.jj	2008-09-12 11:48:36.000000000 +0200
-+++ gcc/testsuite/gcc.dg/raw-string-1.c	2008-09-12 14:01:27.000000000 +0200
-@@ -0,0 +1,101 @@
-+/* { dg-do run } */
-+/* { dg-options "-std=gnu99" } */
-+
-+#include <wchar.h>
-+
-+typedef __CHAR16_TYPE__	char16_t;
-+typedef __CHAR32_TYPE__ char32_t;
-+
-+const char s0[] = R"[a\
-+\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb
-+c]";
-+const char s1[] = "a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc";
-+const char s2[] = R"*|*[a\
-+b
-+c]"
-+c]*|"
-+c]*|*";
-+const char s3[] = "ab\nc]\"\nc]*|\"\nc";
-+
-+const char t0[] = u8R"[a\
-+\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb
-+c]";
-+const char t1[] = u8"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc";
-+const char t2[] = u8R"*|*[a\
-+b
-+c]"
-+c]*|"
-+c]*|*";
-+const char t3[] = u8"ab\nc]\"\nc]*|\"\nc";
-+
-+const char16_t u0[] = uR"[a\
-+\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb
-+c]";
-+const char16_t u1[] = u"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc";
-+const char16_t u2[] = uR"*|*[a\
-+b
-+c]"
-+c]*|"
-+c]*|*";
-+const char16_t u3[] = u"ab\nc]\"\nc]*|\"\nc";
-+
-+const char32_t U0[] = UR"[a\
-+\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb
-+c]";
-+const char32_t U1[] = U"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc";
-+const char32_t U2[] = UR"*|*[a\
-+b
-+c]"
-+c]*|"
-+c]*|*";
-+const char32_t U3[] = U"ab\nc]\"\nc]*|\"\nc";
-+
-+const wchar_t L0[] = LR"[a\
-+\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb
-+c]";
-+const wchar_t L1[] = L"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc";
-+const wchar_t L2[] = LR"*|*[a\
-+b
-+c]"
-+c]*|"
-+c]*|*";
-+const wchar_t L3[] = L"ab\nc]\"\nc]*|\"\nc";
-+
-+int
-+main (void)
-+{
-+  if (sizeof (s0) != sizeof (s1)
-+      || __builtin_memcmp (s0, s1, sizeof (s0)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (s2) != sizeof (s3)
-+      || __builtin_memcmp (s2, s3, sizeof (s2)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (t0) != sizeof (t1)
-+      || __builtin_memcmp (t0, t1, sizeof (t0)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (t2) != sizeof (t3)
-+      || __builtin_memcmp (t2, t3, sizeof (t2)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (u0) != sizeof (u1)
-+      || __builtin_memcmp (u0, u1, sizeof (u0)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (u2) != sizeof (u3)
-+      || __builtin_memcmp (u2, u3, sizeof (u2)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (U0) != sizeof (U1)
-+      || __builtin_memcmp (U0, U1, sizeof (U0)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (U2) != sizeof (U3)
-+      || __builtin_memcmp (U2, U3, sizeof (U2)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (L0) != sizeof (L1)
-+      || __builtin_memcmp (L0, L1, sizeof (L0)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (L2) != sizeof (L3)
-+      || __builtin_memcmp (L2, L3, sizeof (L2)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (R"*[]*") != 1
-+      || __builtin_memcmp (R"*[]*", "", 1) != 0)
-+    __builtin_abort ();
-+  return 0;
-+}
---- gcc/testsuite/gcc.dg/raw-string-2.c.jj	2008-09-12 12:14:42.000000000 +0200
-+++ gcc/testsuite/gcc.dg/raw-string-2.c	2008-09-12 13:37:10.000000000 +0200
-@@ -0,0 +1,109 @@
-+/* { dg-do run } */
-+/* { dg-options "-std=gnu99" } */
-+
-+#include <wchar.h>
-+
-+typedef __CHAR16_TYPE__	char16_t;
-+typedef __CHAR32_TYPE__ char32_t;
-+
-+#define R
-+#define u
-+#define uR
-+#define U
-+#define UR
-+#define u8
-+#define u8R
-+#define L
-+#define LR
-+
-+const char s00[] = R"[a]" "[b]";
-+const char s01[] = "[a]" R"*[b]*";
-+const char s02[] = R"[a]" R"[b]";
-+const char s03[] = R"-[a]-" u8"[b]";
-+const char s04[] = "[a]" u8R"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ";
-+const char s05[] = R"[a]" u8R"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL";
-+const char s06[] = u8R";([a];(" "[b]";
-+const char s07[] = u8"[a]" R"[b]";
-+const char s08[] = u8R"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-";
-+const char s09[] = u8R"/^&|~!=,"'\[a]/^&|~!=,"'\" u8"[b]";
-+const char s10[] = u8"[a]" u8R"0123456789abcdef[b]0123456789abcdef";
-+const char s11[] = u8R"ghijklmnopqrstuv[a]ghijklmnopqrstuv" u8R"w[b]w";
-+
-+const char16_t u03[] = R"-[a]-" u"[b]";
-+const char16_t u04[] = "[a]" uR"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ";
-+const char16_t u05[] = R"[a]" uR"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL";
-+const char16_t u06[] = uR";([a];(" "[b]";
-+const char16_t u07[] = u"[a]" R"[b]";
-+const char16_t u08[] = uR"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-";
-+const char16_t u09[] = uR"/^&|~!=,"'\[a]/^&|~!=,"'\" u"[b]";
-+const char16_t u10[] = u"[a]" uR"0123456789abcdef[b]0123456789abcdef";
-+const char16_t u11[] = uR"ghijklmnopqrstuv[a]ghijklmnopqrstuv" uR"w[b]w";
-+
-+const char32_t U03[] = R"-[a]-" U"[b]";
-+const char32_t U04[] = "[a]" UR"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ";
-+const char32_t U05[] = R"[a]" UR"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL";
-+const char32_t U06[] = UR";([a];(" "[b]";
-+const char32_t U07[] = U"[a]" R"[b]";
-+const char32_t U08[] = UR"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-";
-+const char32_t U09[] = UR"/^&|~!=,"'\[a]/^&|~!=,"'\" U"[b]";
-+const char32_t U10[] = U"[a]" UR"0123456789abcdef[b]0123456789abcdef";
-+const char32_t U11[] = UR"ghijklmnopqrstuv[a]ghijklmnopqrstuv" UR"w[b]w";
-+
-+const wchar_t L03[] = R"-[a]-" L"[b]";
-+const wchar_t L04[] = "[a]" LR"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ";
-+const wchar_t L05[] = R"[a]" LR"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL";
-+const wchar_t L06[] = LR";([a];(" "[b]";
-+const wchar_t L07[] = L"[a]" R"[b]";
-+const wchar_t L08[] = LR"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-";
-+const wchar_t L09[] = LR"/^&|~!=,"'\[a]/^&|~!=,"'\" L"[b]";
-+const wchar_t L10[] = L"[a]" LR"0123456789abcdef[b]0123456789abcdef";
-+const wchar_t L11[] = LR"ghijklmnopqrstuv[a]ghijklmnopqrstuv" LR"w[b]w";
-+
-+int
-+main (void)
-+{
-+#define TEST(str, val) \
-+  if (sizeof (str) != sizeof (val) \
-+      || __builtin_memcmp (str, val, sizeof (str)) != 0) \
-+    __builtin_abort ()
-+  TEST (s00, "a[b]");
-+  TEST (s01, "[a]b");
-+  TEST (s02, "ab");
-+  TEST (s03, "a[b]");
-+  TEST (s04, "[a]b");
-+  TEST (s05, "ab");
-+  TEST (s06, "a[b]");
-+  TEST (s07, "[a]b");
-+  TEST (s08, "ab");
-+  TEST (s09, "a[b]");
-+  TEST (s10, "[a]b");
-+  TEST (s11, "ab");
-+  TEST (u03, u"a[b]");
-+  TEST (u04, u"[a]b");
-+  TEST (u05, u"ab");
-+  TEST (u06, u"a[b]");
-+  TEST (u07, u"[a]b");
-+  TEST (u08, u"ab");
-+  TEST (u09, u"a[b]");
-+  TEST (u10, u"[a]b");
-+  TEST (u11, u"ab");
-+  TEST (U03, U"a[b]");
-+  TEST (U04, U"[a]b");
-+  TEST (U05, U"ab");
-+  TEST (U06, U"a[b]");
-+  TEST (U07, U"[a]b");
-+  TEST (U08, U"ab");
-+  TEST (U09, U"a[b]");
-+  TEST (U10, U"[a]b");
-+  TEST (U11, U"ab");
-+  TEST (L03, L"a[b]");
-+  TEST (L04, L"[a]b");
-+  TEST (L05, L"ab");
-+  TEST (L06, L"a[b]");
-+  TEST (L07, L"[a]b");
-+  TEST (L08, L"ab");
-+  TEST (L09, L"a[b]");
-+  TEST (L10, L"[a]b");
-+  TEST (L11, L"ab");
-+  return 0;
-+}
---- gcc/testsuite/gcc.dg/raw-string-3.c.jj	2008-09-12 13:27:09.000000000 +0200
-+++ gcc/testsuite/gcc.dg/raw-string-3.c	2008-09-12 13:42:55.000000000 +0200
-@@ -0,0 +1,53 @@
-+/* If not gnu99, the {,u,u8,U,L}R prefix should be parsed as separate
-+   token. */
-+/* { dg-do compile } */
-+/* { dg-options "" } */
-+
-+const void	*s0	= R"[a]";	/* { dg-error "undeclared" } */
-+		/* { dg-error "expected ',' or ';'" "" { target *-*-* } 6 } */
-+const void	*s1	= uR"[a]";	/* { dg-error "undeclared" } */
-+		/* { dg-error "expected ',' or ';'" "" { target *-*-* } 8 } */
-+const void	*s2	= UR"[a]";	/* { dg-error "undeclared" } */
-+		/* { dg-error "expected ',' or ';'" "" { target *-*-* } 10 } */
-+const void	*s3	= u8R"[a]";	/* { dg-error "undeclared" } */
-+		/* { dg-error "expected ',' or ';'" "" { target *-*-* } 12 } */
-+const void	*s4	= LR"[a]";	/* { dg-error "undeclared" } */
-+		/* { dg-error "expected ',' or ';'" "" { target *-*-* } 14 } */
-+
-+const int	i0	= R'a';		/* { dg-error "expected ',' or ';'" } */
-+const int	i1	= uR'a';	/* { dg-error "expected ',' or ';'" } */
-+const int	i2	= UR'a';	/* { dg-error "expected ',' or ';'" } */
-+const int	i3	= u8R'a';	/* { dg-error "expected ',' or ';'" } */
-+const int	i4	= LR'a';	/* { dg-error "expected ',' or ';'" } */
-+
-+#define R	"a"
-+#define uR	"b"
-+#define UR	"c"
-+#define u8R	"d"
-+#define LR	"e"
-+
-+const void	*s5	= R"[a]";
-+const void	*s6	= uR"[a]";
-+const void	*s7	= UR"[a]";
-+const void	*s8	= u8R"[a]";
-+const void	*s9	= LR"[a]";
-+
-+#undef R
-+#undef uR
-+#undef UR
-+#undef u8R
-+#undef LR
-+
-+#define R	1 +
-+#define uR	2 +
-+#define UR	3 +
-+#define u8R	4 +
-+#define LR	5 +
-+
-+const int	i5	= R'a';
-+const int	i6	= uR'a';
-+const int	i7	= UR'a';
-+const int	i8	= u8R'a';
-+const int	i9	= LR'a';
-+
-+int main () {}
---- gcc/testsuite/gcc.dg/raw-string-4.c.jj	2008-09-12 13:27:09.000000000 +0200
-+++ gcc/testsuite/gcc.dg/raw-string-4.c	2008-09-12 13:33:43.000000000 +0200
-@@ -0,0 +1,28 @@
-+/* R is not applicable for character literals.  */
-+/* { dg-do compile } */
-+/* { dg-options "-std=gnu99" } */
-+
-+const int	i0	= R'a';	/* { dg-error "undeclared" } */
-+		/* { dg-error "expected ',' or ';'" "" { target *-*-* } 5 } */
-+const int	i1	= uR'a';	/* { dg-error "undeclared" } */
-+		/* { dg-error "expected ',' or ';'" "" { target *-*-* } 7 } */
-+const int	i2	= UR'a';	/* { dg-error "undeclared" } */
-+		/* { dg-error "expected ',' or ';'" "" { target *-*-* } 9 } */
-+const int	i3	= u8R'a';	/* { dg-error "undeclared" } */
-+		/* { dg-error "expected ',' or ';'" "" { target *-*-* } 11 } */
-+const int	i4	= LR'a';	/* { dg-error "undeclared" } */
-+		/* { dg-error "expected ',' or ';'" "" { target *-*-* } 13 } */
-+
-+#define R	1 +
-+#define uR	2 +
-+#define UR	3 +
-+#define u8R	4 +
-+#define LR	5 +
-+
-+const int	i5	= R'a';
-+const int	i6	= uR'a';
-+const int	i7	= UR'a';
-+const int	i8	= u8R'a';
-+const int	i9	= LR'a';
-+
-+int main () {}
---- gcc/testsuite/gcc.dg/raw-string-5.c.jj	2008-09-12 13:49:58.000000000 +0200
-+++ gcc/testsuite/gcc.dg/raw-string-5.c	2008-09-12 13:59:14.000000000 +0200
-@@ -0,0 +1,23 @@
-+/* { dg-do compile } */
-+/* { dg-options "-std=gnu99" } */
-+
-+const void *s0 = R"0123456789abcdefg[]0123456789abcdefg";
-+	/* { dg-error "raw string delimiter longer" "" { target *-*-* } 4 } */
-+	/* { dg-error "stray" "" { target *-*-* } 4 } */
-+const void *s1 = R" [] ";
-+	/* { dg-error "invalid character" "" { target *-*-* } 7 } */
-+	/* { dg-error "stray" "" { target *-*-* } 7 } */
-+const void *s2 = R"	[]	";
-+	/* { dg-error "invalid character" "" { target *-*-* } 10 } */
-+	/* { dg-error "stray" "" { target *-*-* } 10 } */
-+const void *s3 = R"][]]";
-+	/* { dg-error "invalid character" "" { target *-*-* } 13 } */
-+	/* { dg-error "stray" "" { target *-*-* } 13 } */
-+const void *s4 = R"@[]@";
-+	/* { dg-error "invalid character" "" { target *-*-* } 16 } */
-+	/* { dg-error "stray" "" { target *-*-* } 16 } */
-+const void *s5 = R"$[]$";
-+	/* { dg-error "invalid character" "" { target *-*-* } 19 } */
-+	/* { dg-error "stray" "" { target *-*-* } 19 } */
-+
-+int main () {}
---- gcc/testsuite/gcc.dg/raw-string-6.c.jj	2008-09-12 13:59:33.000000000 +0200
-+++ gcc/testsuite/gcc.dg/raw-string-6.c	2008-09-12 14:03:46.000000000 +0200
-@@ -0,0 +1,5 @@
-+/* { dg-do compile } */
-+/* { dg-options "-std=gnu99" } */
-+
-+const void *s0 = R"ouch[]ouCh";	/* { dg-error "expected expression at end of input" } */
-+	/* { dg-error "unterminated raw string" "" { target *-*-* } 6 } */
---- gcc/testsuite/gcc.dg/raw-string-7.c.jj	2008-09-12 14:27:39.000000000 +0200
-+++ gcc/testsuite/gcc.dg/raw-string-7.c	2008-09-12 14:34:17.000000000 +0200
-@@ -0,0 +1,23 @@
-+/* The trailing whitespace after \ and before newline extension
-+   breaks full compliance for raw strings.  */
-+/* { dg-do run { xfail *-*-* } } */
-+/* { dg-options "-std=gnu99" } */
-+
-+/* Note, there is a single space after \ on the following line.  */
-+const void *s0 = R"[\ 
-+]";
-+/* { dg-bogus "backslash and newline separated by space" "" { xfail *-*-* } 7 } */
-+
-+/* Note, there is a single tab after \ on the following line.  */
-+const void *s1 = R"[\	
-+]";
-+/* { dg-bogus "backslash and newline separated by space" "" { xfail *-*-* } 12 } */
-+
-+int
-+main (void)
-+{
-+  if (__builtin_strcmp (s0, "\\ \n") != 0
-+      || __builtin_strcmp (s1, "\\\t\n") != 0)
-+    __builtin_abort ();
-+  return 0;
-+}
---- gcc/testsuite/gcc.dg/utf8-1.c.jj	2008-09-12 10:01:47.000000000 +0200
-+++ gcc/testsuite/gcc.dg/utf8-1.c	2008-09-12 11:45:48.000000000 +0200
-@@ -0,0 +1,45 @@
-+/* { dg-do run } */
-+/* { dg-require-iconv "ISO-8859-2" } */
-+/* { dg-options "-std=gnu99 -fexec-charset=ISO-8859-2" } */
-+
-+const char *str1 = "h\u00e1\U0000010Dky ";
-+const char *str2 = "\u010d\u00E1rky\n";
-+const char *str3 = u8"h\u00e1\U0000010Dky ";
-+const char *str4 = u8"\u010d\u00E1rky\n";
-+const char *str5 = "h\u00e1\U0000010Dky " "\u010d\u00E1rky\n";
-+const char *str6 = u8"h\u00e1\U0000010Dky " "\u010d\u00E1rky\n";
-+const char *str7 = "h\u00e1\U0000010Dky " u8"\u010d\u00E1rky\n";
-+#define u8
-+const char *str8 = u8"h\u00e1\U0000010Dky " u8"\u010d\u00E1rky\n";
-+
-+const char latin2_1[] = "\x68\xe1\xe8\x6b\x79\x20";
-+const char latin2_2[] = "\xe8\xe1\x72\x6b\x79\n";
-+const char utf8_1[] = "\x68\xc3\xa1\xc4\x8d\x6b\x79\x20";
-+const char utf8_2[] = "\xc4\x8d\xc3\xa1\x72\x6b\x79\n";
-+
-+int
-+main (void)
-+{
-+  if (__builtin_strcmp (str1, latin2_1) != 0
-+      || __builtin_strcmp (str2, latin2_2) != 0
-+      || __builtin_strcmp (str3, utf8_1) != 0
-+      || __builtin_strcmp (str4, utf8_2) != 0
-+      || __builtin_strncmp (str5, latin2_1, sizeof (latin2_1) - 1) != 0
-+      || __builtin_strcmp (str5 + sizeof (latin2_1) - 1, latin2_2) != 0
-+      || __builtin_strncmp (str6, utf8_1, sizeof (utf8_1) - 1) != 0
-+      || __builtin_strcmp (str6 + sizeof (utf8_1) - 1, utf8_2) != 0
-+      || __builtin_strncmp (str7, utf8_1, sizeof (utf8_1) - 1) != 0
-+      || __builtin_strcmp (str7 + sizeof (utf8_1) - 1, utf8_2) != 0
-+      || __builtin_strncmp (str8, utf8_1, sizeof (utf8_1) - 1) != 0
-+      || __builtin_strcmp (str8 + sizeof (utf8_1) - 1, utf8_2) != 0)
-+    __builtin_abort ();
-+  if (sizeof ("a" u8"b"[0]) != 1
-+      || sizeof (u8"a" "b"[0]) != 1
-+      || sizeof (u8"a" u8"b"[0]) != 1
-+      || sizeof ("a" "\u010d") != 3
-+      || sizeof ("a" u8"\u010d") != 4
-+      || sizeof (u8"a" "\u010d") != 4
-+      || sizeof (u8"a" "\u010d") != 4)
-+    __builtin_abort ();
-+  return 0;
-+}
---- gcc/testsuite/gcc.dg/utf8-2.c.jj	2008-09-12 11:27:51.000000000 +0200
-+++ gcc/testsuite/gcc.dg/utf8-2.c	2008-09-12 11:36:48.000000000 +0200
-@@ -0,0 +1,26 @@
-+/* { dg-do compile } */
-+/* { dg-options "-std=gnu99" } */
-+
-+#include <wchar.h>
-+
-+typedef __CHAR16_TYPE__	char16_t;
-+typedef __CHAR32_TYPE__ char32_t;
-+
-+const char	s0[]	= u8"ab";
-+const char16_t	s1[]	= u8"ab";	/* { dg-error "from non-wide" } */
-+const char32_t  s2[]    = u8"ab";	/* { dg-error "from non-wide" } */
-+const wchar_t   s3[]    = u8"ab";	/* { dg-error "from non-wide" } */
-+
-+const char      t0[0]   = u8"ab";	/* { dg-warning "chars is too long" } */
-+const char      t1[1]   = u8"ab";	/* { dg-warning "chars is too long" } */
-+const char      t2[2]   = u8"ab";
-+const char      t3[3]   = u8"ab";
-+const char      t4[4]   = u8"ab";
-+
-+const char      u0[0]   = u8"\u2160.";	/* { dg-warning "chars is too long" } */
-+const char      u1[1]   = u8"\u2160.";	/* { dg-warning "chars is too long" } */
-+const char      u2[2]   = u8"\u2160.";	/* { dg-warning "chars is too long" } */
-+const char      u3[3]   = u8"\u2160.";	/* { dg-warning "chars is too long" } */
-+const char      u4[4]   = u8"\u2160.";
-+const char      u5[5]   = u8"\u2160.";
-+const char      u6[6]   = u8"\u2160.";
---- gcc/testsuite/gcc.dg/utf-badconcat2.c.jj	2008-09-12 11:28:26.000000000 +0200
-+++ gcc/testsuite/gcc.dg/utf-badconcat2.c	2008-09-12 11:30:53.000000000 +0200
-@@ -0,0 +1,15 @@
-+/* Test unsupported concatenation of UTF-8 string literals. */
-+/* { dg-do compile } */
-+/* { dg-options "-std=gnu99" } */
-+
-+void	*s0	= u8"a"   "b";
-+void	*s1	=   "a" u8"b";
-+void	*s2	= u8"a" u8"b";
-+void	*s3	= u8"a"  u"b";	/* { dg-error "non-standard concatenation" } */
-+void	*s4	=  u"a" u8"b";	/* { dg-error "non-standard concatenation" } */
-+void	*s5	= u8"a"  U"b";	/* { dg-error "non-standard concatenation" } */
-+void	*s6	=  U"a" u8"b";	/* { dg-error "non-standard concatenation" } */
-+void	*s7	= u8"a"  L"b";	/* { dg-error "non-standard concatenation" } */
-+void	*s8	=  L"a" u8"b";	/* { dg-error "non-standard concatenation" } */
-+
-+int main () {}
---- gcc/testsuite/gcc.dg/utf-dflt2.c.jj	2008-09-12 11:32:03.000000000 +0200
-+++ gcc/testsuite/gcc.dg/utf-dflt2.c	2008-09-12 13:24:39.000000000 +0200
-@@ -0,0 +1,12 @@
-+/* If not gnu99, the u8 prefix should be parsed as separate tokens. */
-+/* { dg-do compile } */
-+/* { dg-options "" } */
-+
-+const void	*s0 = u8"a";		/* { dg-error "undeclared" } */
-+		/* { dg-error "expected ',' or ';'" "" { target *-*-* } 5 } */
-+
-+#define u8	"a"
-+
-+const void	*s1 = u8"a";
-+
-+int main () {}
---- gcc/testsuite/g++.dg/ext/raw-string-1.C.jj	2008-09-12 11:48:36.000000000 +0200
-+++ gcc/testsuite/g++.dg/ext/raw-string-1.C	2008-09-12 14:18:07.000000000 +0200
-@@ -0,0 +1,96 @@
-+// { dg-do run }
-+// { dg-options "-std=c++0x" }
-+
-+const char s0[] = R"[a\
-+\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb
-+c]";
-+const char s1[] = "a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc";
-+const char s2[] = R"*|*[a\
-+b
-+c]"
-+c]*|"
-+c]*|*";
-+const char s3[] = "ab\nc]\"\nc]*|\"\nc";
-+
-+const char t0[] = u8R"[a\
-+\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb
-+c]";
-+const char t1[] = u8"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc";
-+const char t2[] = u8R"*|*[a\
-+b
-+c]"
-+c]*|"
-+c]*|*";
-+const char t3[] = u8"ab\nc]\"\nc]*|\"\nc";
-+
-+const char16_t u0[] = uR"[a\
-+\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb
-+c]";
-+const char16_t u1[] = u"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc";
-+const char16_t u2[] = uR"*|*[a\
-+b
-+c]"
-+c]*|"
-+c]*|*";
-+const char16_t u3[] = u"ab\nc]\"\nc]*|\"\nc";
-+
-+const char32_t U0[] = UR"[a\
-+\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb
-+c]";
-+const char32_t U1[] = U"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc";
-+const char32_t U2[] = UR"*|*[a\
-+b
-+c]"
-+c]*|"
-+c]*|*";
-+const char32_t U3[] = U"ab\nc]\"\nc]*|\"\nc";
-+
-+const wchar_t L0[] = LR"[a\
-+\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb
-+c]";
-+const wchar_t L1[] = L"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc";
-+const wchar_t L2[] = LR"*|*[a\
-+b
-+c]"
-+c]*|"
-+c]*|*";
-+const wchar_t L3[] = L"ab\nc]\"\nc]*|\"\nc";
-+
-+int
-+main (void)
-+{
-+  if (sizeof (s0) != sizeof (s1)
-+      || __builtin_memcmp (s0, s1, sizeof (s0)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (s2) != sizeof (s3)
-+      || __builtin_memcmp (s2, s3, sizeof (s2)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (t0) != sizeof (t1)
-+      || __builtin_memcmp (t0, t1, sizeof (t0)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (t2) != sizeof (t3)
-+      || __builtin_memcmp (t2, t3, sizeof (t2)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (u0) != sizeof (u1)
-+      || __builtin_memcmp (u0, u1, sizeof (u0)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (u2) != sizeof (u3)
-+      || __builtin_memcmp (u2, u3, sizeof (u2)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (U0) != sizeof (U1)
-+      || __builtin_memcmp (U0, U1, sizeof (U0)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (U2) != sizeof (U3)
-+      || __builtin_memcmp (U2, U3, sizeof (U2)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (L0) != sizeof (L1)
-+      || __builtin_memcmp (L0, L1, sizeof (L0)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (L2) != sizeof (L3)
-+      || __builtin_memcmp (L2, L3, sizeof (L2)) != 0)
-+    __builtin_abort ();
-+  if (sizeof (R"*[]*") != 1
-+      || __builtin_memcmp (R"*[]*", "", 1) != 0)
-+    __builtin_abort ();
-+  return 0;
-+}
---- gcc/testsuite/g++.dg/ext/raw-string-2.C.jj	2008-09-12 12:14:42.000000000 +0200
-+++ gcc/testsuite/g++.dg/ext/raw-string-2.C	2008-09-12 14:18:14.000000000 +0200
-@@ -0,0 +1,104 @@
-+// { dg-do run }
-+// { dg-options "-std=c++0x" }
-+
-+#define R
-+#define u
-+#define uR
-+#define U
-+#define UR
-+#define u8
-+#define u8R
-+#define L
-+#define LR
-+
-+const char s00[] = R"[a]" "[b]";
-+const char s01[] = "[a]" R"*[b]*";
-+const char s02[] = R"[a]" R"[b]";
-+const char s03[] = R"-[a]-" u8"[b]";
-+const char s04[] = "[a]" u8R"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ";
-+const char s05[] = R"[a]" u8R"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL";
-+const char s06[] = u8R";([a];(" "[b]";
-+const char s07[] = u8"[a]" R"[b]";
-+const char s08[] = u8R"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-";
-+const char s09[] = u8R"/^&|~!=,"'\[a]/^&|~!=,"'\" u8"[b]";
-+const char s10[] = u8"[a]" u8R"0123456789abcdef[b]0123456789abcdef";
-+const char s11[] = u8R"ghijklmnopqrstuv[a]ghijklmnopqrstuv" u8R"w[b]w";
-+
-+const char16_t u03[] = R"-[a]-" u"[b]";
-+const char16_t u04[] = "[a]" uR"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ";
-+const char16_t u05[] = R"[a]" uR"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL";
-+const char16_t u06[] = uR";([a];(" "[b]";
-+const char16_t u07[] = u"[a]" R"[b]";
-+const char16_t u08[] = uR"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-";
-+const char16_t u09[] = uR"/^&|~!=,"'\[a]/^&|~!=,"'\" u"[b]";
-+const char16_t u10[] = u"[a]" uR"0123456789abcdef[b]0123456789abcdef";
-+const char16_t u11[] = uR"ghijklmnopqrstuv[a]ghijklmnopqrstuv" uR"w[b]w";
-+
-+const char32_t U03[] = R"-[a]-" U"[b]";
-+const char32_t U04[] = "[a]" UR"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ";
-+const char32_t U05[] = R"[a]" UR"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL";
-+const char32_t U06[] = UR";([a];(" "[b]";
-+const char32_t U07[] = U"[a]" R"[b]";
-+const char32_t U08[] = UR"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-";
-+const char32_t U09[] = UR"/^&|~!=,"'\[a]/^&|~!=,"'\" U"[b]";
-+const char32_t U10[] = U"[a]" UR"0123456789abcdef[b]0123456789abcdef";
-+const char32_t U11[] = UR"ghijklmnopqrstuv[a]ghijklmnopqrstuv" UR"w[b]w";
-+
-+const wchar_t L03[] = R"-[a]-" L"[b]";
-+const wchar_t L04[] = "[a]" LR"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ";
-+const wchar_t L05[] = R"[a]" LR"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL";
-+const wchar_t L06[] = LR";([a];(" "[b]";
-+const wchar_t L07[] = L"[a]" R"[b]";
-+const wchar_t L08[] = LR"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-";
-+const wchar_t L09[] = LR"/^&|~!=,"'\[a]/^&|~!=,"'\" L"[b]";
-+const wchar_t L10[] = L"[a]" LR"0123456789abcdef[b]0123456789abcdef";
-+const wchar_t L11[] = LR"ghijklmnopqrstuv[a]ghijklmnopqrstuv" LR"w[b]w";
-+
-+int
-+main (void)
-+{
-+#define TEST(str, val) \
-+  if (sizeof (str) != sizeof (val) \
-+      || __builtin_memcmp (str, val, sizeof (str)) != 0) \
-+    __builtin_abort ()
-+  TEST (s00, "a[b]");
-+  TEST (s01, "[a]b");
-+  TEST (s02, "ab");
-+  TEST (s03, "a[b]");
-+  TEST (s04, "[a]b");
-+  TEST (s05, "ab");
-+  TEST (s06, "a[b]");
-+  TEST (s07, "[a]b");
-+  TEST (s08, "ab");
-+  TEST (s09, "a[b]");
-+  TEST (s10, "[a]b");
-+  TEST (s11, "ab");
-+  TEST (u03, u"a[b]");
-+  TEST (u04, u"[a]b");
-+  TEST (u05, u"ab");
-+  TEST (u06, u"a[b]");
-+  TEST (u07, u"[a]b");
-+  TEST (u08, u"ab");
-+  TEST (u09, u"a[b]");
-+  TEST (u10, u"[a]b");
-+  TEST (u11, u"ab");
-+  TEST (U03, U"a[b]");
-+  TEST (U04, U"[a]b");
-+  TEST (U05, U"ab");
-+  TEST (U06, U"a[b]");
-+  TEST (U07, U"[a]b");
-+  TEST (U08, U"ab");
-+  TEST (U09, U"a[b]");
-+  TEST (U10, U"[a]b");
-+  TEST (U11, U"ab");
-+  TEST (L03, L"a[b]");
-+  TEST (L04, L"[a]b");
-+  TEST (L05, L"ab");
-+  TEST (L06, L"a[b]");
-+  TEST (L07, L"[a]b");
-+  TEST (L08, L"ab");
-+  TEST (L09, L"a[b]");
-+  TEST (L10, L"[a]b");
-+  TEST (L11, L"ab");
-+  return 0;
-+}
---- gcc/testsuite/g++.dg/ext/raw-string-3.C.jj	2008-09-12 13:27:09.000000000 +0200
-+++ gcc/testsuite/g++.dg/ext/raw-string-3.C	2008-09-12 14:17:57.000000000 +0200
-@@ -0,0 +1,58 @@
-+// If c++98, the {,u,u8,U,L}R prefix should be parsed as separate
-+// token.
-+// { dg-do compile }
-+// { dg-options "-std=c++98" }
-+
-+const void	*s0	= R"[a]";	// { dg-error "was not declared" }
-+		// { dg-error "expected ',' or ';'" "" { target *-*-* } 6 }
-+const void	*s1	= uR"[a]";	// { dg-error "was not declared" }
-+		// { dg-error "expected ',' or ';'" "" { target *-*-* } 8 }
-+const void	*s2	= UR"[a]";	// { dg-error "was not declared" }
-+		// { dg-error "expected ',' or ';'" "" { target *-*-* } 10 }
-+const void	*s3	= u8R"[a]";	// { dg-error "was not declared" }
-+		// { dg-error "expected ',' or ';'" "" { target *-*-* } 12 }
-+const void	*s4	= LR"[a]";	// { dg-error "was not declared" }
-+		// { dg-error "expected ',' or ';'" "" { target *-*-* } 14 }
-+
-+const int	i0	= R'a';	// { dg-error "was not declared" }
-+		// { dg-error "expected ',' or ';'" "" { target *-*-* } 17 }
-+const int	i1	= uR'a';	// { dg-error "was not declared" }
-+		// { dg-error "expected ',' or ';'" "" { target *-*-* } 19 }
-+const int	i2	= UR'a';	// { dg-error "was not declared" }
-+		// { dg-error "expected ',' or ';'" "" { target *-*-* } 21 }
-+const int	i3	= u8R'a';	// { dg-error "was not declared" }
-+		// { dg-error "expected ',' or ';'" "" { target *-*-* } 23 }
-+const int	i4	= LR'a';	// { dg-error "was not declared" }
-+		// { dg-error "expected ',' or ';'" "" { target *-*-* } 25 }
-+
-+#define R	"a"
-+#define uR	"b"
-+#define UR	"c"
-+#define u8R	"d"
-+#define LR	"e"
-+
-+const void	*s5	= R"[a]";
-+const void	*s6	= uR"[a]";
-+const void	*s7	= UR"[a]";
-+const void	*s8	= u8R"[a]";
-+const void	*s9	= LR"[a]";
-+
-+#undef R
-+#undef uR
-+#undef UR
-+#undef u8R
-+#undef LR
-+
-+#define R	1 +
-+#define uR	2 +
-+#define UR	3 +
-+#define u8R	4 +
-+#define LR	5 +
-+
-+const int	i5	= R'a';
-+const int	i6	= uR'a';
-+const int	i7	= UR'a';
-+const int	i8	= u8R'a';
-+const int	i9	= LR'a';
-+
-+int main () {}
---- gcc/testsuite/g++.dg/ext/raw-string-4.C.jj	2008-09-12 13:27:09.000000000 +0200
-+++ gcc/testsuite/g++.dg/ext/raw-string-4.C	2008-09-12 14:18:23.000000000 +0200
-@@ -0,0 +1,28 @@
-+// R is not applicable for character literals.
-+// { dg-do compile }
-+// { dg-options "-std=c++0x" }
-+
-+const int	i0	= R'a';	// { dg-error "was not declared" }
-+		// { dg-error "expected ',' or ';'" "" { target *-*-* } 5 }
-+const int	i1	= uR'a';	// { dg-error "was not declared" }
-+		// { dg-error "expected ',' or ';'" "" { target *-*-* } 7 }
-+const int	i2	= UR'a';	// { dg-error "was not declared" }
-+		// { dg-error "expected ',' or ';'" "" { target *-*-* } 9 }
-+const int	i3	= u8R'a';	// { dg-error "was not declared" }
-+		// { dg-error "expected ',' or ';'" "" { target *-*-* } 11 }
-+const int	i4	= LR'a';	// { dg-error "was not declared" }
-+		// { dg-error "expected ',' or ';'" "" { target *-*-* } 13 }
-+
-+#define R	1 +
-+#define uR	2 +
-+#define UR	3 +
-+#define u8R	4 +
-+#define LR	5 +
-+
-+const int	i5	= R'a';
-+const int	i6	= uR'a';
-+const int	i7	= UR'a';
-+const int	i8	= u8R'a';
-+const int	i9	= LR'a';
-+
-+int main () {}
---- gcc/testsuite/g++.dg/ext/raw-string-5.C.jj	2008-09-12 13:49:58.000000000 +0200
-+++ gcc/testsuite/g++.dg/ext/raw-string-5.C	2008-09-12 14:18:32.000000000 +0200
-@@ -0,0 +1,23 @@
-+// { dg-do compile }
-+// { dg-options "-std=c++0x" }
-+
-+const void *s0 = R"0123456789abcdefg[]0123456789abcdefg";
-+	// { dg-error "raw string delimiter longer" "" { target *-*-* } 4 }
-+	// { dg-error "stray" "" { target *-*-* } 4 }
-+const void *s1 = R" [] ";
-+	// { dg-error "invalid character" "" { target *-*-* } 7 }
-+	// { dg-error "stray" "" { target *-*-* } 7 }
-+const void *s2 = R"	[]	";
-+	// { dg-error "invalid character" "" { target *-*-* } 10 }
-+	// { dg-error "stray" "" { target *-*-* } 10 }
-+const void *s3 = R"][]]";
-+	// { dg-error "invalid character" "" { target *-*-* } 13 }
-+	// { dg-error "stray" "" { target *-*-* } 13 }
-+const void *s4 = R"@[]@";
-+	// { dg-error "invalid character" "" { target *-*-* } 16 }
-+	// { dg-error "stray" "" { target *-*-* } 16 }
-+const void *s5 = R"$[]$";
-+	// { dg-error "invalid character" "" { target *-*-* } 19 }
-+	// { dg-error "stray" "" { target *-*-* } 19 }
-+
-+int main () {}
---- gcc/testsuite/g++.dg/ext/raw-string-6.C.jj	2008-09-12 13:59:33.000000000 +0200
-+++ gcc/testsuite/g++.dg/ext/raw-string-6.C	2008-09-12 14:20:21.000000000 +0200
-@@ -0,0 +1,5 @@
-+// { dg-do compile }
-+// { dg-options "-std=c++0x" }
-+
-+const void *s0 = R"ouch[]ouCh";	// { dg-error "at end of input" }
-+	// { dg-error "unterminated raw string" "" { target *-*-* } 6 }
---- gcc/testsuite/g++.dg/ext/raw-string-7.C.jj	2008-09-12 14:34:54.000000000 +0200
-+++ gcc/testsuite/g++.dg/ext/raw-string-7.C	2008-09-12 14:36:40.000000000 +0200
-@@ -0,0 +1,23 @@
-+// The trailing whitespace after \ and before newline extension
-+// breaks full compliance for raw strings.
-+// { dg-do run { xfail *-*-* } }
-+// { dg-options "-std=c++0x" }
-+
-+// Note, there is a single space after \ on the following line.
-+const char *s0 = R"[\ 
-+]";
-+// { dg-bogus "backslash and newline separated by space" "" { xfail *-*-* } 7 }
-+
-+// Note, there is a single tab after \ on the following line.
-+const char *s1 = R"[\	
-+]";
-+// { dg-bogus "backslash and newline separated by space" "" { xfail *-*-* } 12 }
-+
-+int
-+main (void)
-+{
-+  if (__builtin_strcmp (s0, "\\ \n") != 0
-+      || __builtin_strcmp (s1, "\\\t\n") != 0)
-+    __builtin_abort ();
-+  return 0;
-+}
---- gcc/testsuite/g++.dg/ext/utf8-1.C.jj	2008-09-12 10:01:47.000000000 +0200
-+++ gcc/testsuite/g++.dg/ext/utf8-1.C	2008-09-12 14:18:53.000000000 +0200
-@@ -0,0 +1,45 @@
-+// { dg-do run }
-+// { dg-require-iconv "ISO-8859-2" }
-+// { dg-options "-std=c++0x -fexec-charset=ISO-8859-2" }
-+
-+const char *str1 = "h\u00e1\U0000010Dky ";
-+const char *str2 = "\u010d\u00E1rky\n";
-+const char *str3 = u8"h\u00e1\U0000010Dky ";
-+const char *str4 = u8"\u010d\u00E1rky\n";
-+const char *str5 = "h\u00e1\U0000010Dky " "\u010d\u00E1rky\n";
-+const char *str6 = u8"h\u00e1\U0000010Dky " "\u010d\u00E1rky\n";
-+const char *str7 = "h\u00e1\U0000010Dky " u8"\u010d\u00E1rky\n";
-+#define u8
-+const char *str8 = u8"h\u00e1\U0000010Dky " u8"\u010d\u00E1rky\n";
-+
-+const char latin2_1[] = "\x68\xe1\xe8\x6b\x79\x20";
-+const char latin2_2[] = "\xe8\xe1\x72\x6b\x79\n";
-+const char utf8_1[] = "\x68\xc3\xa1\xc4\x8d\x6b\x79\x20";
-+const char utf8_2[] = "\xc4\x8d\xc3\xa1\x72\x6b\x79\n";
-+
-+int
-+main (void)
-+{
-+  if (__builtin_strcmp (str1, latin2_1) != 0
-+      || __builtin_strcmp (str2, latin2_2) != 0
-+      || __builtin_strcmp (str3, utf8_1) != 0
-+      || __builtin_strcmp (str4, utf8_2) != 0
-+      || __builtin_strncmp (str5, latin2_1, sizeof (latin2_1) - 1) != 0
-+      || __builtin_strcmp (str5 + sizeof (latin2_1) - 1, latin2_2) != 0
-+      || __builtin_strncmp (str6, utf8_1, sizeof (utf8_1) - 1) != 0
-+      || __builtin_strcmp (str6 + sizeof (utf8_1) - 1, utf8_2) != 0
-+      || __builtin_strncmp (str7, utf8_1, sizeof (utf8_1) - 1) != 0
-+      || __builtin_strcmp (str7 + sizeof (utf8_1) - 1, utf8_2) != 0
-+      || __builtin_strncmp (str8, utf8_1, sizeof (utf8_1) - 1) != 0
-+      || __builtin_strcmp (str8 + sizeof (utf8_1) - 1, utf8_2) != 0)
-+    __builtin_abort ();
-+  if (sizeof ("a" u8"b"[0]) != 1
-+      || sizeof (u8"a" "b"[0]) != 1
-+      || sizeof (u8"a" u8"b"[0]) != 1
-+      || sizeof ("a" "\u010d") != 3
-+      || sizeof ("a" u8"\u010d") != 4
-+      || sizeof (u8"a" "\u010d") != 4
-+      || sizeof (u8"a" "\u010d") != 4)
-+    __builtin_abort ();
-+  return 0;
-+}
---- gcc/testsuite/g++.dg/ext/utf8-2.C.jj	2008-09-12 11:27:51.000000000 +0200
-+++ gcc/testsuite/g++.dg/ext/utf8-2.C	2008-09-12 14:19:01.000000000 +0200
-@@ -0,0 +1,21 @@
-+// { dg-do compile }
-+// { dg-options "-std=c++0x" }
-+
-+const char	s0[]	= u8"ab";
-+const char16_t	s1[]	= u8"ab";	// { dg-error "from non-wide" }
-+const char32_t  s2[]    = u8"ab";	// { dg-error "from non-wide" }
-+const wchar_t   s3[]    = u8"ab";	// { dg-error "from non-wide" }
-+
-+const char      t0[0]   = u8"ab";	// { dg-error "chars is too long" }
-+const char      t1[1]   = u8"ab";	// { dg-error "chars is too long" }
-+const char      t2[2]   = u8"ab";	// { dg-error "chars is too long" }
-+const char      t3[3]   = u8"ab";
-+const char      t4[4]   = u8"ab";
-+
-+const char      u0[0]   = u8"\u2160.";	// { dg-error "chars is too long" }
-+const char      u1[1]   = u8"\u2160.";	// { dg-error "chars is too long" }
-+const char      u2[2]   = u8"\u2160.";	// { dg-error "chars is too long" }
-+const char      u3[3]   = u8"\u2160.";	// { dg-error "chars is too long" }
-+const char      u4[4]   = u8"\u2160.";	// { dg-error "chars is too long" }
-+const char      u5[5]   = u8"\u2160.";
-+const char      u6[6]   = u8"\u2160.";
---- gcc/testsuite/g++.dg/ext/utf-badconcat2.C.jj	2008-09-12 11:28:26.000000000 +0200
-+++ gcc/testsuite/g++.dg/ext/utf-badconcat2.C	2008-09-12 14:19:17.000000000 +0200
-@@ -0,0 +1,15 @@
-+// Test unsupported concatenation of UTF-8 string literals.
-+// { dg-do compile }
-+// { dg-options "-std=c++0x" }
-+
-+const void *s0	= u8"a"   "b";
-+const void *s1	=   "a" u8"b";
-+const void *s2	= u8"a" u8"b";
-+const void *s3	= u8"a"  u"b";	// { dg-error "non-standard concatenation" }
-+const void *s4	=  u"a" u8"b";	// { dg-error "non-standard concatenation" }
-+const void *s5	= u8"a"  U"b";	// { dg-error "non-standard concatenation" }
-+const void *s6	=  U"a" u8"b";	// { dg-error "non-standard concatenation" }
-+const void *s7	= u8"a"  L"b";	// { dg-error "non-standard concatenation" }
-+const void *s8	=  L"a" u8"b";	// { dg-error "non-standard concatenation" }
-+
-+int main () {}
---- gcc/testsuite/g++.dg/ext/utf-dflt2.C.jj	2008-09-12 11:32:03.000000000 +0200
-+++ gcc/testsuite/g++.dg/ext/utf-dflt2.C	2008-09-12 14:19:28.000000000 +0200
-@@ -0,0 +1,12 @@
-+// In C++0x, the u8 prefix should be parsed as separate tokens.
-+// { dg-do compile }
-+// { dg-options "-std=c++98" }
-+
-+const void	*s0 = u8"a";		// { dg-error "was not declared" }
-+		// { dg-error "expected ',' or ';'" "" { target *-*-* } 5 }
-+
-+#define u8	"a"
-+
-+const void	*s1 = u8"a";
-+
-+int main () {}

diff --git a/gcc44-vta-rh521991.patch b/gcc44-vta-rh521991.patch
deleted file mode 100644
index c126ad1..0000000
--- a/gcc44-vta-rh521991.patch
+++ /dev/null
@@ -1,181 +0,0 @@
-2009-09-30  Alexandre Oliva  <aoliva@redhat.com>
-
-	* tree-dfa.c (referenced_var_p): New.
-	(remove_referenced_var): Clear renaming mark.
-	* tree-flow.h (referenced_var_p): Declare.
-	(sym_marked_for_renaming, clear_mark_for_renaming): Declare.
-	* tree-into-ssa.c (clear_mark_for_renaming): New.
-	(sym_marked_for_renaming): New.
-	* tree-ssa-operands.c (pop_stmt_changes): Reset debug stmts
-	that reference otherwise-unreferenced variables.
-
-	* gcc.dg/debug/vta-1.c: New.
-
---- gcc/tree-dfa.c.orig	2009-09-30 04:00:45.000000000 -0300
-+++ gcc/tree-dfa.c	2009-09-30 04:01:21.000000000 -0300
-@@ -639,6 +639,23 @@ set_default_def (tree var, tree def)
-    SSA_NAME_IS_DEFAULT_DEF (def) = true;
- }
- 
-+/* Return TRUE if VAR is in the set of referenced variables.  */
-+
-+bool
-+referenced_var_p (tree var)
-+{
-+  struct tree_decl_minimal in;
-+
-+  gcc_assert (DECL_P (var));
-+
-+  if (!gimple_referenced_vars (cfun))
-+    return false;
-+
-+  in.uid = DECL_UID (var);
-+  return htab_find_with_hash (gimple_referenced_vars (cfun), &in, in.uid)
-+    != NULL;
-+}
-+
- /* Add VAR to the list of referenced variables if it isn't already there.  */
- 
- bool
-@@ -686,6 +703,15 @@ remove_referenced_var (tree var)
-   void **loc;
-   unsigned int uid = DECL_UID (var);
- 
-+  /* Symbols that decayed from addressable to gimple registers, but
-+     that are referenced only in debug stmts, may be marked for
-+     renaming, but renaming them would fail once they're no longer
-+     referenced.  Let them rest in peace.  */
-+  if (TREE_CODE (var) != SSA_NAME
-+      && is_gimple_reg (var)
-+      && sym_marked_for_renaming (var))
-+    clear_mark_for_renaming (var);
-+
-   clear_call_clobbered (var);
-   bitmap_clear_bit (gimple_call_used_vars (cfun), uid);
-   if ((v_ann = var_ann (var)))
---- gcc/tree-flow.h.orig	2009-09-30 04:00:46.000000000 -0300
-+++ gcc/tree-flow.h	2009-09-30 04:01:21.000000000 -0300
-@@ -773,6 +773,7 @@ extern void dump_referenced_vars (FILE *
- extern void dump_variable (FILE *, tree);
- extern void debug_variable (tree);
- extern tree get_virtual_var (tree);
-+extern bool referenced_var_p (tree);
- extern bool add_referenced_var (tree);
- extern void remove_referenced_var (tree);
- extern void mark_symbols_for_renaming (gimple);
-@@ -889,7 +890,9 @@ bool name_registered_for_update_p (tree)
- bitmap ssa_names_to_replace (void);
- void release_ssa_name_after_update_ssa (tree);
- void compute_global_livein (bitmap, bitmap);
-+bool sym_marked_for_renaming (tree);
- void mark_sym_for_renaming (tree);
-+void clear_mark_for_renaming (tree);
- void mark_set_for_renaming (bitmap);
- tree get_current_def (tree);
- void set_current_def (tree, tree);
---- gcc/tree-into-ssa.c.orig	2009-09-30 04:00:45.000000000 -0300
-+++ gcc/tree-into-ssa.c	2009-09-30 04:01:21.000000000 -0300
-@@ -2874,6 +2874,37 @@ mark_sym_for_renaming (tree sym)
-     }
- }
- 
-+/* Unregister symbol SYM to be renamed by update_ssa.  SYM must be a
-+   gimple register.  */
-+
-+void
-+clear_mark_for_renaming (tree sym)
-+{
-+  if (need_to_initialize_update_ssa_p)
-+    return;
-+
-+  gcc_assert (is_gimple_reg (sym));
-+
-+  bitmap_clear_bit (syms_to_rename, DECL_UID (sym));
-+
-+  if (bitmap_empty_p (syms_to_rename))
-+    BITMAP_FREE (syms_to_rename);
-+}
-+
-+/* Return true if a symbol is marked for renaming.  This is an
-+   exported interface for symbol_marked_for_renaming.  */
-+
-+bool
-+sym_marked_for_renaming (tree sym)
-+{
-+  if (need_to_initialize_update_ssa_p)
-+    return false;
-+
-+  if (!syms_to_rename)
-+    return false;
-+
-+  return symbol_marked_for_renaming (sym);
-+}
- 
- /* Register all the symbols in SET to be renamed by update_ssa.  */
- 
---- gcc/tree-ssa-operands.c.orig	2009-09-30 04:00:45.000000000 -0300
-+++ gcc/tree-ssa-operands.c	2009-09-30 04:01:21.000000000 -0300
-@@ -2716,9 +2716,22 @@ pop_stmt_changes (gimple *stmt_p)
-   mark_difference_for_renaming (stores, buf->stores);
- 
-   /* Mark all the naked GIMPLE register operands for renaming.  */
--  FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_DEF|SSA_OP_USE)
--    if (DECL_P (op))
--      mark_sym_for_renaming (op);
-+  if (gimple_debug_bind_p (stmt))
-+    {
-+      FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_DEF|SSA_OP_USE)
-+	if (DECL_P (op) && !referenced_var_p (op))
-+	  {
-+	    gimple_debug_bind_reset_value (stmt);
-+	    update_stmt (stmt);
-+	    break;
-+	  }
-+    }
-+  else
-+    {
-+      FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_DEF|SSA_OP_USE)
-+	if (DECL_P (op))
-+	  mark_sym_for_renaming (op);
-+    }
- 
-   /* FIXME, need to add more finalizers here.  Cleanup EH info,
-      recompute invariants for address expressions, add
---- gcc/testsuite/gcc.dg/debug/vta-1.c	1970-01-01 00:00:00.000000000 +0000
-+++ gcc/testsuite/gcc.dg/debug/vta-1.c	2009-09-30 04:01:21.000000000 -0300
-@@ -0,0 +1,35 @@
-+/* https://bugzilla.redhat.com/show_bug.cgi?id=521991#c5
-+
-+   Distilled from Linux XFS source code.  foo, inlined into bar, ends
-+   up with debug stmts referencing the addressable variable b.
-+   Optimization made it non-addressable, and then completely optimized
-+   away, before we got a chance to rename (and discard) the occurrence
-+   in the debug stmt.  When we did, we crashed, attempting to rename
-+   an unreference variable.  */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -g" } */
-+
-+static inline int
-+foo (void *x, unsigned y)
-+{
-+  unsigned z = *(unsigned long *) x % y;
-+  *(unsigned long *) x = *(unsigned long *) x / y;
-+  return z;
-+}
-+
-+struct S
-+{
-+  unsigned t;
-+};
-+
-+void
-+bar (struct S *x, int *y)
-+{
-+  int a = 0;
-+  unsigned long b = x->t;
-+  foo (&b, x->t);
-+  for (;; a++)
-+    if (b)
-+      *y = 1;
-+}

diff --git a/import.log b/import.log
index cd3d10d..356803f 100644
--- a/import.log
+++ b/import.log
@@ -1,2 +1,3 @@
 gcc-4_4_0-0_3:HEAD:gcc-4.4.0-0.3.src.rpm:1232130841
 gcc-4_4_0-5:HEAD:gcc-4.4.0-5.src.rpm:1242291126
+gcc-4_4_2-14_fc13:HEAD:gcc-4.4.2-14.fc13.src.rpm:1259930464

diff --git a/sources b/sources
index 82ebc5e..63d5e1e 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
 2659f09c2e43ef8b7d4406321753f1b2  fastjar-0.97.tar.gz
-18fe22db9e055b13b9cc290f6cbbf1fa  gcc-4.4.1-20091001.tar.bz2
+dcff137d5ba8e70cd5cf8fcd0b34ede6  gcc-4.4.2-20091204.tar.bz2

                 reply	other threads:[~2026-06-29 12:24 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=178273588007.1.3263159773626094524.rpms-gcc-462317c02b50@fedoraproject.org \
    --to=jakub@fedoraproject.org \
    --cc=git-commits@fedoraproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox