aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorOleg Endo <olegendo@gcc.gnu.org>2012-07-10 22:07:29 +0000
committerOleg Endo <olegendo@gcc.gnu.org>2012-07-10 22:07:29 +0000
commitb6d10335317634f1a8c7b587fcf1f2596562c051 (patch)
tree6451f1018340857a61c07e7d05ae477484adfd62 /gcc
parentc03cfe1eee37ec8369d85559af885a697149205a (diff)
downloadgcc-b6d10335317634f1a8c7b587fcf1f2596562c051.zip
gcc-b6d10335317634f1a8c7b587fcf1f2596562c051.tar.gz
gcc-b6d10335317634f1a8c7b587fcf1f2596562c051.tar.bz2
re PR target/53886 (Seg fault in sh_insn_length_adjustment)
PR target/53886 * gcc.c-torture/compile/pr53886.c: New. From-SVN: r189417
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr53886.c68
2 files changed, 73 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ec07297..3de1578 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-07-10 Oleg Endo <olegendo@gcc.gnu.org>
+
+ PR target/53886
+ * gcc.c-torture/compile/pr53886.c: New.
+
2012-07-10 Dehao Chen <dehao@google.com>
* gcc.dg/debug_info_inline.c: New test.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr53886.c b/gcc/testsuite/gcc.c-torture/compile/pr53886.c
new file mode 100644
index 0000000..89b6966
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr53886.c
@@ -0,0 +1,68 @@
+/* PR target/53886 */
+typedef struct asn1_string_st ASN1_BIT_STRING;
+typedef struct bignum_st BIGNUM;
+typedef struct ec_group_st EC_GROUP;
+typedef struct ec_key_st EC_KEY;
+
+struct ec_key_st
+{
+ EC_GROUP *group;
+ BIGNUM *priv_key;
+ unsigned int enc_flag;
+}
+X9_62_PENTANOMIAL;
+typedef struct ec_privatekey_st
+{
+ ASN1_BIT_STRING *publicKey;
+}
+EC_PRIVATEKEY;
+
+extern EC_PRIVATEKEY* EC_PRIVATEKEY_new (void);
+extern void EC_PRIVATEKEY_free (EC_PRIVATEKEY*);
+extern unsigned char* CRYPTO_realloc (char*,int,const char*,int);
+
+int
+i2d_ECPrivateKey (EC_KEY * a, unsigned char **out)
+{
+ int ret = 0, ok = 0;
+ unsigned char *buffer = 0;
+ unsigned buf_len = 0, tmp_len;
+ EC_PRIVATEKEY *priv_key = 0;
+ if (a == 0 || a->group == 0 || a->priv_key == 0)
+ {
+ ERR_put_error (16, (192), ((3 | 64)),
+ "",
+ 1234);
+ goto err;
+ }
+ if ((priv_key = EC_PRIVATEKEY_new ()) == 0)
+ {
+ ERR_put_error (16, (192), ((1 | 64)),
+ "",
+ 1241);
+ goto err;
+ }
+ if (!(a->enc_flag & 0x002))
+ {
+ if (priv_key->publicKey == 0)
+ {
+ goto err;
+ }
+ if (tmp_len > buf_len)
+ {
+ unsigned char *tmp_buffer =
+ CRYPTO_realloc ((char *) buffer, (int) tmp_len, "", 1293);
+ buffer = tmp_buffer;
+ }
+ }
+ if ((ret = i2d_EC_PRIVATEKEY (priv_key, out)) == 0)
+ {
+ }
+ ok = 1;
+err:
+ if (buffer)
+ CRYPTO_free (buffer);
+ if (priv_key)
+ EC_PRIVATEKEY_free (priv_key);
+ return (ok ? ret : 0);
+}