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