diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-04-18 15:15:46 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-04-18 15:15:46 +0200 |
commit | 8487c9a550dea622f89a146178e666660c1b2962 (patch) | |
tree | 717ea5c5171337c44df6adde03d5f5eda78543ad /gcc | |
parent | 38d68cf0f5dae47c558e2ea2a9bf652788a19eeb (diff) | |
download | gcc-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/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/c-family/c-common.c | 31 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr79788-1.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr79788-2.c | 11 |
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 (); +} |