expr.c (do_compare_and_jump): If op0 was replaced by promoted integer constant, use type of op1 for comparison.
* expr.c (do_compare_and_jump): If op0 was replaced by promoted integer constant, use type of op1 for comparison. * g++.old-deja/g++.other/inline17.C: New test. From-SVN: r37605
This commit is contained in:
parent
cd9c4fee8e
commit
6b16805ede
@ -1,3 +1,8 @@
|
||||
2000-11-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* expr.c (do_compare_and_jump): If op0 was replaced by promoted
|
||||
integer constant, use type of op1 for comparison.
|
||||
|
||||
2000-11-20 Stan Shebs <shebs@apple.com>
|
||||
|
||||
* config/rs6000/xm-darwin.h: New file, Darwin host definitions.
|
||||
|
13
gcc/expr.c
13
gcc/expr.c
@ -10054,8 +10054,21 @@ do_compare_and_jump (exp, signed_code, unsigned_code, if_false_label,
|
||||
return;
|
||||
|
||||
op1 = expand_expr_unaligned (TREE_OPERAND (exp, 1), &align1);
|
||||
if (TREE_CODE (TREE_OPERAND (exp, 1)) == ERROR_MARK)
|
||||
return;
|
||||
|
||||
type = TREE_TYPE (TREE_OPERAND (exp, 0));
|
||||
mode = TYPE_MODE (type);
|
||||
if (TREE_CODE (TREE_OPERAND (exp, 0)) == INTEGER_CST
|
||||
&& (TREE_CODE (TREE_OPERAND (exp, 1)) != INTEGER_CST
|
||||
|| (GET_MODE_BITSIZE (mode)
|
||||
> GET_MODE_BITSIZE (TREE_TYPE (TREE_OPERAND (exp, 1))))))
|
||||
{
|
||||
/* op0 might have been replaced by promoted constant, in which
|
||||
case the type of second argument should be used. */
|
||||
type = TREE_TYPE (TREE_OPERAND (exp, 1));
|
||||
mode = TYPE_MODE (type);
|
||||
}
|
||||
unsignedp = TREE_UNSIGNED (type);
|
||||
code = unsignedp ? unsigned_code : signed_code;
|
||||
|
||||
|
@ -1,3 +1,7 @@
|
||||
2000-11-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* g++.old-deja/g++.other/inline17.C: New test.
|
||||
|
||||
2000-11-20 Donald Lindsay <dlindsay@redhat.com>
|
||||
|
||||
* gcc.dg/20000614-2.c: Bug fix. This test expected an unitialized
|
||||
|
22
gcc/testsuite/g++.old-deja/g++.other/inline17.C
Normal file
22
gcc/testsuite/g++.old-deja/g++.other/inline17.C
Normal file
@ -0,0 +1,22 @@
|
||||
// Build don't link:
|
||||
// Origin: Jakub Jelinek <jakub@redhat.com>
|
||||
// Special g++ Options: -O3
|
||||
|
||||
struct foo
|
||||
{
|
||||
char a;
|
||||
foo ();
|
||||
void bar ();
|
||||
void baz (char c);
|
||||
};
|
||||
|
||||
void foo::baz (char c)
|
||||
{
|
||||
if (c != a)
|
||||
a = c;
|
||||
}
|
||||
|
||||
void foo::bar ()
|
||||
{
|
||||
baz (1);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user