aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-04-18 15:15:46 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2017-04-18 15:15:46 +0200
commit8487c9a550dea622f89a146178e666660c1b2962 (patch)
tree717ea5c5171337c44df6adde03d5f5eda78543ad /gcc
parent38d68cf0f5dae47c558e2ea2a9bf652788a19eeb (diff)
downloadgcc-8487c9a550dea622f89a146178e666660c1b2962.zip
gcc-8487c9a550dea622f89a146178e666660c1b2962.tar.gz
gcc-8487c9a550dea622f89a146178e666660c1b2962.tar.bz2
re PR middle-end/79788 (ICE in expand_expr_real_2, at expr.c:9557)
PR middle-end/79788 PR middle-end/80375 * c-common.c (c_common_type_for_mode): Don't handle widest_*_literal_type_node here. c_common_signed_or_unsigned_type): Likewise. (c_common_nodes_and_builtins): Set widest_*_literal_type_node to *intTI_type_node or *intDI_type_node depending on whether TImode is supported by the target or not. * gcc.dg/pr79788-1.c: New test. * gcc.dg/pr79788-2.c: New test. From-SVN: r246965
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-family/ChangeLog11
-rw-r--r--gcc/c-family/c-common.c31
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gcc.dg/pr79788-1.c11
-rw-r--r--gcc/testsuite/gcc.dg/pr79788-2.c11
5 files changed, 50 insertions, 21 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index ff6edbd..10cf761 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,14 @@
+2017-04-18 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/79788
+ PR middle-end/80375
+ * c-common.c (c_common_type_for_mode): Don't handle
+ widest_*_literal_type_node here.
+ c_common_signed_or_unsigned_type): Likewise.
+ (c_common_nodes_and_builtins): Set widest_*_literal_type_node
+ to *intTI_type_node or *intDI_type_node depending on whether
+ TImode is supported by the target or not.
+
2017-04-10 Martin Liska <mliska@suse.cz>
PR sanitizer/80350
diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index 824fdc7..26d5be3 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -2179,10 +2179,6 @@ c_common_type_for_mode (machine_mode mode, int unsignedp)
return (unsignedp ? int_n_trees[i].unsigned_type
: int_n_trees[i].signed_type);
- if (mode == TYPE_MODE (widest_integer_literal_type_node))
- return unsignedp ? widest_unsigned_literal_type_node
- : widest_integer_literal_type_node;
-
if (mode == QImode)
return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
@@ -2412,8 +2408,6 @@ c_common_signed_or_unsigned_type (int unsignedp, tree type)
return (unsignedp ? int_n_trees[i].unsigned_type
: int_n_trees[i].signed_type);
- if (type1 == widest_integer_literal_type_node || type1 == widest_unsigned_literal_type_node)
- return unsignedp ? widest_unsigned_literal_type_node : widest_integer_literal_type_node;
#if HOST_BITS_PER_WIDE_INT >= 64
if (type1 == intTI_type_node || type1 == unsigned_intTI_type_node)
return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
@@ -2534,10 +2528,6 @@ c_common_signed_or_unsigned_type (int unsignedp, tree type)
return (unsignedp ? int_n_trees[i].unsigned_type
: int_n_trees[i].signed_type);
- if (TYPE_OK (widest_integer_literal_type_node))
- return (unsignedp ? widest_unsigned_literal_type_node
- : widest_integer_literal_type_node);
-
#if HOST_BITS_PER_WIDE_INT >= 64
if (TYPE_OK (intTI_type_node))
return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
@@ -4164,17 +4154,16 @@ c_common_nodes_and_builtins (void)
#endif
/* Create the widest literal types. */
- widest_integer_literal_type_node
- = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
- lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
- TYPE_DECL, NULL_TREE,
- widest_integer_literal_type_node));
-
- widest_unsigned_literal_type_node
- = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
- lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
- TYPE_DECL, NULL_TREE,
- widest_unsigned_literal_type_node));
+ if (targetm.scalar_mode_supported_p (TImode))
+ {
+ widest_integer_literal_type_node = intTI_type_node;
+ widest_unsigned_literal_type_node = unsigned_intTI_type_node;
+ }
+ else
+ {
+ widest_integer_literal_type_node = intDI_type_node;
+ widest_unsigned_literal_type_node = unsigned_intDI_type_node;
+ }
signed_size_type_node = c_common_signed_type (size_type_node);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index db98764..728f2cf 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2017-04-18 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/79788
+ PR middle-end/80375
+ * gcc.dg/pr79788-1.c: New test.
+ * gcc.dg/pr79788-2.c: New test.
+
2017-04-18 Marek Polacek <polacek@redhat.com>
PR c++/80244 - ICE with attribute in template alias.
diff --git a/gcc/testsuite/gcc.dg/pr79788-1.c b/gcc/testsuite/gcc.dg/pr79788-1.c
new file mode 100644
index 0000000..5ad546c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr79788-1.c
@@ -0,0 +1,11 @@
+/* PR middle-end/79788 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+long long
+foo (long long x, long long y)
+{
+ if (y > 1234567891234567891234567891234567812 / x) /* { dg-warning "integer constant is too large for its type" } */
+ return x;
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr79788-2.c b/gcc/testsuite/gcc.dg/pr79788-2.c
new file mode 100644
index 0000000..c9447b1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr79788-2.c
@@ -0,0 +1,11 @@
+/* PR middle-end/79788 */
+/* { dg-do compile } */
+/* { dg-options "-ftrapv" } */
+
+void bar (void);
+void
+foo (long long int p, long long int q)
+{
+ if (p >= 1234567891234567891234567891234567812 + q) /* { dg-warning "integer constant is too large for its type" } */
+ bar ();
+}