public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
[parent not found: <51ed5d91.a379c20a.3ba8.641fSMTPIN_ADDED_BROKEN@mx.google.com>]
* [PATCH][4.8 backport] Fix PR57735
@ 2013-07-22 16:40 Kyrylo Tkachov
  0 siblings, 0 replies; 8+ messages in thread
From: Kyrylo Tkachov @ 2013-07-22 16:40 UTC (permalink / raw)
  To: gcc-patches; +Cc: rdsandiford, mikpe, 'Richard Biener'

[-- Attachment #1: Type: text/plain, Size: 879 bytes --]

Hi all,

The fix for PR57735 is in current trunk (for a different issue I think), just
needs a backport to 4.8.
It is r198462 by Richard Sandiford:

2013-04-30 Richard Sandiford <rsandifo@linux.vnet.ibm.com>
 	
 	* explow.c (plus_constant): Pass "mode" to immed_double_int_const.
 	Use gen_int_mode rather than GEN_INT.

Ok to backport to the 4.8 branch?

I've attached the testcase that exposed the ICE. I think the ChangeLog would
look like this:


2013-07-22  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

	PR target/57735
	Backport from mainline
	2013-04-30  Richard Sandiford  <rsandifo@linux.vnet.ibm.com>

		* explow.c (plus_constant): Pass "mode" to
immed_double_int_const.
		Use gen_int_mode rather than GEN_INT.
		
2013-07-22  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

	PR target/57735
	* g++.dg/ext/pr57735.C: New test.



Thanks,
Kyrill

[-- Attachment #2: pr57735-test.patch --]
[-- Type: application/octet-stream, Size: 4264 bytes --]

diff --git a/gcc/testsuite/g++.dg/ext/pr57735.C b/gcc/testsuite/g++.dg/ext/pr57735.C
new file mode 100644
index 0000000..0eb9500
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/pr57735.C
@@ -0,0 +1,145 @@
+/* { dg-do compile { target arm*-*-* } } */
+/* { dg-options "-march=armv5te -marm  -mtune=xscale -mfloat-abi=soft -O1" } */
+
+typedef unsigned int size_t;
+__extension__
+typedef long long int int64_t;
+namespace WTF {
+    template<typename T> class RefPtr {
+    public:
+        inline T* operator->() const { return m_ptr; }
+        T* m_ptr;
+    };
+}
+using WTF::RefPtr;
+namespace JSC {
+    class ExecState;
+    class JSString;
+    typedef int64_t EncodedJSValue;
+    class JSValue {
+    public:
+        static EncodedJSValue encode(JSValue);
+        JSString* toString(ExecState*) const;
+    };
+}
+typedef unsigned char LChar;
+    typedef short unsigned int UChar;
+namespace WTF {
+    template<typename T, size_t inlineCapacity = 0>
+    class Vector {
+    public:
+        template<typename U> bool tryAppend(const U*, size_t);
+    };
+}
+using WTF::Vector;
+namespace WTF {
+template<typename CharType> inline bool isASCIIDigit(CharType c)
+{
+}
+template<typename CharType> inline bool isASCIIHexDigit(CharType c)
+{
+    return isASCIIDigit(c) || ((c | 0x20) >= 'a' && (c | 0x20) <= 'f');
+}
+    class StringImpl;
+}
+using WTF::StringImpl;
+namespace WTF {
+class StringImpl {
+public:
+    unsigned length() const { return m_length; }
+    unsigned m_length;
+};
+}
+namespace JSC {
+    class Register {
+    };
+class UString {
+public:
+    unsigned length() const
+    {
+        return m_impl->length();
+    }
+    const LChar* characters8() const
+    {
+    }
+    RefPtr<StringImpl> m_impl;
+};
+    class ExecState : private Register {
+    public:
+        JSValue argument(size_t argument)
+        {
+        }
+    };
+    class JSCell {
+    };
+    class JSString : public JSCell {
+    public:
+        const UString& value(ExecState*) const;
+    };
+class JSStringBuilder {
+public:
+    void append(const UChar u)
+    {
+        m_okay &= buffer16.tryAppend(&u, 1);
+    }
+    Vector<UChar, 64> buffer16;
+    bool m_okay;
+};
+template <typename T>
+class Lexer {
+public:
+    static unsigned char convertHex(int c1, int c2);
+};
+}
+namespace WTF {
+namespace Unicode {
+    int UTF8SequenceLength(char);
+    int decodeUTF8Sequence(const char*);
+}
+}
+using namespace WTF;
+using namespace Unicode;
+namespace JSC {
+template <typename CharType>
+static JSValue decode(ExecState* exec, const CharType* characters, int length, const char* doNotUnescape, bool strict)
+{
+    JSStringBuilder builder;
+    int k = 0;
+    UChar u = 0;
+    while (k < length) {
+        const CharType* p = characters + k;
+        CharType c = *p;
+        if (c == '%') {
+            int charLen = 0;
+            if (k <= length - 3 && isASCIIHexDigit(p[1]) && isASCIIHexDigit(p[2])) {
+                const char b0 = Lexer<CharType>::convertHex(p[1], p[2]);
+                const int sequenceLen = UTF8SequenceLength(b0);
+                if (sequenceLen && k <= length - sequenceLen * 3) {
+                    charLen = sequenceLen * 3;
+                    char sequence[5];
+                    if (charLen != 0) {
+                        const int character = decodeUTF8Sequence(sequence);
+                        if (character < 0 || character >= 0x110000)
+                            charLen = 0;
+                        else if (character >= 0x10000) {
+                            builder.append(static_cast<UChar>(0xD800 | ((character - 0x10000) >> 10)));
+                        } else
+                            u = static_cast<UChar>(character);
+                    }
+                }
+            }
+        }
+    }
+}
+static JSValue decode(ExecState* exec, const char* doNotUnescape, bool strict)
+{
+    UString str = exec->argument(0).toString(exec)->value(exec);
+        return decode(exec, str.characters8(), str.length(), doNotUnescape, strict);
+}
+EncodedJSValue globalFuncDecodeURI(ExecState* exec)
+{
+    static const char do_not_unescape_when_decoding_URI[] =
+        "#$&+,/:;=?@";
+    return JSValue::encode(decode(exec, do_not_unescape_when_decoding_URI, true));
+}
+}

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2013-08-27 10:48 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <51ed5d91.c353b40a.3caf.01fbSMTPIN_ADDED_BROKEN@mx.google.com>
2013-07-22 18:47 ` [PATCH][4.8 backport] Fix PR57735 Richard Sandiford
2013-07-22 18:49   ` Richard Sandiford
2013-07-23  9:18     ` Kyrylo Tkachov
2013-07-29 11:22       ` Kyrylo Tkachov
2013-08-05 14:24         ` Kyrylo Tkachov
2013-08-12 16:26         ` Kyrylo Tkachov
     [not found] <51ed5d91.a379c20a.3ba8.641fSMTPIN_ADDED_BROKEN@mx.google.com>
2013-08-27 11:08 ` Richard Biener
2013-07-22 16:40 Kyrylo Tkachov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).