TESTSUITE: Fix tests for 16-bit targets

Message ID 20200515172642.wqzdmnr35qc3dhxe@jozef-acer-manjaro
State New
Headers show
Series
  • TESTSUITE: Fix tests for 16-bit targets
Related show

Commit Message

Jozef Lawrynowicz May 15, 2020, 5:26 p.m.
The attached patch fixes many GCC and G++ tests for 16-bit targets. These
targets can have the following properties:
- "int", "size_t", "ptrdiff_t", "void *" are 16-bit types
- sizeof(int) == sizeof(short)

These properties cause problems for a number of tests in the testsuite,
where int is often assumed to be a 32-bit type (and the test relies on that
property to run as expected or to not generate any unexpected warnings).
Other failures occur when arrays larger than what is supported for 16-bit
targets are declared, or the "short" type is expected to be smaller than "int".

The fixes fall into a few different categories:
- Explicitly defining a 32-bit int type and using that in place of "int" or
  "unsigned int".
- Skipping tests which rely on arrays sized larger than what is supported by the
  target.
- Adding or adjusting dg-{warning,error} directives
- Other testcase specific adjustments.

I've successfully regtested the patch on x86_64-pc-linux-gnu and msp430-elf in
the default, -mlarge and -mcpu=msp430 configurations.

There are no absolute changes to testresults on x86_64-pc-linux-gnu, but because
of changes to the line number of dg-{warning,message,error,etc} directives, the
results comparison shows:
UNTESTED->FAIL: 8 tests
UNTESTED->PASS: 986 tests
PASS->UNTESTED: 986 tests
FAIL->UNTESTED: 8 tests

Across the 3 configurations for msp430, the total is:
PASS->FAIL: 0 tests
FAIL->PASS: 1108 tests
UNTESTED->FAIL: 24 tests
UNTESTED->PASS: 2924 tests
FAIL->UNTESTED: 807 tests
PASS->UNTESTED: 2564 tests

Ok for trunk?

What about for gcc-10 branch? It would be nice to clean up the testresults for
MSP430, but I understand if it is undesirable to cause these line number changes
to appear on the stable branch.

Jozef
From 7696941c75cf7d0cfbfb25dfd9c239e28314f570 Mon Sep 17 00:00:00 2001
From: Jozef Lawrynowicz <jozef.l@mittosystems.com>

Date: Tue, 12 May 2020 14:27:41 +0100
Subject: [PATCH] TESTSUITE: Fix tests for 16-bit targets

gcc/ChangeLog:

2020-05-15  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* doc/sourcebuild.texi: Document new short_eq_int, ptr_eq_short,
	ptr_eq_int, msp430_large_memory_model and size24plus DejaGNU effective
	targets.
	Improve grammar in descriptions for size20plus and size32plus effective
	targets.

gcc/testsuite/ChangeLog:

2020-05-15  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* c-c++-common/builtin-has-attribute-7.c: Require size24plus.
	* c-c++-common/cpp/pr63831-1.c: Store result in _has_cpp_attribute in a
	long.
	* c-c++-common/pr81376.c: Skip scan-tree-dump for short_eq_int. Extend
	test for short_eq_int.
	* g++.dg/abi/scoped1.C: Skip dg-warning tests for short_eq_int.
	* g++.dg/cpp0x/constexpr-70001-1.C: Require size24plus.
	* g++.dg/cpp0x/constexpr-bitfield3.C: Require int32plus.
	* g++.dg/cpp0x/enum13.C: Skip dg-warning for short_eq_int.
	* g++.dg/cpp0x/initlist5.C: Add dg-error for short_eq_int.
	* g++.dg/cpp0x/initlist7.C: Add dg-warning for !int32plus.
	* g++.dg/cpp0x/nullptr04.C: Skip dg-error for ptr_eq_short.
	* g++.dg/cpp0x/variadic-value1.C: Add typedef for int32_t.
	* g++.dg/cpp1y/constexpr-arith-overflow.C: Fix test for
	sizeof(int) == sizeof(short).
	* g++.dg/cpp1y/digit-sep-neg.C: Add typedef for int32_t.
	* g++.dg/cpp1y/pr57644.C: Add typedef for uint32_t.
	* g++.dg/cpp1y/pr77321.C: Require size24plus.
	* g++.dg/cpp1y/var-templ4.C: Add typedef for int32_t.
	* g++.dg/cpp1z/direct-enum-init1.C: Skip dg-error for short_eq_int.
	* g++.dg/delayedfold/fwrapv1.C: Skip for int16.
	* g++.dg/expr/bitfield9.C: Add typedef for int32_t.
	* g++.dg/ext/attribute-test-1.C: Add typedef for uint32_t.
	* g++.dg/ext/bitfield1.C: Add typedef for int32_t.
	* g++.dg/ext/flexary13.C: Add typedef for int32_t.
	* g++.dg/ext/utf-cvt.C: Adjust dg-warning for int16.
	* g++.dg/ext/vector28.C: Add typedef for int32_t.
	* g++.dg/ext/vla15.C: Add typedef for int32_t.
	* g++.dg/init/array11.C: Require size32plus.
	* g++.dg/init/array15.C: Require size24plus.
	* g++.dg/init/array4.C: Require size20plus.
	* g++.dg/init/const7.C: Skip dg-message for ptr_eq_int.
	* g++.dg/init/new38.C: Relax regex in dg-error.
	* g++.dg/init/new44.C: Skip dg-error for when ptr_eq_int.
	Adjust test for 16-bit size_t.
	Add special case for msp430 -mlarge.
	* g++.dg/init/value9.C: Add typedef for int32_t.
	* g++.dg/ipa/pr77333.C: Add typedef for int32_t.
	* g++.dg/lto/20080908-1_0.C: Add typedef for int32_t.
	* g++.dg/opt/pr55717.C: Add typedef for uint32_t.
	* g++.dg/opt/pr60597.C: Add typedef for int32_t.
	* g++.dg/opt/pr81715.C: Require size20plus.
	* g++.dg/opt/reload3.C: Add typedef for uint32_t.
	* g++.dg/opt/temp2.C: Require size20plus.
	* g++.dg/opt/thunk1.C: Likewise.
	* g++.dg/other/error23.C: Dont assume __SIZEOF_INT__ == 4.
	* g++.dg/other/pr31078.C: Adjust typedef for 32-bit int.
	* g++.dg/parse/concat1.C: Skip dg-error for size20plus.
	* g++.dg/parse/defarg5.C: Add typedef for int32_t and uint32_t.
	* g++.dg/pr48484.C: Add typedef for int32_t.
	* g++.dg/pr53037-2.C: Likewise.
	* g++.dg/pr53037-3.C: Likewise.
	* g++.dg/pr66655.C: Use int32_t.
	* g++.dg/pr66655.h: Add typedef for int32_t.
	* g++.dg/pr66655_1.cc: Use int32_t.
	* g++.dg/pr67351.C: Define 32-bit uint.
	* g++.dg/template/array30.C: Add typedef for int32_t.
	* g++.dg/template/constant1.C: Extend test for 8-bit and 16-bit int.
	* g++.dg/template/constant2.C: Likewise.
	* g++.dg/template/friend18.C: Add typedef for int32_t.
	* g++.dg/template/pr68978.C: Likewise.
	* g++.dg/torture/pr37421.C: Require int_eq_float.
	* g++.dg/torture/pr88861.C: Handle 16-bit int.
	* g++.dg/tree-ssa/pr19807.C: Likewise.
	* g++.dg/tree-ssa/pr27291.C: Fix typedef for uint32_t.
	* g++.dg/tree-ssa/pr49516.C: Fix typedefs for int{16,32}_t and
	uint{32,64}_t.
	* g++.dg/warn/Wconversion-integer.C: Add typedefs for {u,}int32_t.
	* g++.dg/warn/Wconversion-null-2.C: Adjust g() declaration.
	* g++.dg/warn/Wconversion-null.C: Likewise.
	* g++.dg/warn/Wconversion3.C: Skip dg-warning for short_eq_int.
	* g++.dg/warn/Wduplicated-branches1.C: Add dg-warning for short_eq_int.
	* g++.dg/warn/Wplacement-new-size-5.C: Add typedef for int32_t.
	* g++.dg/warn/Wplacement-new-size.C: Likewise.
	* g++.dg/warn/Wstrict-aliasing-5.C: Add typedef for uint32_t.
	* g++.dg/warn/Wstrict-aliasing-bogus-signed-unsigned.C: Add typedef for
	{u,}int32_t.
	* g++.dg/warn/Wtype-limits-Wextra.C: Adjust dg-warning for
	short_eq_int.
	* g++.dg/warn/Wtype-limits.C: Likewise.
	* g++.old-deja/g++.brendan/enum11.C: Add typedef for uint32_t.
	* g++.old-deja/g++.bugs/900227_01.C: Skip dg-error for ptr_eq_short.
	* g++.old-deja/g++.mike/ns15.C: Require size20plus.
	* g++.old-deja/g++.other/exprstmt1.C: Add typedef for uint32_t.
	* g++.old-deja/g++.other/inline12.C: Adjust udword typedef.
	* g++.old-deja/g++.other/new6.C: Add typedef for int32_t.
	* g++.old-deja/g++.pt/crash16.C: Skip for int16.
	* g++.old-deja/g++.robertl/eb76.C: Likewise.
	* g++.old-deja/g++.warn/flow1.C: Add typedef for int32_t.
	* gcc.dg/Walloca-14.c: Adjust -Walloca-larger-than= parameter for
	!ptr32plus.
	* gcc.dg/Warray-bounds-32.c: Adjust dg-warning for size20plus.
	* gcc.dg/Wbuiltin-declaration-mismatch-4.c: Adjust dg-warning for
	short_eq_int.
	Handle case where ptrdiff_t/size_t is __int20.
	* gcc.dg/concat2.c: Skip dg-error for size20plus.
	* gcc.dg/fold-convmaxconv-1.c: Add typedef for {u,}int32_t;
	* gcc.dg/fold-convminconv-1.c: Likewise.
	* gcc.dg/graphite/scop-4.c: Require size20plus.
	* gcc.dg/loop-versioning-1.c: Adjust test for small size_t.
	* gcc.dg/loop-versioning-2.c: Require size20plus.
	* gcc.dg/lto/20081210-1_0.c: Adjust typedef for uintptr_t.
	* gcc.dg/lto/pr85870_0.c: Add typedef for uint32_t;
	* gcc.dg/lto/pr85870_1.c: Likewise.
	* gcc.dg/pr36227.c: Adjust typedef for ptrcast;
	* gcc.dg/pr42611.c: First check for size_t equality with void *
	before trying other types.
	* gcc.dg/pr59963-2.c: Skip dg-warning for int16 instead of
	xfail.
	* gcc.dg/pr68317.c: Add typedef for int32_t.
	* gcc.dg/pr78973.c: Adjust dg-warning for int16.
	* gcc.dg/pr85859.c: Cast using __INTPTR_TYPE__ instead of long.
	* gcc.dg/pr86179.c: Add typedef for {u,}int32_t;
	* gcc.dg/torture/20181024-1.c: Require size32plus.
	* gcc.dg/torture/pr71598-2.c: Skip for short_eq_int.
	* gcc.dg/torture/pr86034.c: Add typedef for int32_t.
	* gcc.dg/tree-ssa/builtin-sprintf-warn-3.c: Adjust dg-warning
	for int16 and msp430 -mlarge.
	* gcc.dg/tree-ssa/integer-addr.c: Use __INTPTR_MAX__ for a large
	constant that is a valid address.
	* gcc.dg/tree-ssa/loop-interchange-10.c: Add typedef for
	int32_t.
	* gcc.dg/tree-ssa/pr84436-3.c: Adjust dg-final for int16.
	* gcc.dg/tree-ssa/pr84648.c: Add typedef for uint32_t.
	* gcc.dg/tree-ssa/scev-8.c: Cast to char if sizeof(int) ==
	sizeof(short).
	* gcc.dg/tree-ssa/ssa-dom-thread-8.c: Adjust test for msp430 -mlarge.
	* lib/target-supports.exp (check_effective_target_size24plus): New.
	(check_effective_target_short_eq_int): New.
	(check_effective_target_ptr_eq_short): New.
	(check_effective_target_ptr_eq_int): New.
	(check_effective_target_msp430_large_memory_model): New.
---
 gcc/doc/sourcebuild.texi                      |  24 +-
 .../c-c++-common/builtin-has-attribute-7.c    |   3 +-
 gcc/testsuite/c-c++-common/cpp/pr63831-1.c    |   2 +-
 gcc/testsuite/c-c++-common/pr81376.c          |   9 +-
 gcc/testsuite/g++.dg/abi/scoped1.C            |  20 +-
 .../g++.dg/cpp0x/constexpr-70001-1.C          |   1 +
 .../g++.dg/cpp0x/constexpr-bitfield3.C        |   1 +
 gcc/testsuite/g++.dg/cpp0x/enum13.C           |   2 +-
 gcc/testsuite/g++.dg/cpp0x/initlist5.C        |   2 +-
 gcc/testsuite/g++.dg/cpp0x/initlist7.C        |   2 +-
 gcc/testsuite/g++.dg/cpp0x/nullptr04.C        |   4 +-
 gcc/testsuite/g++.dg/cpp0x/variadic-value1.C  |   6 +-
 .../g++.dg/cpp1y/constexpr-arith-overflow.C   |  18 +-
 gcc/testsuite/g++.dg/cpp1y/digit-sep-neg.C    |  10 +-
 gcc/testsuite/g++.dg/cpp1y/pr57644.C          |   4 +-
 gcc/testsuite/g++.dg/cpp1y/pr77321.C          |   1 +
 gcc/testsuite/g++.dg/cpp1y/var-templ4.C       |   8 +-
 .../g++.dg/cpp1z/direct-enum-init1.C          |   6 +-
 gcc/testsuite/g++.dg/delayedfold/fwrapv1.C    |   1 +
 gcc/testsuite/g++.dg/expr/bitfield9.C         |   4 +-
 gcc/testsuite/g++.dg/ext/attribute-test-1.C   |  12 +-
 gcc/testsuite/g++.dg/ext/bitfield1.C          |   6 +-
 gcc/testsuite/g++.dg/ext/flexary13.C          |  10 +-
 gcc/testsuite/g++.dg/ext/utf-cvt.C            |  16 +-
 gcc/testsuite/g++.dg/ext/vector28.C           |   4 +-
 gcc/testsuite/g++.dg/ext/vla15.C              |   4 +-
 gcc/testsuite/g++.dg/init/array11.C           |   1 +
 gcc/testsuite/g++.dg/init/array15.C           |   1 +
 gcc/testsuite/g++.dg/init/array4.C            |   1 +
 gcc/testsuite/g++.dg/init/const7.C            |   2 +-
 gcc/testsuite/g++.dg/init/new38.C             |   2 +-
 gcc/testsuite/g++.dg/init/new44.C             |  54 ++--
 gcc/testsuite/g++.dg/init/value9.C            |   4 +-
 gcc/testsuite/g++.dg/ipa/pr77333.C            |   4 +-
 gcc/testsuite/g++.dg/lto/20080908-1_0.C       |  21 +-
 gcc/testsuite/g++.dg/opt/pr55717.C            |   4 +-
 gcc/testsuite/g++.dg/opt/pr60597.C            |  30 ++-
 gcc/testsuite/g++.dg/opt/pr81715.C            |   1 +
 gcc/testsuite/g++.dg/opt/reload3.C            |   4 +-
 gcc/testsuite/g++.dg/opt/temp2.C              |   1 +
 gcc/testsuite/g++.dg/opt/thunk1.C             |   3 +-
 gcc/testsuite/g++.dg/other/error23.C          |   2 +-
 gcc/testsuite/g++.dg/other/pr31078.C          |   3 +-
 gcc/testsuite/g++.dg/parse/concat1.C          |   2 +-
 gcc/testsuite/g++.dg/parse/defarg5.C          |   7 +-
 gcc/testsuite/g++.dg/pr48484.C                |   8 +-
 gcc/testsuite/g++.dg/pr53037-2.C              |  12 +-
 gcc/testsuite/g++.dg/pr53037-3.C              |  12 +-
 gcc/testsuite/g++.dg/pr66655.C                |   4 +-
 gcc/testsuite/g++.dg/pr66655.h                |   6 +-
 gcc/testsuite/g++.dg/pr66655_1.cc             |   8 +-
 gcc/testsuite/g++.dg/pr67351.C                |   2 +-
 gcc/testsuite/g++.dg/template/array30.C       |   6 +-
 gcc/testsuite/g++.dg/template/constant1.C     |   6 +
 gcc/testsuite/g++.dg/template/constant2.C     |   6 +
 gcc/testsuite/g++.dg/template/friend18.C      |   6 +-
 gcc/testsuite/g++.dg/template/pr68978.C       |  24 +-
 gcc/testsuite/g++.dg/torture/pr37421.C        |   1 +
 gcc/testsuite/g++.dg/torture/pr88861.C        |   4 +
 gcc/testsuite/g++.dg/tree-ssa/pr19807.C       |   2 +-
 gcc/testsuite/g++.dg/tree-ssa/pr27291.C       |  14 +-
 gcc/testsuite/g++.dg/tree-ssa/pr49516.C       |  32 +--
 .../g++.dg/warn/Wconversion-integer.C         |  13 +-
 .../g++.dg/warn/Wconversion-null-2.C          |  12 +-
 gcc/testsuite/g++.dg/warn/Wconversion-null.C  |  12 +-
 gcc/testsuite/g++.dg/warn/Wconversion3.C      |   2 +-
 .../g++.dg/warn/Wduplicated-branches1.C       |   2 +-
 .../g++.dg/warn/Wplacement-new-size-5.C       |  10 +-
 .../g++.dg/warn/Wplacement-new-size.C         | 248 +++++++++---------
 .../g++.dg/warn/Wstrict-aliasing-5.C          |   4 +-
 .../Wstrict-aliasing-bogus-signed-unsigned.C  |   8 +-
 .../g++.dg/warn/Wtype-limits-Wextra.C         |  12 +-
 gcc/testsuite/g++.dg/warn/Wtype-limits.C      |  12 +-
 .../g++.old-deja/g++.brendan/enum11.C         |   3 +-
 .../g++.old-deja/g++.bugs/900227_01.C         |   2 +-
 gcc/testsuite/g++.old-deja/g++.mike/ns15.C    |   1 +
 .../g++.old-deja/g++.other/exprstmt1.C        |  21 +-
 .../g++.old-deja/g++.other/inline12.C         |   2 +-
 gcc/testsuite/g++.old-deja/g++.other/new6.C   |   8 +-
 gcc/testsuite/g++.old-deja/g++.pt/crash16.C   |   1 +
 gcc/testsuite/g++.old-deja/g++.robertl/eb76.C |   1 +
 gcc/testsuite/g++.old-deja/g++.warn/flow1.C   |   6 +-
 gcc/testsuite/gcc.dg/Walloca-14.c             |   3 +-
 gcc/testsuite/gcc.dg/Warray-bounds-32.c       |   4 +-
 .../gcc.dg/Wbuiltin-declaration-mismatch-4.c  |   6 +-
 gcc/testsuite/gcc.dg/concat2.c                |   2 +-
 gcc/testsuite/gcc.dg/fold-convmaxconv-1.c     |   7 +-
 gcc/testsuite/gcc.dg/fold-convminconv-1.c     |   7 +-
 gcc/testsuite/gcc.dg/graphite/scop-4.c        |   2 +
 gcc/testsuite/gcc.dg/loop-versioning-1.c      |   4 +
 gcc/testsuite/gcc.dg/loop-versioning-2.c      |   2 +-
 gcc/testsuite/gcc.dg/lto/20081210-1_0.c       |   8 +-
 gcc/testsuite/gcc.dg/lto/pr85870_0.c          |  10 +-
 gcc/testsuite/gcc.dg/lto/pr85870_1.c          |  10 +-
 gcc/testsuite/gcc.dg/pr36227.c                |  10 +-
 gcc/testsuite/gcc.dg/pr42611.c                |   3 +-
 gcc/testsuite/gcc.dg/pr59963-2.c              |   2 +-
 gcc/testsuite/gcc.dg/pr68317.c                |  10 +-
 gcc/testsuite/gcc.dg/pr78973.c                |   2 +-
 gcc/testsuite/gcc.dg/pr85859.c                |   2 +-
 gcc/testsuite/gcc.dg/pr86179.c                |  13 +-
 gcc/testsuite/gcc.dg/torture/20181024-1.c     |   1 +
 gcc/testsuite/gcc.dg/torture/pr71598-2.c      |   1 +
 gcc/testsuite/gcc.dg/torture/pr86034.c        |  12 +-
 .../gcc.dg/tree-ssa/builtin-sprintf-warn-3.c  |  32 +--
 gcc/testsuite/gcc.dg/tree-ssa/integer-addr.c  |   2 +-
 .../gcc.dg/tree-ssa/loop-interchange-10.c     |  10 +-
 gcc/testsuite/gcc.dg/tree-ssa/pr84436-3.c     |   2 +-
 gcc/testsuite/gcc.dg/tree-ssa/pr84648.c       |   4 +-
 gcc/testsuite/gcc.dg/tree-ssa/scev-8.c        |   8 +-
 .../gcc.dg/tree-ssa/ssa-dom-thread-8.c        |  12 +-
 gcc/testsuite/lib/target-supports.exp         |  47 ++++
 112 files changed, 648 insertions(+), 450 deletions(-)

-- 
2.26.2

Comments

Jason Merrill via Gcc-patches May 15, 2020, 6:55 p.m. | #1
On Fri, 2020-05-15 at 18:26 +0100, Jozef Lawrynowicz wrote:
> The attached patch fixes many GCC and G++ tests for 16-bit targets. These

> targets can have the following properties:

> - "int", "size_t", "ptrdiff_t", "void *" are 16-bit types

> - sizeof(int) == sizeof(short)

> 

> These properties cause problems for a number of tests in the testsuite,

> where int is often assumed to be a 32-bit type (and the test relies on that

> property to run as expected or to not generate any unexpected warnings).

> Other failures occur when arrays larger than what is supported for 16-bit

> targets are declared, or the "short" type is expected to be smaller than "int".

> 

> The fixes fall into a few different categories:

> - Explicitly defining a 32-bit int type and using that in place of "int" or

>   "unsigned int".

> - Skipping tests which rely on arrays sized larger than what is supported by

> the

>   target.

> - Adding or adjusting dg-{warning,error} directives

> - Other testcase specific adjustments.

> 

> I've successfully regtested the patch on x86_64-pc-linux-gnu and msp430-elf in

> the default, -mlarge and -mcpu=msp430 configurations.

> 

> There are no absolute changes to testresults on x86_64-pc-linux-gnu, but

> because

> of changes to the line number of dg-{warning,message,error,etc} directives, the

> results comparison shows:

> UNTESTED->FAIL: 8 tests

> UNTESTED->PASS: 986 tests

> PASS->UNTESTED: 986 tests

> FAIL->UNTESTED: 8 tests

> 

> Across the 3 configurations for msp430, the total is:

> PASS->FAIL: 0 tests

> FAIL->PASS: 1108 tests

> UNTESTED->FAIL: 24 tests

> UNTESTED->PASS: 2924 tests

> FAIL->UNTESTED: 807 tests

> PASS->UNTESTED: 2564 tests

> 

> Ok for trunk?

> 

> What about for gcc-10 branch? It would be nice to clean up the testresults for

> MSP430, but I understand if it is undesirable to cause these line number

> changes

> to appear on the stable branch.

OK for the trunk.  I suspect the release managers wouldn't want it for the branch
though.  

jeff
Joseph Myers May 15, 2020, 10:48 p.m. | #2
On Fri, 15 May 2020, Jozef Lawrynowicz wrote:

> The attached patch fixes many GCC and G++ tests for 16-bit targets. These

> targets can have the following properties:

> - "int", "size_t", "ptrdiff_t", "void *" are 16-bit types

> - sizeof(int) == sizeof(short)


Some of the tests are disabled by the patch for the case where pointers 
are the same size as int.  Were those tests all previously failing for 
32-bit targets where that's the case?  If not, ptr_eq_int seems an 
inappropriate condition for disabling them.

-- 
Joseph S. Myers
joseph@codesourcery.com
Jozef Lawrynowicz May 18, 2020, 12:42 p.m. | #3
On Fri, May 15, 2020 at 10:48:56PM +0000, Joseph Myers wrote:
> On Fri, 15 May 2020, Jozef Lawrynowicz wrote:

> 

> > The attached patch fixes many GCC and G++ tests for 16-bit targets. These

> > targets can have the following properties:

> > - "int", "size_t", "ptrdiff_t", "void *" are 16-bit types

> > - sizeof(int) == sizeof(short)

> 

> Some of the tests are disabled by the patch for the case where pointers 

> are the same size as int.  Were those tests all previously failing for 

> 32-bit targets where that's the case?  If not, ptr_eq_int seems an 

> inappropriate condition for disabling them.


Ah yes, regarding g++.dg/init/new44.C, it seems that i386-pc-linux-gnu
does require an array size cookie even though ptr_eq_int (in fact,
since the decision relates to size_t, a pointer size effective target shouldn't
have been used anyway). I'll amend the condition so it is skipped for msp430
only.

The other test using ptr_eq_int (g++.dg/init/const7.C) is also passing
on i386-pc-linux-gnu, so I'll amend that as well.

I'll make sure to do a full regtest on i386-pc-linux-gnu before
applying.

Thanks,
Jozef

> 

> -- 

> Joseph S. Myers

> joseph@codesourcery.com
Jason Merrill via Gcc-patches May 20, 2020, 1:37 p.m. | #4
Hi,



On Mon, 18 May 2020 at 14:42, Jozef Lawrynowicz
<jozef.l@mittosystems.com> wrote:
>

> On Fri, May 15, 2020 at 10:48:56PM +0000, Joseph Myers wrote:

> > On Fri, 15 May 2020, Jozef Lawrynowicz wrote:

> >

> > > The attached patch fixes many GCC and G++ tests for 16-bit targets. These

> > > targets can have the following properties:

> > > - "int", "size_t", "ptrdiff_t", "void *" are 16-bit types

> > > - sizeof(int) == sizeof(short)

> >

> > Some of the tests are disabled by the patch for the case where pointers

> > are the same size as int.  Were those tests all previously failing for

> > 32-bit targets where that's the case?  If not, ptr_eq_int seems an

> > inappropriate condition for disabling them.

>

> Ah yes, regarding g++.dg/init/new44.C, it seems that i386-pc-linux-gnu

> does require an array size cookie even though ptr_eq_int (in fact,

> since the decision relates to size_t, a pointer size effective target shouldn't

> have been used anyway). I'll amend the condition so it is skipped for msp430

> only.

>

> The other test using ptr_eq_int (g++.dg/init/const7.C) is also passing

> on i386-pc-linux-gnu, so I'll amend that as well.

>

> I'll make sure to do a full regtest on i386-pc-linux-gnu before

> applying.

>


I've noticed regressions on aarch64 with -mabi=ilp32:
    g++.dg/warn/Wconversion-null-2.C  -std=gnu++14  (test for warnings, line 37)
    g++.dg/warn/Wconversion-null-2.C  -std=gnu++14  (test for warnings, line 60)
    g++.dg/warn/Wconversion-null-2.C  -std=gnu++17  (test for warnings, line 37)
    g++.dg/warn/Wconversion-null-2.C  -std=gnu++17  (test for warnings, line 60)
    g++.dg/warn/Wconversion-null-2.C  -std=gnu++2a  (test for warnings, line 37)
    g++.dg/warn/Wconversion-null-2.C  -std=gnu++2a  (test for warnings, line 60)
    g++.dg/warn/Wconversion-null-2.C  -std=gnu++98  (test for warnings, line 37)
    g++.dg/warn/Wconversion-null-2.C  -std=gnu++98  (test for warnings, line 60)

The logs say:
/gcc/testsuite/g++.dg/warn/Wconversion-null-2.C:37:9: error: call of
overloaded 'g(NULL)' is ambiguous
/gcc/testsuite/g++.dg/warn/Wconversion-null-2.C:60:11: error: call of
overloaded 'g(NULL)' is ambiguous

Can you check/fix?

Thanks

Christophe

> Thanks,

> Jozef

>

> >

> > --

> > Joseph S. Myers

> > joseph@codesourcery.com
Jozef Lawrynowicz May 20, 2020, 9:50 p.m. | #5
On Wed, May 20, 2020 at 03:37:30PM +0200, Christophe Lyon via Gcc-patches wrote:
> Hi,

> 

> 

> 

> On Mon, 18 May 2020 at 14:42, Jozef Lawrynowicz

> <jozef.l@mittosystems.com> wrote:

> >

> > On Fri, May 15, 2020 at 10:48:56PM +0000, Joseph Myers wrote:

> > > On Fri, 15 May 2020, Jozef Lawrynowicz wrote:

> > >

> > > > The attached patch fixes many GCC and G++ tests for 16-bit targets. These

> > > > targets can have the following properties:

> > > > - "int", "size_t", "ptrdiff_t", "void *" are 16-bit types

> > > > - sizeof(int) == sizeof(short)

> > >

> > > Some of the tests are disabled by the patch for the case where pointers

> > > are the same size as int.  Were those tests all previously failing for

> > > 32-bit targets where that's the case?  If not, ptr_eq_int seems an

> > > inappropriate condition for disabling them.

> >

> > Ah yes, regarding g++.dg/init/new44.C, it seems that i386-pc-linux-gnu

> > does require an array size cookie even though ptr_eq_int (in fact,

> > since the decision relates to size_t, a pointer size effective target shouldn't

> > have been used anyway). I'll amend the condition so it is skipped for msp430

> > only.

> >

> > The other test using ptr_eq_int (g++.dg/init/const7.C) is also passing

> > on i386-pc-linux-gnu, so I'll amend that as well.

> >

> > I'll make sure to do a full regtest on i386-pc-linux-gnu before

> > applying.

> >

> 

> I've noticed regressions on aarch64 with -mabi=ilp32:

>     g++.dg/warn/Wconversion-null-2.C  -std=gnu++14  (test for warnings, line 37)

>     g++.dg/warn/Wconversion-null-2.C  -std=gnu++14  (test for warnings, line 60)

>     g++.dg/warn/Wconversion-null-2.C  -std=gnu++17  (test for warnings, line 37)

>     g++.dg/warn/Wconversion-null-2.C  -std=gnu++17  (test for warnings, line 60)

>     g++.dg/warn/Wconversion-null-2.C  -std=gnu++2a  (test for warnings, line 37)

>     g++.dg/warn/Wconversion-null-2.C  -std=gnu++2a  (test for warnings, line 60)

>     g++.dg/warn/Wconversion-null-2.C  -std=gnu++98  (test for warnings, line 37)

>     g++.dg/warn/Wconversion-null-2.C  -std=gnu++98  (test for warnings, line 60)

> 

> The logs say:

> /gcc/testsuite/g++.dg/warn/Wconversion-null-2.C:37:9: error: call of

> overloaded 'g(NULL)' is ambiguous

> /gcc/testsuite/g++.dg/warn/Wconversion-null-2.C:60:11: error: call of

> overloaded 'g(NULL)' is ambiguous

> 

> Can you check/fix?


Hmm, it seems that when performing overload resolution, the compiler considers
g(long) and g(void*) equally viable candidates for g(NULL) and so the
ambiguous error occurs. Even though
sizeof(int) == sizeof(long) == sizeof(void*), the g(int) candidate is more
viable than the others for g(NULL) so is required to break the tie between
g(long) and g(void*).

The problem for msp430/-mlarge is that the bitsize of a pointer is 20-bits and
that doesn't match any of the g() declarations using integral types for
arguments. So the reason I originally changed the test is because all of the g()
declarations are considered equally viable and so the g(NULL) call was reported
as ambiguous.

I've committed the attached patch which reverts the changes to the
Wconversion-null* tests and adds a special case for __MSP430X_LARGE__.

Jozef
> 

> Thanks

> 

> Christophe

> 

> > Thanks,

> > Jozef

> >

> > >

> > > --

> > > Joseph S. Myers

> > > joseph@codesourcery.com
From edd482f310f4ec46310e7c2c82c88dad64b5a4ff Mon Sep 17 00:00:00 2001
From: Jozef Lawrynowicz <jozef.l@mittosystems.com>

Date: Wed, 20 May 2020 22:15:18 +0100
Subject: [PATCH] TESTSUITE: Fix Wconversion-null*.C tests for aarch64
 -mabi=ilp32

This fixes regressions for aarch64 with -mabi=ilp32 of the
Wconversion-null*.C tests, introduced by 92ea8e1bccc.

The "g (int)" declaration is required for that target where
sizeof(int) == sizeof(long) == sizeof(void *).

To handle the msp430/-mlarge case, an explicit declaration of
"g (__int20)" is required.

gcc/testsuite/ChangeLog:

	* g++.dg/warn/Wconversion-null-2.C: Add explicit declarations for l()
	and g() with int, long, long long and __int20 arguments.
	* g++.dg/warn/Wconversion-null.C: Likewise.
---
 .../g++.dg/warn/Wconversion-null-2.C          | 20 +++++++++++++++++--
 gcc/testsuite/g++.dg/warn/Wconversion-null.C  | 20 +++++++++++++++++--
 2 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/gcc/testsuite/g++.dg/warn/Wconversion-null-2.C b/gcc/testsuite/g++.dg/warn/Wconversion-null-2.C
index 0f5bf58bd5d..3ba756e596b 100644
--- a/gcc/testsuite/g++.dg/warn/Wconversion-null-2.C
+++ b/gcc/testsuite/g++.dg/warn/Wconversion-null-2.C
@@ -3,7 +3,12 @@
 
 #include <cstddef>
 
-void g(__INTPTR_TYPE__) {}
+void g(int) {}
+void g(long) {}
+void g(long long) {}
+#ifdef __MSP430X_LARGE__
+void g(__int20) {}
+#endif
 extern void g(void*);
 
 template <int I>
@@ -15,7 +20,18 @@ template <class T>
 void l(T);
 
 template <>
-void l(__INTPTR_TYPE__) {}
+void l(int) {}
+
+template <>
+void l(long) {}
+
+template <>
+void l(long long) {}
+
+#ifdef __MSP430X_LARGE__
+template <>
+void l(__int20) {}
+#endif
 
 void warn_for_NULL()
 {
diff --git a/gcc/testsuite/g++.dg/warn/Wconversion-null.C b/gcc/testsuite/g++.dg/warn/Wconversion-null.C
index 4cac2671116..4c68d233450 100644
--- a/gcc/testsuite/g++.dg/warn/Wconversion-null.C
+++ b/gcc/testsuite/g++.dg/warn/Wconversion-null.C
@@ -3,7 +3,12 @@
 
 #include <cstddef>
 
-void g(__INTPTR_TYPE__) {}
+void g(int) {}
+void g(long) {}
+void g(long long) {}
+#ifdef __MSP430X_LARGE__
+void g(__int20) {}
+#endif
 extern void g(void*);
 
 template <int I>
@@ -15,7 +20,18 @@ template <class T>
 void l(T);
 
 template <>
-void l(__INTPTR_TYPE__) {}
+void l(int) {}
+
+template <>
+void l(long) {}
+
+template <>
+void l(long long) {}
+
+#ifdef __MSP430X_LARGE__
+template <>
+void l(__int20) {}
+#endif
 
 int main()
 {
-- 
2.26.2

Patch

diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index 0f70e4baca9..7876af5b9d9 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -1363,6 +1363,15 @@  Target has 64-bit @code{long long}.
 @item long_neq_int
 Target has @code{int} and @code{long} with different sizes.
 
+@item short_eq_int
+Target has @code{short} and @code{int} with the same size.
+
+@item ptr_eq_short
+Target has pointers (@code{void *}) and @code{short} with the same size.
+
+@item ptr_eq_int
+Target has pointers (@code{void *}) and @code{int} with the same size.
+
 @item int_eq_float
 Target has @code{int} and @code{float} with the same size.
 
@@ -1379,11 +1388,15 @@  Target supports @code{long double} that is longer than @code{double}.
 Target has pointers that are 32 bits or longer.
 
 @item size20plus
-Target has a 20-bit or larger address space, so at least supports
+Target has a 20-bit or larger address space, so supports at least
 16-bit array and structure sizes.
 
+@item size24plus
+Target has a 24-bit or larger address space, so supports at least
+20-bit array and structure sizes.
+
 @item size32plus
-Target has a 32-bit or larger address space, so at least supports
+Target has a 32-bit or larger address space, so supports at least
 24-bit array and structure sizes.
 
 @item 4byte_wchar_t
@@ -2050,6 +2063,13 @@  when using the new ABI.
 MIPS target supports @code{-mpaired-single}.
 @end table
 
+@subsubsection MSP430-specific attributes
+
+@table @code
+@item msp430_large_memory_model
+MSP430 target has the large memory model enabled (@code{-mlarge}).
+@end table
+
 @subsubsection PowerPC-specific attributes
 
 @table @code
diff --git a/gcc/testsuite/c-c++-common/builtin-has-attribute-7.c b/gcc/testsuite/c-c++-common/builtin-has-attribute-7.c
index 6ea2e9e7192..1326aed32a7 100644
--- a/gcc/testsuite/c-c++-common/builtin-has-attribute-7.c
+++ b/gcc/testsuite/c-c++-common/builtin-has-attribute-7.c
@@ -2,7 +2,8 @@ 
    and packed in various forms of array dereferencing and indirection
    expressions correspondingly to __alignof__.
    { dg-do compile }
-   { dg-options "-Wall -Wno-unused -ftrack-macro-expansion=0" } */
+   { dg-options "-Wall -Wno-unused -ftrack-macro-expansion=0" }
+   { dg-require-effective-target size24plus } */
 
 #define ATTR(...) __attribute__ ((__VA_ARGS__))
 #define ALIGN(N)  ATTR (aligned (N))
diff --git a/gcc/testsuite/c-c++-common/cpp/pr63831-1.c b/gcc/testsuite/c-c++-common/cpp/pr63831-1.c
index 135baf6c406..6e97521ecde 100644
--- a/gcc/testsuite/c-c++-common/cpp/pr63831-1.c
+++ b/gcc/testsuite/c-c++-common/cpp/pr63831-1.c
@@ -61,4 +61,4 @@  T18 t18;
 T19 t19;
 T20 t20;
 #endif
-int t21 = __has_attribute (noreturn) + __has_cpp_attribute (__malloc__);
+long t21 = __has_attribute (noreturn) + __has_cpp_attribute (__malloc__);
diff --git a/gcc/testsuite/c-c++-common/pr81376.c b/gcc/testsuite/c-c++-common/pr81376.c
index e67f41e7356..f96a840d6f1 100644
--- a/gcc/testsuite/c-c++-common/pr81376.c
+++ b/gcc/testsuite/c-c++-common/pr81376.c
@@ -35,7 +35,14 @@  void f4(unsigned short a, int b)
 {
   volatile int us_i;
   us_i = (double) a < (double) b;
-  /* { dg-final { scan-tree-dump "us_i = \\(int\\) a < b" "original" } } */
+  /* { dg-final { scan-tree-dump "us_i = \\(int\\) a < b" "original" { target { ! short_eq_int } } } } */
+}
+
+void f4_short_eq_int(unsigned short a, long b)
+{
+  volatile long us_l;
+  us_l = (double) a < (double) b;
+  /* { dg-final { scan-tree-dump "us_l = \\(long int\\) a < b" "original" { target { short_eq_int } } } } */
 }
 
 /* We don't optimize here because neither of integral types is
diff --git a/gcc/testsuite/g++.dg/abi/scoped1.C b/gcc/testsuite/g++.dg/abi/scoped1.C
index 7589ed44066..62ae498c970 100644
--- a/gcc/testsuite/g++.dg/abi/scoped1.C
+++ b/gcc/testsuite/g++.dg/abi/scoped1.C
@@ -6,18 +6,18 @@  void f(int i, ...)
 {
   __builtin_va_list ap;
   __builtin_va_start (ap, i);
-  if (__builtin_va_arg (ap, A) != A::a1) __builtin_abort(); // { dg-warning "passed" }
-  if (__builtin_va_arg (ap, A) != A::a2) __builtin_abort(); // { dg-warning "passed" }
-  if (__builtin_va_arg (ap, A) != A::a3) __builtin_abort(); // { dg-warning "passed" }
-  if (__builtin_va_arg (ap, A) != A::a1) __builtin_abort(); // { dg-warning "passed" }
-  if (__builtin_va_arg (ap, A) != A::a2) __builtin_abort(); // { dg-warning "passed" }
-  if (__builtin_va_arg (ap, A) != A::a3) __builtin_abort(); // { dg-warning "passed" }
-  if (__builtin_va_arg (ap, A) != A::a1) __builtin_abort(); // { dg-warning "passed" }
-  if (__builtin_va_arg (ap, A) != A::a2) __builtin_abort(); // { dg-warning "passed" }
-  if (__builtin_va_arg (ap, A) != A::a3) __builtin_abort(); // { dg-warning "passed" }
+  if (__builtin_va_arg (ap, A) != A::a1) __builtin_abort(); // { dg-warning "passed" "" { target { ! short_eq_int } } }
+  if (__builtin_va_arg (ap, A) != A::a2) __builtin_abort(); // { dg-warning "passed" "" { target { ! short_eq_int } } }
+  if (__builtin_va_arg (ap, A) != A::a3) __builtin_abort(); // { dg-warning "passed" "" { target { ! short_eq_int } } }
+  if (__builtin_va_arg (ap, A) != A::a1) __builtin_abort(); // { dg-warning "passed" "" { target { ! short_eq_int } } }
+  if (__builtin_va_arg (ap, A) != A::a2) __builtin_abort(); // { dg-warning "passed" "" { target { ! short_eq_int } } }
+  if (__builtin_va_arg (ap, A) != A::a3) __builtin_abort(); // { dg-warning "passed" "" { target { ! short_eq_int } } }
+  if (__builtin_va_arg (ap, A) != A::a1) __builtin_abort(); // { dg-warning "passed" "" { target { ! short_eq_int } } }
+  if (__builtin_va_arg (ap, A) != A::a2) __builtin_abort(); // { dg-warning "passed" "" { target { ! short_eq_int } } }
+  if (__builtin_va_arg (ap, A) != A::a3) __builtin_abort(); // { dg-warning "passed" "" { target { ! short_eq_int } } }
 }
 
 int main()
 {
-  f(9, A::a1, A::a2, A::a3, A::a1, A::a2, A::a3, A::a1, A::a2, A::a3);	// { dg-warning "passed" }
+  f(9, A::a1, A::a2, A::a3, A::a1, A::a2, A::a3, A::a1, A::a2, A::a3);	// { dg-warning "passed" "" { target { ! short_eq_int } } }
 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-1.C
index e68ff0e58a0..7b28177b82f 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-1.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-1.C
@@ -1,5 +1,6 @@ 
 // PR c++/70001
 // { dg-do compile { target c++11 } }
+// { dg-require-effective-target size24plus }
 
 struct B
 {
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield3.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield3.C
index c393db4e6e9..a17d45cf6a2 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield3.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield3.C
@@ -1,5 +1,6 @@ 
 // PR c++/49136
 // { dg-do compile { target c++11 } }
+// { dg-require-effective-target int32plus }
 
 struct S
 {
diff --git a/gcc/testsuite/g++.dg/cpp0x/enum13.C b/gcc/testsuite/g++.dg/cpp0x/enum13.C
index 8335fadd78e..9902a4dc6b1 100644
--- a/gcc/testsuite/g++.dg/cpp0x/enum13.C
+++ b/gcc/testsuite/g++.dg/cpp0x/enum13.C
@@ -15,5 +15,5 @@  void foo(int x, ...) {
 }
 
 int main() {
-   foo(0, A::X);		// { dg-warning "scoped" }
+   foo(0, A::X);		// { dg-warning "scoped" "" { target { ! short_eq_int } } }
 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist5.C b/gcc/testsuite/g++.dg/cpp0x/initlist5.C
index 5f253ca4827..5f128582014 100644
--- a/gcc/testsuite/g++.dg/cpp0x/initlist5.C
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist5.C
@@ -32,4 +32,4 @@  char c = char{ u };		// { dg-error "narrowing" }
 
 // PR c++/50011
 short unsigned su;
-int i { su };
+int i { su }; // { dg-error "narrowing" "" { target short_eq_int } }
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist7.C b/gcc/testsuite/g++.dg/cpp0x/initlist7.C
index 7dbbf2d2200..0cb89e627ac 100644
--- a/gcc/testsuite/g++.dg/cpp0x/initlist7.C
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist7.C
@@ -3,7 +3,7 @@ 
 
 typedef enum { AA=1, BB=2 } my_enum;
 
-typedef struct { my_enum a:4 ; unsigned b:28; } stru;
+typedef struct { my_enum a:4 ; unsigned b:28; } stru; // { dg-warning "width.*exceeds its type" "" { target { ! int32plus } } }
 
 void foo (char c, my_enum x, int i)
 {
diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr04.C b/gcc/testsuite/g++.dg/cpp0x/nullptr04.C
index 15af84c1c86..7cb3559b3a3 100644
--- a/gcc/testsuite/g++.dg/cpp0x/nullptr04.C
+++ b/gcc/testsuite/g++.dg/cpp0x/nullptr04.C
@@ -5,12 +5,12 @@ 
 __extension__ typedef __INTPTR_TYPE__ intptr_t;
 
 const int n4 = static_cast<const int>(nullptr); // { dg-error "16:invalid 'static_cast' " }
-const short int n5 = reinterpret_cast<short int>(nullptr); // { dg-error "22:cast from .std::nullptr_t. to .short int. loses precision" }
+const short int n5 = reinterpret_cast<short int>(nullptr); // { dg-error "22:cast from .std::nullptr_t. to .short int. loses precision" "" { target { ! ptr_eq_short } } }
 const intptr_t n6 = reinterpret_cast<intptr_t>(nullptr);
 const intptr_t n7 = (intptr_t)nullptr;
 
 decltype(nullptr) mynull = 0;
 const int n8 = static_cast<const int>(mynull); // { dg-error "16:invalid 'static_cast' " }
-const short int n9 = reinterpret_cast<short int>(mynull); // { dg-error "22:cast from .std::nullptr_t. to .short int. loses precision" }
+const short int n9 = reinterpret_cast<short int>(mynull); // { dg-error "22:cast from .std::nullptr_t. to .short int. loses precision" "" { target { ! ptr_eq_short } } }
 const intptr_t n10 = reinterpret_cast<intptr_t>(mynull);
 const intptr_t n11 = (intptr_t)mynull;
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-value1.C b/gcc/testsuite/g++.dg/cpp0x/variadic-value1.C
index 179919a5bc7..b27ac34692f 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic-value1.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-value1.C
@@ -1,18 +1,20 @@ 
 // PR c++/52796
 // { dg-do run { target c++11 } }
 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 inline void *operator new(__SIZE_TYPE__ s, void *p) { return p; }
 
 struct A
 {
-  int i;
+  int32_t i;
   template<class... Ts>
   A(Ts&&... ts): i(ts...) { }
 };
 
 static union {
   unsigned char c[sizeof(A)];
-  int i;
+  int32_t i;
 };
 
 int main()
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-arith-overflow.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-arith-overflow.C
index 7ca0033d217..d6a6509d591 100644
--- a/gcc/testsuite/g++.dg/cpp1y/constexpr-arith-overflow.C
+++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-arith-overflow.C
@@ -90,6 +90,10 @@  template <>        struct ResType<unsigned short> { typedef unsigned type; };
   StaticAssert (vflow ? CAT (op, __LINE__)(x, y).v			\
 		: CAT (op, __LINE__)(x, y) == Res<T>(op (x, y), vflow))
 
+/* If short and int are the same size we will overflow in some additional cases
+   when testing short.  */
+#define INT_EQ_SHORT __SIZEOF_INT__ == __SIZEOF_SHORT__
+
 /* Signed int addition.  */
 TEST (sadd,   signed char,    0,         0,         0);
 TEST (sadd,   signed char,    0,         SCHAR_MAX, 0);
@@ -100,11 +104,11 @@  TEST (sadd,   signed char,   -1,         SCHAR_MIN, 0);
 
 TEST (sadd,   short,          0,         0,         0);
 TEST (sadd,   short,          0,         SHRT_MAX,  0);
-TEST (sadd,   short,          1,         SHRT_MAX,  0);
-TEST (sadd,   short,          SHRT_MAX,  SHRT_MAX,  0);
+TEST (sadd,   short,          1,         SHRT_MAX,  INT_EQ_SHORT);
+TEST (sadd,   short,          SHRT_MAX,  SHRT_MAX,  INT_EQ_SHORT);
 TEST (sadd,   short,          0,         SHRT_MIN,  0);
-TEST (sadd,   short,         -1,         SHRT_MIN,  0);
-TEST (sadd,   short,          SHRT_MIN,  SHRT_MIN,  0);
+TEST (sadd,   short,         -1,         SHRT_MIN,  INT_EQ_SHORT);
+TEST (sadd,   short,          SHRT_MIN,  SHRT_MIN,  INT_EQ_SHORT);
 
 TEST (sadd,   int,            0,         0,         0);
 TEST (sadd,   int,            0,         INT_MAX,   0);
@@ -139,8 +143,8 @@  TEST (uadd,   unsigned char,  UCHAR_MAX, UCHAR_MAX, 0);
 
 TEST (uadd,   unsigned short, 0U,        0U,         0);
 TEST (uadd,   unsigned short, 0U,        USHRT_MAX,  0);
-TEST (uadd,   unsigned short, 1U,        USHRT_MAX,  0);
-TEST (uadd,   unsigned short, USHRT_MAX, USHRT_MAX,  0);
+TEST (uadd,   unsigned short, 1U,        USHRT_MAX,  INT_EQ_SHORT);
+TEST (uadd,   unsigned short, USHRT_MAX, USHRT_MAX,  INT_EQ_SHORT);
 
 TEST (uadd,   unsigned,       0U,        0U,         0);
 TEST (uadd,   unsigned,       0U,        UINT_MAX,   0);
@@ -170,7 +174,7 @@  TEST (ssub,   short,          0,         0,          0);
 TEST (ssub,   short,          0,         SHRT_MAX,   0);
 TEST (ssub,   short,          1,         SHRT_MAX,   0);
 TEST (ssub,   short,          SHRT_MAX,  SHRT_MAX,   0);
-TEST (ssub,   short,          0,         SHRT_MIN,   0);
+TEST (ssub,   short,          0,         SHRT_MIN,   INT_EQ_SHORT);
 TEST (ssub,   short,         -1,         SHRT_MIN,   0);
 TEST (ssub,   short,          SHRT_MIN,  SHRT_MIN,   0);
 
diff --git a/gcc/testsuite/g++.dg/cpp1y/digit-sep-neg.C b/gcc/testsuite/g++.dg/cpp1y/digit-sep-neg.C
index 727e74e2e10..5343e52c5a5 100644
--- a/gcc/testsuite/g++.dg/cpp1y/digit-sep-neg.C
+++ b/gcc/testsuite/g++.dg/cpp1y/digit-sep-neg.C
@@ -1,9 +1,11 @@ 
 // { dg-do compile { target c++14 } }
 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 int
 main()
 {
-  int i = 0;
+  int32_t i = 0;
   i = 1048''576; // { dg-error "adjacent digit separators" }
   i = 0X'100000; // { dg-error "digit separator after base indicator" }
   i = 0x'100000; // { dg-error "digit separator after base indicator" }
@@ -25,6 +27,6 @@  main()
   float f = 1.602'176'565e-19'F; // { dg-error "digit separator outside digit sequence" }
 }
 
-// { dg-error "exponent has no digits" "exponent has no digits" { target *-*-* } 21 }
-// { dg-error "expected ';' before" "expected ';' before" { target *-*-* } 13 }
-// { dg-error "expected ';' before" "expected ';' before" { target *-*-* } 24 }
+// { dg-error "exponent has no digits" "exponent has no digits" { target *-*-* } 23 }
+// { dg-error "expected ';' before" "expected ';' before" { target *-*-* } 15 }
+// { dg-error "expected ';' before" "expected ';' before" { target *-*-* } 26 }
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr57644.C b/gcc/testsuite/g++.dg/cpp1y/pr57644.C
index ec595a21b7d..dd67a3bd2d1 100644
--- a/gcc/testsuite/g++.dg/cpp1y/pr57644.C
+++ b/gcc/testsuite/g++.dg/cpp1y/pr57644.C
@@ -1,8 +1,10 @@ 
 // { dg-do compile { target c++14 } }
 
+typedef unsigned uint32_t __attribute__((mode (__SI__)));
+
 struct Foo
 {
-  unsigned i: 32;
+  uint32_t i: 32;
 };
 
 int
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr77321.C b/gcc/testsuite/g++.dg/cpp1y/pr77321.C
index b25f492dc4f..51c5bd9b394 100644
--- a/gcc/testsuite/g++.dg/cpp1y/pr77321.C
+++ b/gcc/testsuite/g++.dg/cpp1y/pr77321.C
@@ -1,6 +1,7 @@ 
 // PR c++/77321
 // { dg-do compile { target c++14 } }
 // { dg-options "-Wall" }
+// { dg-require-effective-target size24plus }
 
 extern "C" void *memset (void *, int, __SIZE_TYPE__);
 extern "C" void *malloc(__SIZE_TYPE__);
diff --git a/gcc/testsuite/g++.dg/cpp1y/var-templ4.C b/gcc/testsuite/g++.dg/cpp1y/var-templ4.C
index 3cd84a892c3..4e762aa929e 100644
--- a/gcc/testsuite/g++.dg/cpp1y/var-templ4.C
+++ b/gcc/testsuite/g++.dg/cpp1y/var-templ4.C
@@ -1,12 +1,14 @@ 
 // { dg-do compile { target c++14 } }
 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 template<typename T>
-  constexpr int var = sizeof (T);
+  constexpr int32_t var = sizeof (T);
 
 template<>
-  constexpr int var<int> = 100000;
+  constexpr int32_t var<int32_t> = 100000;
 
 int main ()
 {
-  static_assert(var<int> == 100000 && var<char> == sizeof(char), "");
+  static_assert(var<int32_t> == 100000 && var<char> == sizeof(char), "");
 }
diff --git a/gcc/testsuite/g++.dg/cpp1z/direct-enum-init1.C b/gcc/testsuite/g++.dg/cpp1z/direct-enum-init1.C
index f1d1aa5dfdc..027bd5e2083 100644
--- a/gcc/testsuite/g++.dg/cpp1z/direct-enum-init1.C
+++ b/gcc/testsuite/g++.dg/cpp1z/direct-enum-init1.C
@@ -54,7 +54,7 @@  foo ()
   C c3 { 8L };		// { dg-error "cannot convert 'long int' to 'C' in initialization" "" { target c++14_down } }
   B b4 {short (c + 5)};	// { dg-error "invalid conversion from 'short int' to 'B'" "" { target c++14_down } }
   B b5 {c + 5};		// { dg-error "invalid conversion from 'int' to 'B'" "" { target c++14_down } }
-			// { dg-error "narrowing conversion of \[^\n\r]* from 'int' to 'short int'" "" { target c++17 } .-1 }
+			// { dg-error "narrowing conversion of \[^\n\r]* from 'int' to 'short int'" "" { target { c++17 && { ! short_eq_int } } } .-1 }
   C c4 { ll };		// { dg-error "cannot convert 'long long int' to 'C' in initialization" "" { target c++14_down } }
 			// { dg-error "narrowing conversion of 'll' from 'long long int' to 'int'" "" { target c++17 } .-1 }
   C c5 {short (c + 5)};	// { dg-error "cannot convert 'short int' to 'C' in initialization" "" { target c++14_down } }
@@ -120,7 +120,7 @@  foo2 ()
   C c3 { 8L };		// { dg-error "cannot convert 'long int' to 'C' in initialization" "" { target c++14_down } }
   B b4 {short (c + 5)};	// { dg-error "invalid conversion from 'short int' to 'B'" "" { target c++14_down } }
   B b5 {c + 5};		// { dg-error "invalid conversion from 'int' to 'B'" "" { target c++14_down } }
-			// { dg-error "narrowing conversion of \[^\n\r]* from 'int' to 'short int'" "" { target c++17 } .-1 }
+			// { dg-error "narrowing conversion of \[^\n\r]* from 'int' to 'short int'" "" { target { c++17 && { ! short_eq_int } } } .-1 }
   C c4 { ll };		// { dg-error "cannot convert 'long long int' to 'C' in initialization" "" { target c++14_down } }
 			// { dg-error "narrowing conversion of 'll' from 'long long int' to 'int'" "" { target c++17 } .-1 }
   C c5 {short (c + 5)};	// { dg-error "cannot convert 'short int' to 'C' in initialization" "" { target c++14_down } }
@@ -188,7 +188,7 @@  foo3 ()
   J c3 { 8L };		// { dg-error "cannot convert 'long int' to 'C' in initialization" "" { target c++14_down } }
   I b4 {short (c + 5)};	// { dg-error "invalid conversion from 'short int' to 'B'" "" { target c++14_down } }
   I b5 {c + 5};		// { dg-error "invalid conversion from 'int' to 'B'" "" { target c++14_down } }
-			// { dg-error "narrowing conversion of \[^\n\r]* from 'int' to 'short int'" "" { target c++17 } .-1 }
+			// { dg-error "narrowing conversion of \[^\n\r]* from 'int' to 'short int'" "" { target { c++17 && { ! short_eq_int } } } .-1 }
   J c4 { ll };		// { dg-error "cannot convert 'long long int' to 'C' in initialization" "" { target c++14_down } }
 			// { dg-error "narrowing conversion of 'll' from 'long long int' to 'int'" "" { target c++17 } .-1 }
   J c5 {short (c + 5)};	// { dg-error "cannot convert 'short int' to 'C' in initialization" "" { target c++14_down } }
diff --git a/gcc/testsuite/g++.dg/delayedfold/fwrapv1.C b/gcc/testsuite/g++.dg/delayedfold/fwrapv1.C
index 412535ce1ee..6d374802f00 100644
--- a/gcc/testsuite/g++.dg/delayedfold/fwrapv1.C
+++ b/gcc/testsuite/g++.dg/delayedfold/fwrapv1.C
@@ -1,5 +1,6 @@ 
 // PR c++/69631
 // { dg-options -fwrapv }
+// { dg-skip-if "" int16 }
 
 struct C {
   static const unsigned short max = static_cast<unsigned short>((32767 * 2 + 1));
diff --git a/gcc/testsuite/g++.dg/expr/bitfield9.C b/gcc/testsuite/g++.dg/expr/bitfield9.C
index 177f65b8800..2e309c34167 100644
--- a/gcc/testsuite/g++.dg/expr/bitfield9.C
+++ b/gcc/testsuite/g++.dg/expr/bitfield9.C
@@ -4,11 +4,13 @@ 
 
 extern "C" void abort();
 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 struct S {
   long long i : 32;
 };
 
-void f(int i, int j) {
+void f(int32_t i, int32_t j) {
   if (i != 0xabcdef01)
     abort();
   if (j != 0)
diff --git a/gcc/testsuite/g++.dg/ext/attribute-test-1.C b/gcc/testsuite/g++.dg/ext/attribute-test-1.C
index 93e08d7ef89..97579035355 100644
--- a/gcc/testsuite/g++.dg/ext/attribute-test-1.C
+++ b/gcc/testsuite/g++.dg/ext/attribute-test-1.C
@@ -4,22 +4,24 @@ 
 
 extern "C" void abort();
 
+typedef unsigned uint32_t __attribute__((mode (__SI__)));
+
 #define vector __attribute__((vector_size(16)))
 
 struct Constants {
-   inline vector unsigned int deadbeef(void) const {
-       return (vector unsigned int){0xdeadbeef, 0xabababab, 0x55555555, 0x12345678};
+   inline vector uint32_t deadbeef(void) const {
+       return (vector uint32_t){0xdeadbeef, 0xabababab, 0x55555555, 0x12345678};
    };
 };
 
-inline vector unsigned int const_deadbeef(Constants &C)
+inline vector uint32_t const_deadbeef(Constants &C)
 {
   return C.deadbeef();
 }
 
 union u {
-              unsigned int f[4];
-              vector unsigned int v;
+              uint32_t f[4];
+              vector uint32_t v;
 } data;
 
 int main()
diff --git a/gcc/testsuite/g++.dg/ext/bitfield1.C b/gcc/testsuite/g++.dg/ext/bitfield1.C
index 25c90df4191..91019dba52a 100644
--- a/gcc/testsuite/g++.dg/ext/bitfield1.C
+++ b/gcc/testsuite/g++.dg/ext/bitfield1.C
@@ -2,9 +2,11 @@ 
 // { dg-do link }
 // { dg-options "" }
 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 struct S
 {
-  signed int a:17;
+  int32_t a:17;
 } x;
 
 typedef typeof (x.a) foo;
@@ -15,7 +17,7 @@  T* inc(T* p) { return p+1; }
 int main ()
 {
   foo x[2] = { 1,2 };
-  int y[2] = { 1,2 };
+  int32_t y[2] = { 1,2 };
   *inc(x);
   *inc(y);
   return 0;
diff --git a/gcc/testsuite/g++.dg/ext/flexary13.C b/gcc/testsuite/g++.dg/ext/flexary13.C
index 7c67d09ee5a..f0603f9a261 100644
--- a/gcc/testsuite/g++.dg/ext/flexary13.C
+++ b/gcc/testsuite/g++.dg/ext/flexary13.C
@@ -7,10 +7,12 @@ 
                      __FILE__, __LINE__, STR(exp)), \
                       __builtin_abort ()))
 
-struct Ax { int n, a[]; };
-struct AAx { int i; Ax ax; };
+typedef int int32_t __attribute__((mode (__SI__)));
 
-int i = 12345678;
+struct Ax { int32_t n, a[]; };
+struct AAx { int32_t i; Ax ax; };
+
+int32_t i = 12345678;
 
 int main ()
 {
@@ -44,7 +46,7 @@  int main ()
     ASSERT (s.n == 456 && s.a [0] == i);
   }
   {
-    int j = i + 1, k = j + 1;
+    int32_t j = i + 1, k = j + 1;
     static Ax s =
       { 3, { i, j, k } }; // dg-warning "initialization of a flexible array member" }
     ASSERT (s.n == 3 && s.a [0] == i && s.a [1] == j && s.a [2] == k);
diff --git a/gcc/testsuite/g++.dg/ext/utf-cvt.C b/gcc/testsuite/g++.dg/ext/utf-cvt.C
index 929b7c71303..a792a737c52 100644
--- a/gcc/testsuite/g++.dg/ext/utf-cvt.C
+++ b/gcc/testsuite/g++.dg/ext/utf-cvt.C
@@ -27,8 +27,8 @@  void m(char16_t c0, char32_t c1)
     f_s (c0);	/* { dg-warning "change the sign" } */
     fss (c0);	/* { dg-warning "change the sign" } */
     fus (c0);
-    f_i (c0);
-    fsi (c0);
+    f_i (c0);	/* { dg-warning "change the sign" "" { target int16 } } */
+    fsi (c0);	/* { dg-warning "change the sign" "" { target int16 } } */
     fui (c0);
     f_l (c0);
     fsl (c0);
@@ -43,11 +43,13 @@  void m(char16_t c0, char32_t c1)
     f_s (c1);	/* { dg-warning "change value" } */
     fss (c1);	/* { dg-warning "change value" } */
     fus (c1);	/* { dg-warning "change value" } */
-    f_i (c1);	/* { dg-warning "change the sign" } */
-    fsi (c1);	/* { dg-warning "change the sign" } */
-    fui (c1);
-    f_l (c1);	/* { dg-warning "change the sign" "" { target { llp64 || ilp32 } } } */
-    fsl (c1);	/* { dg-warning "change the sign" "" { target { llp64 || ilp32 } } } */
+    f_i (c1);	/* { dg-warning "change the sign" "" { target { ! int16 } } } */
+    		/* { dg-warning "change value" "" { target int16 } .-1 } */
+    fsi (c1);	/* { dg-warning "change the sign" "" { target { ! int16 } } } */
+    		/* { dg-warning "change value" "" { target int16 } .-1 } */
+    fui (c1);	/* { dg-warning "change value" "" { target int16 } } */
+    f_l (c1);	/* { dg-warning "change the sign" "" { target { llp64 || { ilp32 || int16 } } } } */
+    fsl (c1);	/* { dg-warning "change the sign" "" { target { llp64 || { ilp32 || int16 } } } } */
     ful (c1);
     f_ll (c1);
     fsll (c1);
diff --git a/gcc/testsuite/g++.dg/ext/vector28.C b/gcc/testsuite/g++.dg/ext/vector28.C
index ea48c961244..b0a003c967a 100644
--- a/gcc/testsuite/g++.dg/ext/vector28.C
+++ b/gcc/testsuite/g++.dg/ext/vector28.C
@@ -1,6 +1,8 @@ 
 /* { dg-do compile } */
 
-typedef int veci __attribute__ ((vector_size (4 * sizeof (int))));
+typedef int int32_t __attribute__((mode (__SI__)));
+
+typedef int veci __attribute__ ((vector_size (4 * sizeof (int32_t))));
 typedef float vecf __attribute__ ((vector_size (4 * sizeof (float))));
 
 void f (veci *a, vecf *b, int c)
diff --git a/gcc/testsuite/g++.dg/ext/vla15.C b/gcc/testsuite/g++.dg/ext/vla15.C
index 77436cb58f3..bce4d7b0af7 100644
--- a/gcc/testsuite/g++.dg/ext/vla15.C
+++ b/gcc/testsuite/g++.dg/ext/vla15.C
@@ -3,12 +3,14 @@ 
 // { dg-options "" }
 // { dg-require-effective-target alloca }
 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 void *volatile p;
 
 int
 main (void)
 {
-  int n = 0;
+  int32_t n = 0;
  lab:;
   int x[n % 1000 + 1];
   x[0] = 1;
diff --git a/gcc/testsuite/g++.dg/init/array11.C b/gcc/testsuite/g++.dg/init/array11.C
index e52effe9ff7..9c12831bbea 100644
--- a/gcc/testsuite/g++.dg/init/array11.C
+++ b/gcc/testsuite/g++.dg/init/array11.C
@@ -1,3 +1,4 @@ 
+// { dg-require-effective-target size32plus }
 /* PR 11665 
    Orgin: jwhite@cse.unl.edu
    The problem was in initializer_constant_valid_p,
diff --git a/gcc/testsuite/g++.dg/init/array15.C b/gcc/testsuite/g++.dg/init/array15.C
index 17160d07611..024d93ed4ab 100644
--- a/gcc/testsuite/g++.dg/init/array15.C
+++ b/gcc/testsuite/g++.dg/init/array15.C
@@ -1,4 +1,5 @@ 
 // { dg-do run }
+// { dg-require-effective-target size24plus }
 
 // Copyright (C) 2004 Free Software Foundation, Inc.
 // Contributed by Nathan Sidwell 8 Dec 2004 <nathan@codesourcery.com>
diff --git a/gcc/testsuite/g++.dg/init/array4.C b/gcc/testsuite/g++.dg/init/array4.C
index 67519bf7c35..4712e9d7253 100644
--- a/gcc/testsuite/g++.dg/init/array4.C
+++ b/gcc/testsuite/g++.dg/init/array4.C
@@ -1,4 +1,5 @@ 
 // { dg-do compile }
+// { dg-require-effective-target size20plus }
 // Origin: Markus Breuer <markus.breuer@materna.de>
 
 // PR c++/6944
diff --git a/gcc/testsuite/g++.dg/init/const7.C b/gcc/testsuite/g++.dg/init/const7.C
index e1f31bccf7c..dd01381c879 100644
--- a/gcc/testsuite/g++.dg/init/const7.C
+++ b/gcc/testsuite/g++.dg/init/const7.C
@@ -3,7 +3,7 @@ 
 
 struct s { int x, y; };
 short offsets[1] = {
-  ((char*) &(((struct s*)16)->y) - (char *)16), // { dg-message "narrowing" "" { target c++11 } }
+  ((char*) &(((struct s*)16)->y) - (char *)16), // { dg-message "narrowing" "" { target { c++11 && { ! ptr_eq_int} } } }
 };
 
 // This ensures that we get a dump whether or not the bug is present.
diff --git a/gcc/testsuite/g++.dg/init/new38.C b/gcc/testsuite/g++.dg/init/new38.C
index cf73aa18e60..405b67d151f 100644
--- a/gcc/testsuite/g++.dg/init/new38.C
+++ b/gcc/testsuite/g++.dg/init/new38.C
@@ -40,7 +40,7 @@  template <typename T>
 void
 large_array_template3(int n)
 {
-  new T[n] // { dg-error "size of array exceeds maximum object size" }
+  new T[n] // { dg-error "size.*of array exceeds maximum object size" }
     [(1ULL << (sizeof(void *) * 4)) / sizeof(T)]
     [1ULL << (sizeof(void *) * 4)];
 }
diff --git a/gcc/testsuite/g++.dg/init/new44.C b/gcc/testsuite/g++.dg/init/new44.C
index a10ef424136..a8474f68951 100644
--- a/gcc/testsuite/g++.dg/init/new44.C
+++ b/gcc/testsuite/g++.dg/init/new44.C
@@ -42,8 +42,8 @@  test_one_dim_char_array ()
     p = new char [MAX - 2];             // { dg-error "size .\[0-9\]+. of array" }
     p = new char [MAX - 99];            // { dg-error "size .\[0-9\]+. of array" }
     p = new char [MAX / 2];             // { dg-error "size .\[0-9\]+. of array" }
-    p = new char [MAX / 2 - 1];         // { dg-error "size .\[0-9\]+. of array" }
-    p = new char [MAX / 2 - 2];         // { dg-error "size .\[0-9\]+. of array" }
+    p = new char [MAX / 2 - 1];         // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
+    p = new char [MAX / 2 - 2];         // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
 
     // Avoid testing the expressions below since whether or not they
     // are accepted depends on the precision of size_t (which also
@@ -76,7 +76,7 @@  test_one_dim_short_array ()
     p = new short [MAX / 2 - 6];        // { dg-error "size .\[0-9\]+. of array" }
     p = new short [MAX / 2 - 7];        // { dg-error "size .\[0-9\]+. of array" }
     p = new short [MAX / 2 - 8];        // { dg-error "size .\[0-9\]+. of array" }
-    p = new short [MAX / 4];            // { dg-error "size .\[0-9\]+. of array" }
+    p = new short [MAX / 4];            // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
 
     // Avoid exercising data model-dependent expressions.
     // p = new short [MAX / 4 - 1];
@@ -93,8 +93,8 @@  test_two_dim_char_array ()
     p = new char [1][MAX - 2];          // { dg-error "size .\[0-9\]+. of (unnamed )?array" }
     p = new char [1][MAX - 99];         // { dg-error "size .\[0-9\]+. of (unnamed )?array" }
     p = new char [1][MAX / 2];          // { dg-error "size .\[0-9\]+. of array" }
-    p = new char [1][MAX / 2 - 1];      // { dg-error "size .\[0-9\]+. of array" }
-    p = new char [1][MAX / 2 - 2];      // { dg-error "size .\[0-9\]+. of array" }
+    p = new char [1][MAX / 2 - 1];      // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
+    p = new char [1][MAX / 2 - 2];      // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
 
     // Avoid exercising data model-dependent expressions.
     // p = new char [1][MAX / 2 - 3];
@@ -125,8 +125,8 @@  test_two_dim_char_array ()
     p = new char [MAX][2];              // { dg-error "size .\[0-9\]+. of array" }
     p = new char [MAX][1];              // { dg-error "size .\[0-9\]+. of array" }
     p = new char [MAX / 2][1];          // { dg-error "size .\[0-9\]+. of array" }
-    p = new char [MAX / 2 - 1][1];      // { dg-error "size .\[0-9\]+. of array" }
-    p = new char [MAX / 2 - 2][1];      // { dg-error "size .\[0-9\]+. of array" }
+    p = new char [MAX / 2 - 1][1];      // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
+    p = new char [MAX / 2 - 2][1];      // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
 
     // Avoid exercising data model-dependent expressions.
     // p = new char [MAX / 2 - 3][1];
@@ -148,8 +148,8 @@  test_three_dim_char_array ()
     p = new char [1][1][MAX - 2];       // { dg-error "size .\[0-9\]+. of (unnamed )?array" }
     p = new char [1][1][MAX - 99];      // { dg-error "size .\[0-9\]+. of (unnamed )?array" }
     p = new char [1][1][MAX / 2];       // { dg-error "size .\[0-9\]+. of array" }
-    p = new char [1][1][MAX / 2 - 1];   // { dg-error "size .\[0-9\]+. of array" }
-    p = new char [1][1][MAX / 2 - 2];   // { dg-error "size .\[0-9\]+. of array" }
+    p = new char [1][1][MAX / 2 - 1];   // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
+    p = new char [1][1][MAX / 2 - 2];   // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
 
     // Avoid exercising data model-dependent expressions.
     // p = new char [1][1][MAX / 2 - 3];
@@ -173,7 +173,7 @@  test_three_dim_char_array ()
     p = new char [1][2][MAX / 2 - 6];   // { dg-error "size .\[0-9\]+. of (unnamed )?array" }
     p = new char [1][2][MAX / 2 - 7];   // { dg-error "size .\[0-9\]+. of (unnamed )?array" }
     p = new char [1][2][MAX / 2 - 8];   // { dg-error "size .\[0-9\]+. of (unnamed )?array" }
-    p = new char [1][2][MAX / 4];       // { dg-error "size .\[0-9\]+. of array" }
+    p = new char [1][2][MAX / 4];       // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
 
     // Avoid exercising data model-dependent expressions.
     // p = new char [1][2][MAX / 4 - 1];
@@ -195,7 +195,7 @@  test_three_dim_char_array ()
     p = new char [2][1][MAX / 2 - 6];   // { dg-error "size .\[0-9\]+. of array" }
     p = new char [2][1][MAX / 2 - 7];   // { dg-error "size .\[0-9\]+. of array" }
     p = new char [2][1][MAX / 2 - 8];   // { dg-error "size .\[0-9\]+. of array" }
-    p = new char [2][1][MAX / 4];       // { dg-error "size .\[0-9\]+. of array" }
+    p = new char [2][1][MAX / 4];       // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
 
     // Avoid exercising data model-dependent expressions.
     // p = new char [2][1][MAX / 4 - 1];
@@ -290,16 +290,20 @@  test_N_dim_char_array ()
 {
 #if __SIZEOF_SIZE_T__ == 8
     enum { N = 256 };
-#else
+#elif __SIZEOF_SIZE_T__ == 4
     enum { N = 16 };
+#else
+    enum { N = 4 };
 #endif
 
+#ifndef __MSP430X_LARGE__  /* 20-bit size_t.  */
     p = new char        [N][N][N][N][N][N][N];
     p = new char [N / 2][2][N][N][N][N][N][N];
     p = new char [N - 1][N / 2][N][N][N][N][N][N];
-    p = new char [N / 2][N][N][N][N][N][N][N];  // { dg-error "size .\[0-9\]+. of array" }
-    p = new char [N - 1][N][N][N][N][N][N][N];  // { dg-error "size .\[0-9\]+. of array" }
-    p = new char [N]    [N][N][N][N][N][N][N];  // { dg-error "size .\[0-9\]+. of array" }
+    p = new char [N / 2][N][N][N][N][N][N][N];  // { dg-error "size .\[0-9\]+. of array" "" { target { ! msp430_large_memory_model } } }
+    p = new char [N - 1][N][N][N][N][N][N][N];  // { dg-error "size .\[0-9\]+. of array" "" { target { ! msp430_large_memory_model } } }
+    p = new char [N]    [N][N][N][N][N][N][N];  // { dg-error "size .\[0-9\]+. of array" "" { target { ! msp430_large_memory_model } } }
+#endif
 }
 
 typedef struct Byte {
@@ -321,8 +325,8 @@  test_one_dim_byte_array (void *p)
     p = new (p) B [MAX - 2];            // { dg-error "size .\[0-9\]+. of array" }
     p = new (p) B [MAX - 99];           // { dg-error "size .\[0-9\]+. of array" }
     p = new (p) B [MAX / 2];            // { dg-error "size .\[0-9\]+. of array" }
-    p = new (p) B [MAX / 2 - 1];        // { dg-error "size .\[0-9\]+. of array" }
-    p = new (p) B [MAX / 2 - 2];        // { dg-error "size .\[0-9\]+. of array" }
+    p = new (p) B [MAX / 2 - 1];        // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
+    p = new (p) B [MAX / 2 - 2];        // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
 
     // Avoid testing the expressions below since whether or not they
     // are accepted depends on the precision of size_t (which determines
@@ -348,8 +352,8 @@  test_placement_two_dim_byte_struct_array (void *p)
     p = new (p) B [1][MAX - 2];         // { dg-error "size .\[0-9\]+. of (unnamed )?array" }
     p = new (p) B [1][MAX - 99];        // { dg-error "size .\[0-9\]+. of (unnamed )?array" }
     p = new (p) B [1][MAX / 2];         // { dg-error "size .\[0-9\]+. of array" }
-    p = new (p) B [1][MAX / 2 - 1];     // { dg-error "size .\[0-9\]+. of array" }
-    p = new (p) B [1][MAX / 2 - 2];     // { dg-error "size .\[0-9\]+. of array" }
+    p = new (p) B [1][MAX / 2 - 1];     // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
+    p = new (p) B [1][MAX / 2 - 2];     // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
 
     // Avoid exercising data model-dependent expressions.
     // p = new (p) B [1][MAX / 2 - 3];
@@ -380,8 +384,8 @@  test_placement_two_dim_byte_struct_array (void *p)
     p = new (p) B [MAX][2];             // { dg-error "size .\[0-9\]+. of array" }
     p = new (p) B [MAX][1];             // { dg-error "size .\[0-9\]+. of array" }
     p = new (p) B [MAX / 2][1];         // { dg-error "size .\[0-9\]+. of array" }
-    p = new (p) B [MAX / 2 - 1][1];     // { dg-error "size .\[0-9\]+. of array" }
-    p = new (p) B [MAX / 2 - 2][1];     // { dg-error "size .\[0-9\]+. of array" }
+    p = new (p) B [MAX / 2 - 1][1];     // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
+    p = new (p) B [MAX / 2 - 2][1];     // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
 
     // Avoid exercising data model-dependent expressions.
     // p = new (p) B [MAX / 2 - 3][1];
@@ -403,8 +407,8 @@  test_placement_three_dim_byte_struct_array (void *p)
     p = new (p) B [1][1][MAX - 2];      // { dg-error "size .\[0-9\]+. of (unnamed )?array" }
     p = new (p) B [1][1][MAX - 99];     // { dg-error "size .\[0-9\]+. of (unnamed )?array" }
     p = new (p) B [1][1][MAX / 2];      // { dg-error "size .\[0-9\]+. of array" }
-    p = new (p) B [1][1][MAX / 2 - 1];  // { dg-error "size .\[0-9\]+. of array" }
-    p = new (p) B [1][1][MAX / 2 - 2];  // { dg-error "size .\[0-9\]+. of array" }
+    p = new (p) B [1][1][MAX / 2 - 1];  // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
+    p = new (p) B [1][1][MAX / 2 - 2];  // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
 
     // Avoid exercising data model-dependent expressions.
     // p = new (p) B [1][1][MAX / 2 - 3];
@@ -428,7 +432,7 @@  test_placement_three_dim_byte_struct_array (void *p)
     p = new (p) B [1][2][MAX / 2 - 6];  // { dg-error "size .\[0-9\]+. of (unnamed )?array" }
     p = new (p) B [1][2][MAX / 2 - 7];  // { dg-error "size .\[0-9\]+. of (unnamed )?array" }
     p = new (p) B [1][2][MAX / 2 - 8];  // { dg-error "size .\[0-9\]+. of (unnamed )?array" }
-    p = new (p) B [1][2][MAX / 4];      // { dg-error "size .\[0-9\]+. of array" }
+    p = new (p) B [1][2][MAX / 4];      // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
 
     // Avoid exercising data model-dependent expressions.
     // p = new (p) B [1][2][MAX / 4 - 1];
@@ -450,7 +454,7 @@  test_placement_three_dim_byte_struct_array (void *p)
     p = new (p) B [2][1][MAX / 2 - 6];  // { dg-error "size .\[0-9\]+. of array" }
     p = new (p) B [2][1][MAX / 2 - 7];  // { dg-error "size .\[0-9\]+. of array" }
     p = new (p) B [2][1][MAX / 2 - 8];  // { dg-error "size .\[0-9\]+. of array" }
-    p = new (p) B [2][1][MAX / 4];      // { dg-error "size .\[0-9\]+. of array" }
+    p = new (p) B [2][1][MAX / 4];      // { dg-error "size .\[0-9\]+. of array" "cookie required" { target { ! ptr_eq_int } } }
 
     // Avoid exercising data model-dependent expressions.
     // p = new (p) B [2][1][MAX / 4 - 1];
diff --git a/gcc/testsuite/g++.dg/init/value9.C b/gcc/testsuite/g++.dg/init/value9.C
index 4899bd81001..25abd60ff3b 100644
--- a/gcc/testsuite/g++.dg/init/value9.C
+++ b/gcc/testsuite/g++.dg/init/value9.C
@@ -1,6 +1,8 @@ 
 // PR c++/50793
 // { dg-do run }
 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 struct NonTrivial
 {
   NonTrivial() { }
@@ -9,7 +11,7 @@  struct NonTrivial
 struct S
 {
   NonTrivial nt;
-  int i;
+  int32_t i;
 };
 
 int f(S s)
diff --git a/gcc/testsuite/g++.dg/ipa/pr77333.C b/gcc/testsuite/g++.dg/ipa/pr77333.C
index 1ef997f7a54..444805dca8c 100644
--- a/gcc/testsuite/g++.dg/ipa/pr77333.C
+++ b/gcc/testsuite/g++.dg/ipa/pr77333.C
@@ -1,6 +1,8 @@ 
 // { dg-do run }
 // { dg-options "-O2 -fno-ipa-sra" }
 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 volatile int global;
 int __attribute__((noinline, noclone))
 get_data (int i)
@@ -18,7 +20,7 @@  char buf[512];
 class A
 {
 public:
-  int field;
+  int32_t field;
   char *s;
 
   A() : field(223344)
diff --git a/gcc/testsuite/g++.dg/lto/20080908-1_0.C b/gcc/testsuite/g++.dg/lto/20080908-1_0.C
index 42b20cb3b3a..92dec575f9b 100644
--- a/gcc/testsuite/g++.dg/lto/20080908-1_0.C
+++ b/gcc/testsuite/g++.dg/lto/20080908-1_0.C
@@ -1,16 +1,18 @@ 
 /* { dg-lto-do run }  */
 extern "C" { extern void *memcpy (void *, const void *, __SIZE_TYPE__); }
 
-inline int
+typedef int int32_t __attribute__((mode (__SI__)));
+
+inline int32_t
 bci (const float &source)
 {
- int dest;
+ int32_t dest;
  memcpy (&dest, &source, sizeof (dest));
  return dest;
 }
 
 inline float
-bcf (const int &source)
+bcf (const int32_t &source)
 {
  float dest;
  memcpy (&dest, &source, sizeof (dest));
@@ -20,9 +22,9 @@  bcf (const int &source)
 float
 Foo ()
 {
- const int foo = bci (0.0f);
- int bar = foo;
- const int baz = foo & 1;
+ const int32_t foo = bci (0.0f);
+ int32_t bar = foo;
+ const int32_t baz = foo & 1;
  if (!baz && (foo & 2))
    bar = 0;
  return bcf (bar);
@@ -30,7 +32,10 @@  Foo ()
 
 int main ()
 {
-  if (Foo () != 0.0)
-    return 1;
+  if (sizeof (int32_t) == sizeof (float))
+    {
+      if (Foo () != 0.0)
+	return 1;
+    }
   return 0;
 }
diff --git a/gcc/testsuite/g++.dg/opt/pr55717.C b/gcc/testsuite/g++.dg/opt/pr55717.C
index 7b3af589ee6..c03badd258f 100644
--- a/gcc/testsuite/g++.dg/opt/pr55717.C
+++ b/gcc/testsuite/g++.dg/opt/pr55717.C
@@ -2,6 +2,8 @@ 
 // { dg-do compile }
 // { dg-options "-O -g" }
 
+typedef unsigned uint32_t __attribute__((mode (__SI__)));
+
 struct DebugOnly {};
 template <class T>
 struct StripConst { typedef T result; };
@@ -90,7 +92,7 @@  bool IsScriptMarked (JSScript **);
 struct AllocationSiteKey
 {
   JSScript *script;
-  unsigned offset : 24;
+  uint32_t offset : 24;
   int kind;
   typedef AllocationSiteKey Lookup;
   static unsigned hash (AllocationSiteKey key) { return (long (key.script->code + key.offset)) ^ key.kind; }
diff --git a/gcc/testsuite/g++.dg/opt/pr60597.C b/gcc/testsuite/g++.dg/opt/pr60597.C
index c61f7679765..ee2a78b4962 100644
--- a/gcc/testsuite/g++.dg/opt/pr60597.C
+++ b/gcc/testsuite/g++.dg/opt/pr60597.C
@@ -2,44 +2,46 @@ 
 // { dg-do compile }
 // { dg-options "-O2 -g" }
 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 struct A
 {
-  int foo () const;
-  int bar () const;
-  int a;
+  int32_t foo () const;
+  int32_t bar () const;
+  int32_t a;
 };
 
 struct B
 {
-  int foo ();
-  int bar ();
+  int32_t foo ();
+  int32_t bar ();
 };
 
-int *c, d;
+int32_t *c, d;
 
-int
+int32_t
 A::foo () const
 {
-  int b = a >> 16;
+  int32_t b = a >> 16;
   return b;
 }
 
-int
+int32_t
 A::bar () const
 {
-  int b = a;
+  int32_t b = a;
   return b;
 }
 
 void
-baz (A &x, B h, int i, int j)
+baz (A &x, B h, int32_t i, int32_t j)
 {
   for (; i < h.bar (); ++i)
     for (; h.foo (); ++j)
       {
-	int g = x.foo ();
-	int f = x.bar ();
-	int e = c[0] & 1;
+	int32_t g = x.foo ();
+	int32_t f = x.bar ();
+	int32_t e = c[0] & 1;
 	d = (e << 1) | (g << 16) | (f & 1);
 	c[j] = 0;
       }
diff --git a/gcc/testsuite/g++.dg/opt/pr81715.C b/gcc/testsuite/g++.dg/opt/pr81715.C
index c38b22b7daa..522af3b5aa7 100644
--- a/gcc/testsuite/g++.dg/opt/pr81715.C
+++ b/gcc/testsuite/g++.dg/opt/pr81715.C
@@ -2,6 +2,7 @@ 
 // { dg-do compile }
 // Verify the variables for inlined foo parameters are reused
 // { dg-options "-O2 -Wframe-larger-than=16384" }
+// { dg-require-effective-target size20plus }
 
 struct S { int a, b, c, d, e; char f[1024]; };
 void baz (int *, int *, int *, struct S *, int *, int *);
diff --git a/gcc/testsuite/g++.dg/opt/reload3.C b/gcc/testsuite/g++.dg/opt/reload3.C
index 12f3e66f369..daa7ffdbcef 100644
--- a/gcc/testsuite/g++.dg/opt/reload3.C
+++ b/gcc/testsuite/g++.dg/opt/reload3.C
@@ -4,6 +4,8 @@ 
 
 #include <cstdlib>
 
+typedef unsigned uint32_t __attribute__((mode (__SI__)));
+
 class QTime
 {
 public:
@@ -15,7 +17,7 @@  private:
     unsigned ds;
 };
 
-static const unsigned MSECS_PER_DAY = 86400000;
+static const uint32_t MSECS_PER_DAY = 86400000;
 
 QTime QTime::addMSecs(int ms) const
 {
diff --git a/gcc/testsuite/g++.dg/opt/temp2.C b/gcc/testsuite/g++.dg/opt/temp2.C
index 35520a2427c..533579a0599 100644
--- a/gcc/testsuite/g++.dg/opt/temp2.C
+++ b/gcc/testsuite/g++.dg/opt/temp2.C
@@ -1,4 +1,5 @@ 
 // { dg-do run }
+// { dg-require-effective-target size20plus }
 
 // Copyright (C) 2006 Free Software Foundation, Inc.
 
diff --git a/gcc/testsuite/g++.dg/opt/thunk1.C b/gcc/testsuite/g++.dg/opt/thunk1.C
index 566c0f2fcc5..cbda9187d5b 100644
--- a/gcc/testsuite/g++.dg/opt/thunk1.C
+++ b/gcc/testsuite/g++.dg/opt/thunk1.C
@@ -1,13 +1,14 @@ 
 // PR 6788
 // Test that the thunk adjusts the this pointer properly.
 // { dg-do run }
+// { dg-require-effective-target size20plus }
 
 extern "C" void abort ();
 
 struct A
 {
   virtual void foo() = 0;
-  char large[33*1024];
+  char large[33*1024U];
 };
 
 struct B
diff --git a/gcc/testsuite/g++.dg/other/error23.C b/gcc/testsuite/g++.dg/other/error23.C
index c60603e8ff5..81eec7ce7c7 100644
--- a/gcc/testsuite/g++.dg/other/error23.C
+++ b/gcc/testsuite/g++.dg/other/error23.C
@@ -1,5 +1,5 @@ 
 // PR c++/34918
 // { dg-do compile }
 
-int v __attribute ((vector_size (8)));
+int v __attribute ((vector_size (__SIZEOF_INT__ * 2)));
 bool b = !(v - v);	// { dg-error "not convert .__vector.2. int. to .bool. in initialization" }
diff --git a/gcc/testsuite/g++.dg/other/pr31078.C b/gcc/testsuite/g++.dg/other/pr31078.C
index 7f610713084..3ea1af25042 100644
--- a/gcc/testsuite/g++.dg/other/pr31078.C
+++ b/gcc/testsuite/g++.dg/other/pr31078.C
@@ -1,4 +1,5 @@ 
-typedef int SLONG;
+typedef int SLONG __attribute__((mode (__SI__)));
+
 typedef char SCHAR;
 typedef short SSHORT;
 typedef char TEXT;
diff --git a/gcc/testsuite/g++.dg/parse/concat1.C b/gcc/testsuite/g++.dg/parse/concat1.C
index 7d19a7db84d..e5748c02eab 100644
--- a/gcc/testsuite/g++.dg/parse/concat1.C
+++ b/gcc/testsuite/g++.dg/parse/concat1.C
@@ -3,7 +3,7 @@ 
 
 /* Intended as a compile-time test for string literal concatenation.  */
 
-#define e0	"a"    /* { dg-error "size of string literal is too large" "" { target { ! size32plus } } } */
+#define e0	"a"    /* { dg-error "size of string literal is too large" "" { target { ! size20plus } } } */
 #define e1	e0 e0 e0 e0 e0 e0 e0 e0 e0 e0
 #define e2	e1 e1 e1 e1 e1 e1 e1 e1 e1 e1
 #define e3	e2 e2 e2 e2 e2 e2 e2 e2 e2 e2
diff --git a/gcc/testsuite/g++.dg/parse/defarg5.C b/gcc/testsuite/g++.dg/parse/defarg5.C
index 01a67ed5915..a81b3c4d391 100644
--- a/gcc/testsuite/g++.dg/parse/defarg5.C
+++ b/gcc/testsuite/g++.dg/parse/defarg5.C
@@ -6,10 +6,13 @@ 
 
 // PR c++/12167 - infinite recursion
 
+typedef int int32_t __attribute__((mode (__SI__)));
+typedef unsigned uint32_t __attribute__((mode (__SI__)));
+
 class A {   
-  void report(int d
+  void report(int32_t d
 	      // the default arg is what NAN etc can expand to, but
 	      // with the floatiness removed.
-	      = (__extension__ ((union { unsigned l; int d; })
+	      = (__extension__ ((union { uint32_t l; int32_t d; })
 				{ l: 0x7fc00000U }).d));
 };
diff --git a/gcc/testsuite/g++.dg/pr48484.C b/gcc/testsuite/g++.dg/pr48484.C
index 19e9b9a8d0a..9dc6d1c4f21 100644
--- a/gcc/testsuite/g++.dg/pr48484.C
+++ b/gcc/testsuite/g++.dg/pr48484.C
@@ -2,9 +2,11 @@ 
 /* { dg-options "-O -finline-functions -finline-small-functions -Wuninitialized" }  */
 /* { dg-add-options bind_pic_locally } */
 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 struct SQObjectPtr
 {
-  int _type;
+  int32_t _type;
   SQObjectPtr operator = (long);
 };
 struct SQObjectPtrVec
@@ -53,11 +55,11 @@  bool
     nrefidx = 0;
   switch (o1._type)
     {
-    case 0x02000000:
+    case 0x02000000L:
       o4 = nrefidx;
       jump = 1;
       return true;
-    case 0x00000080:
+    case 0x00000080L:
       {
 	long
 	  idx = 10;
diff --git a/gcc/testsuite/g++.dg/pr53037-2.C b/gcc/testsuite/g++.dg/pr53037-2.C
index e617f9051f0..e716beed6ab 100644
--- a/gcc/testsuite/g++.dg/pr53037-2.C
+++ b/gcc/testsuite/g++.dg/pr53037-2.C
@@ -2,6 +2,8 @@ 
 /* { dg-do compile } */
 /* { dg-options "-O0 -Wpacked-not-aligned" } */
 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 struct __attribute__ ((aligned (8))) S8 { char a[8]; };
 struct __attribute__ ((packed)) S1 { /* { dg-warning "alignment 1 of 'S1' is less than 8" } */
   struct S8 s8;
@@ -12,13 +14,13 @@  struct __attribute__ ((packed, aligned (8))) S2 {
 };
 
 struct __attribute__ ((packed, aligned (8))) S3 {
-  int i1;
+  int32_t i1;
   struct S8 s8; /* { dg-warning "'S3::s8' offset 4 in 'S3' isn't aligned to 8" } */
 };
 
 struct __attribute__ ((packed, aligned (8))) S4 {
-  int i1;
-  int i2;
+  int32_t i1;
+  int32_t i2;
   struct S8 s8;
 };
 
@@ -27,11 +29,11 @@  struct __attribute__ ((packed)) S5 {
 };
 
 union __attribute__ ((packed)) U1 { /* { dg-warning "alignment 1 of 'U1' is less than 8" } */
-  int i1;
+  int32_t i1;
   struct S8 s8;
 };
 
 union __attribute__ ((packed, aligned (8))) U2 {
-  int i1;
+  int32_t i1;
   struct S8 s8;
 };
diff --git a/gcc/testsuite/g++.dg/pr53037-3.C b/gcc/testsuite/g++.dg/pr53037-3.C
index 1ed6354f677..c79268f7cc8 100644
--- a/gcc/testsuite/g++.dg/pr53037-3.C
+++ b/gcc/testsuite/g++.dg/pr53037-3.C
@@ -2,6 +2,8 @@ 
 /* { dg-do compile } */
 /* { dg-options "-O0 -Wall" } */
 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 struct __attribute__ ((aligned (8))) S8 { char a[8]; };
 struct __attribute__ ((packed)) S1 { /* { dg-warning "alignment 1 of 'S1' is less than 8" } */
   struct S8 s8;
@@ -12,13 +14,13 @@  struct __attribute__ ((packed, aligned (8))) S2 {
 };
 
 struct __attribute__ ((packed, aligned (8))) S3 {
-  int i1;
+  int32_t i1;
   struct S8 s8; /* { dg-warning "'S3::s8' offset 4 in 'S3' isn't aligned to 8" } */
 };
 
 struct __attribute__ ((packed, aligned (8))) S4 {
-  int i1;
-  int i2;
+  int32_t i1;
+  int32_t i2;
   struct S8 s8;
 };
 
@@ -27,11 +29,11 @@  struct __attribute__ ((packed)) S5 {
 };
 
 union __attribute__ ((packed)) U1 { /* { dg-warning "alignment 1 of 'U1' is less than 8" } */
-  int i1;
+  int32_t i1;
   struct S8 s8;
 };
 
 union __attribute__ ((packed, aligned (8))) U2 {
-  int i1;
+  int32_t i1;
   struct S8 s8;
 };
diff --git a/gcc/testsuite/g++.dg/pr66655.C b/gcc/testsuite/g++.dg/pr66655.C
index 218a2c63eb3..e4a40b02912 100644
--- a/gcc/testsuite/g++.dg/pr66655.C
+++ b/gcc/testsuite/g++.dg/pr66655.C
@@ -7,13 +7,13 @@  extern "C" void abort (void);
 
 #define COOKIE 0xabcd0123
 
-int
+int32_t
 g (void)
 {
   return COOKIE;
 }
 
-extern int f (void);
+extern int32_t f (void);
 
 int
 main (void)
diff --git a/gcc/testsuite/g++.dg/pr66655.h b/gcc/testsuite/g++.dg/pr66655.h
index ff638f43970..c730fbad48e 100644
--- a/gcc/testsuite/g++.dg/pr66655.h
+++ b/gcc/testsuite/g++.dg/pr66655.h
@@ -1,5 +1,7 @@ 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 struct S
 {
-  static int i;
-  static void set (int ii) { i = -ii; }
+  static int32_t i;
+  static void set (int32_t ii) { i = -ii; }
 };
diff --git a/gcc/testsuite/g++.dg/pr66655_1.cc b/gcc/testsuite/g++.dg/pr66655_1.cc
index d42344c4a04..96a10714cfc 100644
--- a/gcc/testsuite/g++.dg/pr66655_1.cc
+++ b/gcc/testsuite/g++.dg/pr66655_1.cc
@@ -1,13 +1,13 @@ 
 #include "pr66655.h"
 
-extern int g (void);
+extern int32_t g (void);
 
-int S::i;
+int32_t S::i;
 
-int
+int32_t
 f (void)
 {
-  int ret = g ();
+  int32_t ret = g ();
 
   S::set (ret);
   return ret;
diff --git a/gcc/testsuite/g++.dg/pr67351.C b/gcc/testsuite/g++.dg/pr67351.C
index f5bdda6cca7..152d92af188 100644
--- a/gcc/testsuite/g++.dg/pr67351.C
+++ b/gcc/testsuite/g++.dg/pr67351.C
@@ -3,7 +3,7 @@ 
 
 typedef unsigned char uchar;
 typedef unsigned short ushort;
-typedef unsigned int uint;
+typedef unsigned uint __attribute__((mode (__SI__)));
 typedef unsigned long long uint64;
 
 class MyRgba
diff --git a/gcc/testsuite/g++.dg/template/array30.C b/gcc/testsuite/g++.dg/template/array30.C
index 98723ace609..34f8a58aad8 100644
--- a/gcc/testsuite/g++.dg/template/array30.C
+++ b/gcc/testsuite/g++.dg/template/array30.C
@@ -1,7 +1,9 @@ 
-template <int I>
+typedef int int32_t __attribute__((mode (__SI__)));
+
+template <int32_t I>
 struct A
 {
-  int ar[I][I][I][I][I][I][I][I][I][I]; // { dg-error "exceeds maximum object size" }
+  int32_t ar[I][I][I][I][I][I][I][I][I][I]; // { dg-error "exceeds maximum object size" }
 };
 
 A<66000> a;
diff --git a/gcc/testsuite/g++.dg/template/constant1.C b/gcc/testsuite/g++.dg/template/constant1.C
index a2c5a08d366..850d02ded0d 100644
--- a/gcc/testsuite/g++.dg/template/constant1.C
+++ b/gcc/testsuite/g++.dg/template/constant1.C
@@ -3,7 +3,13 @@ 
 extern void foo(int);
 
 template <class Key, class Value> void Basic() {
+#if __SIZEOF_INT__ == 4
   const int kT = 1.5e6;        // <--- causes ICE
+#elif __SIZEOF_INT__ == 2
+  const int kT = 1.5e4;        // <--- causes ICE
+#elif __SIZEOF_INT__ == 1
+  const int kT = 1.5e2;        // <--- causes ICE
+#endif
   int size = kT*2/3;
   do {
     foo(size);
diff --git a/gcc/testsuite/g++.dg/template/constant2.C b/gcc/testsuite/g++.dg/template/constant2.C
index f71e4f56a22..ddf16694c31 100644
--- a/gcc/testsuite/g++.dg/template/constant2.C
+++ b/gcc/testsuite/g++.dg/template/constant2.C
@@ -3,7 +3,13 @@ 
 template<class C>
 class test {
  protected:
+#if __SIZEOF_INT__ == 4
   static const int versionConst = 0x80000000;
+#elif __SIZEOF_INT__ == 2
+  static const int versionConst = 0x8000;
+#elif __SIZEOF_INT__ == 1
+  static const int versionConst = 0x80;
+#endif
   enum { versionEnum = versionConst };
  public:
   int getVersion();
diff --git a/gcc/testsuite/g++.dg/template/friend18.C b/gcc/testsuite/g++.dg/template/friend18.C
index 712d4889fea..a9c51788661 100644
--- a/gcc/testsuite/g++.dg/template/friend18.C
+++ b/gcc/testsuite/g++.dg/template/friend18.C
@@ -5,9 +5,11 @@ 
 
 // PR 10158. implicit inline template friends ICE'd
 
-template <int N> struct X
+typedef int int32_t __attribute__((mode (__SI__)));
+
+template <int32_t N> struct X
 {
-  template <int M> friend int foo(X const &, X<M> const&)
+  template <int32_t M> friend int32_t foo(X const &, X<M> const&)
   {
     return N * 10000 + M;
   }
diff --git a/gcc/testsuite/g++.dg/template/pr68978.C b/gcc/testsuite/g++.dg/template/pr68978.C
index 19045329f01..cf91558847f 100644
--- a/gcc/testsuite/g++.dg/template/pr68978.C
+++ b/gcc/testsuite/g++.dg/template/pr68978.C
@@ -1,39 +1,41 @@ 
 // PR c++/68978
 
-int i = 0, c = 0, radix = 10, max = 0x7fffffff;
+typedef int int32_t __attribute__((mode (__SI__)));
 
-template <typename T> int toi_1() {
+int32_t i = 0, c = 0, radix = 10, max = 0x7fffffff;
+
+template <typename T> int32_t toi_1() {
   if (max < ((i *= radix) += c))
     return 0;
   return i;
 }
 
-template <typename T> int toi_2() {
+template <typename T> int32_t toi_2() {
   if (max < ((i = radix) = c))
     return 0;
   return i;
 }
 
-template <typename T> int toi_3() {
+template <typename T> int32_t toi_3() {
   if (max < ((i = radix) += c))
     return 0;
   return i;
 }
 
-template <typename T> int toi_4() {
+template <typename T> int32_t toi_4() {
   if (max < ((i += radix) = c))
     return 0;
   return i;
 }
 
-template <typename T> int toi_5() {
+template <typename T> int32_t toi_5() {
   if (max < (((i = radix) += (c += 5)) *= 30))
     return 0;
   return i;
 }
 
-int x = toi_1<int> ();
-int y = toi_2<int> ();
-int z = toi_3<int> ();
-int w = toi_4<int> ();
-int r = toi_5<int> ();
+int32_t x = toi_1<int32_t> ();
+int32_t y = toi_2<int32_t> ();
+int32_t z = toi_3<int32_t> ();
+int32_t w = toi_4<int32_t> ();
+int32_t r = toi_5<int32_t> ();
diff --git a/gcc/testsuite/g++.dg/torture/pr37421.C b/gcc/testsuite/g++.dg/torture/pr37421.C
index 4b8447eac49..c8cfd00cc15 100644
--- a/gcc/testsuite/g++.dg/torture/pr37421.C
+++ b/gcc/testsuite/g++.dg/torture/pr37421.C
@@ -1,4 +1,5 @@ 
 /* { dg-do compile } */
+/* { dg-require-effective-target int_eq_float } */
 
 #include <stdio.h>
 #include <string.h>
diff --git a/gcc/testsuite/g++.dg/torture/pr88861.C b/gcc/testsuite/g++.dg/torture/pr88861.C
index d2b6a4b7a47..ff66d5e1635 100644
--- a/gcc/testsuite/g++.dg/torture/pr88861.C
+++ b/gcc/testsuite/g++.dg/torture/pr88861.C
@@ -4,7 +4,11 @@  struct Ax {
   int n, a[];
 };
 
+#if __SIZEOF_INT__ < 4
+int i = 12345;
+#else
 int i = 12345678;
+#endif
 int main() {
   static Ax s{456, i};
   ((s.a[0]) ? (void)0 : (void)0);
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr19807.C b/gcc/testsuite/g++.dg/tree-ssa/pr19807.C
index 6a3fff0d06d..7a9a2e09817 100644
--- a/gcc/testsuite/g++.dg/tree-ssa/pr19807.C
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr19807.C
@@ -11,7 +11,7 @@  void foo(void)
 	z = 1 + &a[1];
 }
 
-/* { dg-final { scan-tree-dump-times "&MEM <int> \\\[\\\(void .\\\)&a \\\+ 8B\\\]" 3 "optimized" } } */
+/* { dg-final { scan-tree-dump-times "&MEM <int> \\\[\\\(void .\\\)&a \\\+ (?:4|8)B\\\]" 3 "optimized" } } */
 
 
 void bar(int i)
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr27291.C b/gcc/testsuite/g++.dg/tree-ssa/pr27291.C
index c5407c5bff6..053b768fda6 100644
--- a/gcc/testsuite/g++.dg/tree-ssa/pr27291.C
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr27291.C
@@ -29,7 +29,7 @@  namespace std
     static const bool is_integer = true;
   };
 };
-typedef unsigned int uint32_t;
+typedef unsigned uint32_t __attribute__ ((__mode__ (__SI__)));
 namespace std
 {
   template < typename _Alloc > class allocator;
@@ -69,8 +69,8 @@  namespace boost
     {
     };
   }
-  template <> class integer_traits < int >:public std::numeric_limits < int >,
-    public detail::integer_traits_base < int, (-2147483647 - 1), 2147483647 >
+  template <> class integer_traits < int32_t >:public std::numeric_limits < int32_t >,
+    public detail::integer_traits_base < int32_t, (-2147483647 - 1), 2147483647 >
   {
   };
   namespace random
@@ -191,11 +191,11 @@  namespace boost
       private:UniformRandomNumberGenerator _rng;
       };
     }
-    template < class RealType, int w, unsigned int p,
-      unsigned int q > class lagged_fibonacci_01
+    template < class RealType, int32_t w, uint32_t p,
+      uint32_t q > class lagged_fibonacci_01
     {
     public:typedef RealType result_type;
-      static const unsigned int long_lag = p;
+      static const uint32_t long_lag = p;
         lagged_fibonacci_01 ()
       {
 	seed ();
@@ -210,7 +210,7 @@  namespace boost
 	typedef detail::pass_through_engine < Generator & >ref_gen;
 	uniform_01 < ref_gen, RealType > gen01 =
 	  uniform_01 < ref_gen, RealType > (ref_gen (gen));
-	for (unsigned int j = 0; j < long_lag; ++j)
+	for (uint32_t j = 0; j < long_lag; ++j)
 	  x[j] = gen01 ();
       }
       RealType x[long_lag];
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr49516.C b/gcc/testsuite/g++.dg/tree-ssa/pr49516.C
index 2c6fd0496fc..e0e3c5be157 100644
--- a/gcc/testsuite/g++.dg/tree-ssa/pr49516.C
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr49516.C
@@ -3,25 +3,25 @@ 
 
 extern "C" void abort (void);
 
-typedef int int32;
-typedef unsigned int uint32;
-typedef unsigned long long uint64;
-typedef short int16;
+typedef int int32 __attribute__((mode (__SI__)));
+typedef unsigned uint32 __attribute__((mode (__SI__)));
+typedef unsigned uint64 __attribute__((mode (__DI__)));;
+typedef int int16 __attribute__((mode (__HI__)));;
 
 class Tp {
  public:
-  Tp(int, const int segment, const int index) __attribute__((noinline));
+  Tp(int32, const int32 segment, const int32 index) __attribute__((noinline));
 
   inline bool operator==(const Tp& other) const;
   inline bool operator!=(const Tp& other) const;
-  int GetType() const { return type_; }
-  int GetSegment() const { return segment_; }
-  int GetIndex() const { return index_; }
+  int32 GetType() const { return type_; }
+  int32 GetSegment() const { return segment_; }
+  int32 GetIndex() const { return index_; }
  private:
-  inline static bool IsValidSegment(const int segment);
-  static const int kSegmentBits = 28;
-  static const int kTypeBits = 4;
-  static const int kMaxSegment = (1 << kSegmentBits) - 1;
+  inline static bool IsValidSegment(const int32 segment);
+  static const int32 kSegmentBits = 28;
+  static const int32 kTypeBits = 4;
+  static const int32 kMaxSegment = (1L << kSegmentBits) - 1;
 
   union {
 
@@ -38,7 +38,7 @@  class Tp {
   };
 };
 
-Tp::Tp(int t, const int segment, const int index)
+Tp::Tp(int32 t, const int32 segment, const int32 index)
  : index_(index), segment_(segment), type_(t) {}
 
 inline bool Tp::operator==(const Tp& other) const {
@@ -50,18 +50,18 @@  inline bool Tp::operator!=(const Tp& other) const {
 
 class Range {
  public:
-  inline Range(const Tp& position, const int count) __attribute__((always_inline));
+  inline Range(const Tp& position, const int32 count) __attribute__((always_inline));
   inline Tp GetBeginTokenPosition() const;
   inline Tp GetEndTokenPosition() const;
  private:
   Tp position_;
-  int count_;
+  int32 count_;
   int16 begin_index_;
   int16 end_index_;
 };
 
 inline Range::Range(const Tp& position,
-                    const int count)
+                    const int32 count)
     : position_(position), count_(count), begin_index_(0), end_index_(0)
     { }
 
diff --git a/gcc/testsuite/g++.dg/warn/Wconversion-integer.C b/gcc/testsuite/g++.dg/warn/Wconversion-integer.C
index 42d9cb00044..2849e81595d 100644
--- a/gcc/testsuite/g++.dg/warn/Wconversion-integer.C
+++ b/gcc/testsuite/g++.dg/warn/Wconversion-integer.C
@@ -6,15 +6,18 @@ 
 
 #include <limits.h>
 
+typedef signed int int32_t __attribute__((mode (__SI__)));
+typedef unsigned uint32_t __attribute__((mode (__SI__)));
+
 void fsc (signed char sc);
 void fuc (unsigned char uc);
-unsigned fui (unsigned int  ui);
-void fsi (signed int ui);
+unsigned fui (uint32_t  ui);
+void fsi (int32_t ui);
 
-void h (int x)
+void h (int32_t x)
 {
-  unsigned int ui = 3;
-  int   si = 3;
+  uint32_t ui = 3;
+  int32_t   si = 3;
   unsigned char uc = 3;
   signed char   sc = 3;
 
diff --git a/gcc/testsuite/g++.dg/warn/Wconversion-null-2.C b/gcc/testsuite/g++.dg/warn/Wconversion-null-2.C
index 98f5c405165..0f5bf58bd5d 100644
--- a/gcc/testsuite/g++.dg/warn/Wconversion-null-2.C
+++ b/gcc/testsuite/g++.dg/warn/Wconversion-null-2.C
@@ -3,9 +3,7 @@ 
 
 #include <cstddef>
 
-void g(int) {}
-void g(long) {}
-void g(long long) {}
+void g(__INTPTR_TYPE__) {}
 extern void g(void*);
 
 template <int I>
@@ -17,13 +15,7 @@  template <class T>
 void l(T);
 
 template <>
-void l(int) {}
-
-template <>
-void l(long) {}
-
-template <>
-void l(long long) {}
+void l(__INTPTR_TYPE__) {}
 
 void warn_for_NULL()
 {
diff --git a/gcc/testsuite/g++.dg/warn/Wconversion-null.C b/gcc/testsuite/g++.dg/warn/Wconversion-null.C
index e2ca13e514c..4cac2671116 100644
--- a/gcc/testsuite/g++.dg/warn/Wconversion-null.C
+++ b/gcc/testsuite/g++.dg/warn/Wconversion-null.C
@@ -3,9 +3,7 @@ 
 
 #include <cstddef>
 
-void g(int) {}
-void g(long) {}
-void g(long long) {}
+void g(__INTPTR_TYPE__) {}
 extern void g(void*);
 
 template <int I>
@@ -17,13 +15,7 @@  template <class T>
 void l(T);
 
 template <>
-void l(int) {}
-
-template <>
-void l(long) {}
-
-template <>
-void l(long long) {}
+void l(__INTPTR_TYPE__) {}
 
 int main()
 {
diff --git a/gcc/testsuite/g++.dg/warn/Wconversion3.C b/gcc/testsuite/g++.dg/warn/Wconversion3.C
index 71604f9a8e6..81682524fd5 100644
--- a/gcc/testsuite/g++.dg/warn/Wconversion3.C
+++ b/gcc/testsuite/g++.dg/warn/Wconversion3.C
@@ -19,7 +19,7 @@  void test1 (void)
   unsigned char f = (int) uc;
   signed char g = (int) sc;
   unsigned char h = (unsigned int) (short int) uc;
-  signed char i = (int) (unsigned short int) sc;	// { dg-warning "may change value" }
+  signed char i = (int) (unsigned short int) sc;	// { dg-warning "may change value" "" { target { ! short_eq_int } } }
   unsigned char j = (unsigned int) (short int) us;	// { dg-warning "may change value" }
   signed char k = (int) (unsigned short int) ss;	// { dg-warning "may change value" }
 }
diff --git a/gcc/testsuite/g++.dg/warn/Wduplicated-branches1.C b/gcc/testsuite/g++.dg/warn/Wduplicated-branches1.C
index 1553613f9ec..30cea63b1e9 100644
--- a/gcc/testsuite/g++.dg/warn/Wduplicated-branches1.C
+++ b/gcc/testsuite/g++.dg/warn/Wduplicated-branches1.C
@@ -6,7 +6,7 @@  template <typename T>
 void
 f (signed char i, int *p)
 {
-  if (i)
+  if (i) // { dg-warning "this condition has identical branches" "" { target short_eq_int } }
     *p = (signed short) i;
   else
     *p = (unsigned short) i;
diff --git a/gcc/testsuite/g++.dg/warn/Wplacement-new-size-5.C b/gcc/testsuite/g++.dg/warn/Wplacement-new-size-5.C
index 0bed5771531..4afc7e503ab 100644
--- a/gcc/testsuite/g++.dg/warn/Wplacement-new-size-5.C
+++ b/gcc/testsuite/g++.dg/warn/Wplacement-new-size-5.C
@@ -11,17 +11,19 @@ 
 void* operator new (__SIZE_TYPE__ n, void *p) { return p; }
 void* operator new[] (__SIZE_TYPE__ n, void *p) { return p; }
 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 struct A { };
 
 char carr[2];
-int iarr[2];
+int32_t iarr[2];
 
 struct C0 { char i, carr[0]; };
-struct I0 { int i, iarr[0]; };
+struct I0 { int32_t i, iarr[0]; };
 struct CX { char i, carr[]; };
-struct IX { int i, iarr[]; };
+struct IX { int32_t i, iarr[]; };
 
-void test_single (C0 *pc, CX *qc, I0 *pi, IX *qi, int n)
+void test_single (C0 *pc, CX *qc, I0 *pi, IX *qi, int32_t n)
 {
   new (&carr[DIFF_MIN]) A ();       // { dg-warning "placement new constructing an object of type .A. and size .1. in a region of type .char \\\[2]. and size .0." }
   new (&carr[-1]) A;                // { dg-warning "\\\[-Wplacement-new" }
diff --git a/gcc/testsuite/g++.dg/warn/Wplacement-new-size.C b/gcc/testsuite/g++.dg/warn/Wplacement-new-size.C
index 2bafff34577..48d6b15656a 100644
--- a/gcc/testsuite/g++.dg/warn/Wplacement-new-size.C
+++ b/gcc/testsuite/g++.dg/warn/Wplacement-new-size.C
@@ -3,6 +3,8 @@ 
 
 typedef __typeof__ (sizeof 0) size_t;
 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 void* operator new (size_t, void *p) { return p; }
 void* operator new[] (size_t, void *p) { return p; }
 
@@ -31,7 +33,7 @@  static __attribute__ ((used))struct SAC2 { char ac [2]; } sac2;
 static __attribute__ ((used))struct SAC3 { char ac [3]; } sac3;
 static __attribute__ ((used))struct SAC4 { char ac [4]; } sac4;
 
-static __attribute__ ((used))struct SSC { SC sc; int x; } ssc;
+static __attribute__ ((used))struct SSC { SC sc; int32_t x; } ssc;
 static __attribute__ ((used))struct SSAC1 { SAC1 sac; } ssac1;
 static __attribute__ ((used))struct SSAC2 { SAC2 sac; } ssac2;
 static __attribute__ ((used))struct SSAC3 { SAC3 sac; } ssac3;
@@ -55,7 +57,7 @@  static __attribute__ ((used))void *r;
 static __attribute__ ((used))void* ptr () { return 0; }
 
 static __attribute__ ((used))
-void test (void *p, int n)
+void test (void *p, int32_t n)
 {
     {
         void *q = p;
@@ -167,83 +169,83 @@  void test (void *p, int n)
     new (ac8) char [2][2][2];
     new (ac8) char [2][2][3];           // { dg-warning "placement" }
 
-    new (&c) int;                       // { dg-warning "placement" }
+    new (&c) int32_t;                       // { dg-warning "placement" }
 
-    new (&ac1) int;                     // { dg-warning "placement" }
-    new (&ac2) int;                     // { dg-warning "placement" }
-    new (&ac3) int;                     // { dg-warning "placement" }
-    new (&ac4) int;
+    new (&ac1) int32_t;                     // { dg-warning "placement" }
+    new (&ac2) int32_t;                     // { dg-warning "placement" }
+    new (&ac3) int32_t;                     // { dg-warning "placement" }
+    new (&ac4) int32_t;
 
     // Constructing at an address of an array element.
-    new (&ac1 [0]) int;                 // { dg-warning "placement" }
-    new (&ac2 [0]) int;                 // { dg-warning "placement" }
-    new (&ac3 [0]) int;                 // { dg-warning "placement" }
-    new (&ac4 [0]) int;
+    new (&ac1 [0]) int32_t;                 // { dg-warning "placement" }
+    new (&ac2 [0]) int32_t;                 // { dg-warning "placement" }
+    new (&ac3 [0]) int32_t;                 // { dg-warning "placement" }
+    new (&ac4 [0]) int32_t;
 
     // ...plus or minus a constant offset.
-    new (&ac1 [0] + 0) int;             // { dg-warning "placement" }
-    new (&ac2 [0] + 0) int;             // { dg-warning "placement" }
-    new (&ac3 [0] + 0) int;             // { dg-warning "placement" }
-    new (&ac4 [0] + 0) int;
-    new (&ac4 [1] + 0) int;             // { dg-warning "placement" }
-    new (&ac4 [1] - 1) int;
-    new (&ac4 [2] - 1) int;             // { dg-warning "placement" }
-    new (&ac4 [2] - 2) int;
-    new (&ac4 [3] - 1) int;             // { dg-warning "placement" }
-    new (&ac4 [3] - 2) int;             // { dg-warning "placement" }
-    new (&ac4 [3] - 3) int;
-    new (&ac4 [4] - 1) int;             // { dg-warning "placement" }
-    new (&ac4 [4] - 2) int;             // { dg-warning "placement" }
-    new (&ac4 [4] - 3) int;             // { dg-warning "placement" }
-    new (&ac4 [4] - 4) int;
-
-    new (&ac1 [0] + 1) int;             // { dg-warning "placement" }
-    new (&ac2 [0] + 1) int;             // { dg-warning "placement" }
-    new (&ac3 [0] + 1) int;             // { dg-warning "placement" }
-    new (&ac4 [0] + 1) int;             // { dg-warning "placement" }
-
-    new (&ac3 [0] + n) int;             // { dg-warning "placement" }
-    new (&ac4 [0] + n) int;             // no warning (n could be zero)
-    new (&ac4 [1] + n) int;             // no warning (n could be negative)
-    new (&ac4 [2] + n) int;             // ditto
-    new (&ac4 [3] + n) int;             // ditto
-    new (&ac4 [4] + n) int;             // ditto
-    new (&ac4 [4] - n) int;             // (or positive)
-
-    new (&c + 0) int;                   // { dg-warning "placement" }
-    new (&c + 1) int;                   // { dg-warning "placement" }
+    new (&ac1 [0] + 0) int32_t;             // { dg-warning "placement" }
+    new (&ac2 [0] + 0) int32_t;             // { dg-warning "placement" }
+    new (&ac3 [0] + 0) int32_t;             // { dg-warning "placement" }
+    new (&ac4 [0] + 0) int32_t;
+    new (&ac4 [1] + 0) int32_t;             // { dg-warning "placement" }
+    new (&ac4 [1] - 1) int32_t;
+    new (&ac4 [2] - 1) int32_t;             // { dg-warning "placement" }
+    new (&ac4 [2] - 2) int32_t;
+    new (&ac4 [3] - 1) int32_t;             // { dg-warning "placement" }
+    new (&ac4 [3] - 2) int32_t;             // { dg-warning "placement" }
+    new (&ac4 [3] - 3) int32_t;
+    new (&ac4 [4] - 1) int32_t;             // { dg-warning "placement" }
+    new (&ac4 [4] - 2) int32_t;             // { dg-warning "placement" }
+    new (&ac4 [4] - 3) int32_t;             // { dg-warning "placement" }
+    new (&ac4 [4] - 4) int32_t;
+
+    new (&ac1 [0] + 1) int32_t;             // { dg-warning "placement" }
+    new (&ac2 [0] + 1) int32_t;             // { dg-warning "placement" }
+    new (&ac3 [0] + 1) int32_t;             // { dg-warning "placement" }
+    new (&ac4 [0] + 1) int32_t;             // { dg-warning "placement" }
+
+    new (&ac3 [0] + n) int32_t;             // { dg-warning "placement" }
+    new (&ac4 [0] + n) int32_t;             // no warning (n could be zero)
+    new (&ac4 [1] + n) int32_t;             // no warning (n could be negative)
+    new (&ac4 [2] + n) int32_t;             // ditto
+    new (&ac4 [3] + n) int32_t;             // ditto
+    new (&ac4 [4] + n) int32_t;             // ditto
+    new (&ac4 [4] - n) int32_t;             // (or positive)
+
+    new (&c + 0) int32_t;                   // { dg-warning "placement" }
+    new (&c + 1) int32_t;                   // { dg-warning "placement" }
 
     // Constructing at an offset into the address of an array.
-    new (&ac1 + 0) int;                 // { dg-warning "placement" }
-    new (&ac1 + 1) int;                 // { dg-warning "placement" }
-    new (&ac1 + n) int;                 // { dg-warning "placement" }
-    new (&ac2 + 0) int;                 // { dg-warning "placement" }
-    new (&ac2 + 1) int;                 // { dg-warning "placement" }
-    new (&ac2 + n) int;                 // { dg-warning "placement" }
-    new (&ac3 + 0) int;                 // { dg-warning "placement" }
-    new (&ac3 + 1) int;                 // { dg-warning "placement" }
+    new (&ac1 + 0) int32_t;                 // { dg-warning "placement" }
+    new (&ac1 + 1) int32_t;                 // { dg-warning "placement" }
+    new (&ac1 + n) int32_t;                 // { dg-warning "placement" }
+    new (&ac2 + 0) int32_t;                 // { dg-warning "placement" }
+    new (&ac2 + 1) int32_t;                 // { dg-warning "placement" }
+    new (&ac2 + n) int32_t;                 // { dg-warning "placement" }
+    new (&ac3 + 0) int32_t;                 // { dg-warning "placement" }
+    new (&ac3 + 1) int32_t;                 // { dg-warning "placement" }
 
     // Even though n below is uknown an array of 3 bytes isn't large
-    // enugh for an int.
-    new (&ac3 + n) int;                 // { dg-warning "placement" }
+    // enugh for an int32_t.
+    new (&ac3 + n) int32_t;                 // { dg-warning "placement" }
 
-    new (&ac4 + 0) int;
-    new (&ac4 + 1) int;                 // { dg-warning "placement" }
-    new (&ac4 + n) int;                 // no warning (n could be zero)
+    new (&ac4 + 0) int32_t;
+    new (&ac4 + 1) int32_t;                 // { dg-warning "placement" }
+    new (&ac4 + n) int32_t;                 // no warning (n could be zero)
 
     // Constructing in an array object.
-    new (ac1) int;                      // { dg-warning "placement" }
-    new (ac2) int;                      // { dg-warning "placement" }
-    new (ac3) int;                      // { dg-warning "placement" }
-    new (ac4) int;
-    new (ac5) int;
-    new (ac5 + 0) int;
-    new (ac5 + 1) int;
-    new (ac5 + n) int;                  // no warning (n could be zero)
-    new (ac5 + 2) int;                  // { dg-warning "placement" }
-    new (ac5 + 3) int;                  // { dg-warning "placement" }
-    new (ac5 + 4) int;                  // { dg-warning "placement" }
-    new (ac5 + 5) int;                  // { dg-warning "placement" }
+    new (ac1) int32_t;                      // { dg-warning "placement" }
+    new (ac2) int32_t;                      // { dg-warning "placement" }
+    new (ac3) int32_t;                      // { dg-warning "placement" }
+    new (ac4) int32_t;
+    new (ac5) int32_t;
+    new (ac5 + 0) int32_t;
+    new (ac5 + 1) int32_t;
+    new (ac5 + n) int32_t;                  // no warning (n could be zero)
+    new (ac5 + 2) int32_t;                  // { dg-warning "placement" }
+    new (ac5 + 3) int32_t;                  // { dg-warning "placement" }
+    new (ac5 + 4) int32_t;                  // { dg-warning "placement" }
+    new (ac5 + 5) int32_t;                  // { dg-warning "placement" }
 
     new (ac1_1) char;
     new (ac1_1) char[1];
@@ -278,65 +280,65 @@  void test (void *p, int n)
     new (ac2_2) char[4][2];             // { dg-warning "placement" }
     new (ac2_2) char[5];                // { dg-warning "placement" }
 
-    new (&s) int;                       // { dg-warning "placement" }
-    new (&as1) int;                     // { dg-warning "placement" }
-    new (&as2) int;
+    new (&s) int32_t;                       // { dg-warning "placement" }
+    new (&as1) int32_t;                     // { dg-warning "placement" }
+    new (&as2) int32_t;
 
-    new (as1) int;                      // { dg-warning "placement" }
-    new (as2) int;
+    new (as1) int32_t;                      // { dg-warning "placement" }
+    new (as2) int32_t;
 
-    new (&sc.c) int;                    // { dg-warning "placement" }
-    new (&sac1.ac) int;                 // { dg-warning "placement" }
-    new (&sac2.ac) int;                 // { dg-warning "placement" }
-    new (&sac3.ac) int;                 // { dg-warning "placement" }
-    new (&sac4.ac) int;
+    new (&sc.c) int32_t;                    // { dg-warning "placement" }
+    new (&sac1.ac) int32_t;                 // { dg-warning "placement" }
+    new (&sac2.ac) int32_t;                 // { dg-warning "placement" }
+    new (&sac3.ac) int32_t;                 // { dg-warning "placement" }
+    new (&sac4.ac) int32_t;
 
     new (sc.pc) char;
-    new (sc.pc) int;
-    new (sc.pc) int[1024];
-    new (sc.pc + 0) int;
-    new (sc.pc + 0) int[2048];
-    new (sc.pv) int;
+    new (sc.pc) int32_t;
+    new (sc.pc) int32_t[1024];
+    new (sc.pc + 0) int32_t;
+    new (sc.pc + 0) int32_t[2048];
+    new (sc.pv) int32_t;
     new (sc.pv) char[1024];
 
-    new (sac1.ac) int;                  // { dg-warning "placement" }
-    new (sac2.ac) int;                  // { dg-warning "placement" }
-    new (sac3.ac) int;                  // { dg-warning "placement" }
-    new (sac4.ac) int;
+    new (sac1.ac) int32_t;                  // { dg-warning "placement" }
+    new (sac2.ac) int32_t;                  // { dg-warning "placement" }
+    new (sac3.ac) int32_t;                  // { dg-warning "placement" }
+    new (sac4.ac) int32_t;
 
     new (&ssc.sc) SSC;                  // { dg-warning "placement" }
-    new (&ssac1.sac) int;               // { dg-warning "placement" }
-    new (&ssac2.sac) int;               // { dg-warning "placement" }
-    new (&ssac3.sac) int;               // { dg-warning "placement" }
-    new (&ssac4.sac) int;
+    new (&ssac1.sac) int32_t;               // { dg-warning "placement" }
+    new (&ssac2.sac) int32_t;               // { dg-warning "placement" }
+    new (&ssac3.sac) int32_t;               // { dg-warning "placement" }
+    new (&ssac4.sac) int32_t;
 
     new (&sssac4_2) char[sizeof sssac4_2];
     new (&sssac4_2) char[sizeof sssac4_2 + 1];   // { dg-warning "placement" }
 
     // taking the address of a temporary is allowed with -fpermissive
-    new (&fsc ().c) int;                // { dg-warning "18:taking address|placement" }
-    new (&fasc1 ().ac) int;             // { dg-warning "20:taking address|placement" }
-    new (&fasc2 ().ac) int;             // { dg-warning "20:taking address|placement" }
-    new (&fasc3 ().ac) int;             // { dg-warning "20:taking address|placement" }
-    new (&fasc4 ().ac) int;             // { dg-warning "20:taking address|placement" }
-
-    new (&uac1) int;                    // { dg-warning "placement" }
-    new (&uac2) int;                    // { dg-warning "placement" }
-    new (&uac3) int;                    // { dg-warning "placement" }
-    new (&uac4) int;
-    new (&uac4 + 1) int;                // { dg-warning "placement" }
-
-    new (&uac1.c) int;                  // { dg-warning "placement" }
-    new (&uac2.c) int;                  // { dg-warning "placement" }
-    new (&uac3.c) int;                  // { dg-warning "placement" }
+    new (&fsc ().c) int32_t;                // { dg-warning "18:taking address|placement" }
+    new (&fasc1 ().ac) int32_t;             // { dg-warning "20:taking address|placement" }
+    new (&fasc2 ().ac) int32_t;             // { dg-warning "20:taking address|placement" }
+    new (&fasc3 ().ac) int32_t;             // { dg-warning "20:taking address|placement" }
+    new (&fasc4 ().ac) int32_t;             // { dg-warning "20:taking address|placement" }
+
+    new (&uac1) int32_t;                    // { dg-warning "placement" }
+    new (&uac2) int32_t;                    // { dg-warning "placement" }
+    new (&uac3) int32_t;                    // { dg-warning "placement" }
+    new (&uac4) int32_t;
+    new (&uac4 + 1) int32_t;                // { dg-warning "placement" }
+
+    new (&uac1.c) int32_t;                  // { dg-warning "placement" }
+    new (&uac2.c) int32_t;                  // { dg-warning "placement" }
+    new (&uac3.c) int32_t;                  // { dg-warning "placement" }
 
     // Diagnose the following even though the size of uac4.c could be
     // expected to extend to the end of the union (as it is by Built-in
     // Object Size and so isn't diagnosed in calls to functions like
-    // memset(&uac4.c, 0, sizeof(int)) when _FORTIFY_SOURCE is non-zero.  */
-    new (&uac4.c) int;                  // { dg-warning "placement" }
+    // memset(&uac4.c, 0, sizeof(int32_t)) when _FORTIFY_SOURCE is non-zero.  */
+    new (&uac4.c) int32_t;                  // { dg-warning "placement" }
 
-    new (&uac4.c + 1) int;              // { dg-warning "placement" }
+    new (&uac4.c + 1) int32_t;              // { dg-warning "placement" }
 }
 
 
@@ -344,7 +346,7 @@  struct S { char c [2]; };
 
 // Verify the full text of the warning message.
 static  __attribute__ ((used))
-void test_message (int i)
+void test_message (int32_t i)
 {
     char a [2];
 
@@ -364,7 +366,7 @@  void test_message (int i)
 
 
 struct ClassWithMemberNew {
-    struct Object { int i; } *pobj;
+    struct Object { int32_t i; } *pobj;
     unsigned nobj;
 
     ClassWithMemberNew ();
@@ -382,7 +384,7 @@  void ClassWithMemberNew::foo()
 
 
 struct ClassWithGlobalNew {
-    int a [4];
+    int32_t a [4];
     ClassWithGlobalNew ();
 };
 
@@ -425,16 +427,16 @@  extern TemplateClass<void> exttempl_void;
 static __attribute__ ((used))
 void test_extern_buffer_of_unknown_size ()
 {
-    new (extbuf) int ();
-    new (extbuf) int [1024];
+    new (extbuf) int32_t ();
+    new (extbuf) int32_t [1024];
 
-    new (&exttempl_void) int ();
-    new (&exttempl_void) int [1024];
+    new (&exttempl_void) int32_t ();
+    new (&exttempl_void) int32_t [1024];
 }
 
-extern char extbuf_size_int [sizeof (int)];
+extern char extbuf_size_int [sizeof (int32_t)];
 
-extern TemplateClass<int> exttempl;
+extern TemplateClass<int32_t> exttempl;
 
 // Verify that a warning is issued as expected when placement new is
 // called with an extern buffer of known size (and the case is handled
@@ -442,14 +444,14 @@  extern TemplateClass<int> exttempl;
 static __attribute__ ((used))
 void test_extern_buffer ()
 {
-    new (extbuf_size_int) int ();
-    new (extbuf_size_int) int [1];
+    new (extbuf_size_int) int32_t ();
+    new (extbuf_size_int) int32_t [1];
 
-    struct S { int a [2]; };
+    struct S { int32_t a [2]; };
 
     new (extbuf_size_int) S;            // { dg-warning "placement" }
-    new (extbuf_size_int) int [2];      // { dg-warning "placement" }
+    new (extbuf_size_int) int32_t [2];      // { dg-warning "placement" }
 
-    new (&exttempl) int ();             // { dg-warning "placement" }
-    new (&exttempl) int [1024];         // { dg-warning "placement" }
+    new (&exttempl) int32_t ();             // { dg-warning "placement" }
+    new (&exttempl) int32_t [1024];         // { dg-warning "placement" }
 }
diff --git a/gcc/testsuite/g++.dg/warn/Wstrict-aliasing-5.C b/gcc/testsuite/g++.dg/warn/Wstrict-aliasing-5.C
index a0492511865..84c493c435f 100644
--- a/gcc/testsuite/g++.dg/warn/Wstrict-aliasing-5.C
+++ b/gcc/testsuite/g++.dg/warn/Wstrict-aliasing-5.C
@@ -1,9 +1,11 @@ 
 /* { dg-do compile } */
 /* { dg-options "-Wstrict-aliasing=2 -O2" } */
 
+typedef unsigned uint32_t __attribute__((mode (__SI__)));
+
 float foo ()
 {
-  unsigned int MASK = 0x80000000;
+  uint32_t MASK = 0x80000000;
   return (float &) MASK; /* { dg-warning "strict-aliasing" } */
 }
 
diff --git a/gcc/testsuite/g++.dg/warn/Wstrict-aliasing-bogus-signed-unsigned.C b/gcc/testsuite/g++.dg/warn/Wstrict-aliasing-bogus-signed-unsigned.C
index 5e71ebff805..971e535590c 100644
--- a/gcc/testsuite/g++.dg/warn/Wstrict-aliasing-bogus-signed-unsigned.C
+++ b/gcc/testsuite/g++.dg/warn/Wstrict-aliasing-bogus-signed-unsigned.C
@@ -1,10 +1,12 @@ 
 /* { dg-do compile } */
 /* { dg-options "-O2 -Wstrict-aliasing -fstrict-aliasing" } */
 
+typedef int int32_t __attribute__((mode (__SI__)));
+typedef unsigned uint32_t __attribute__((mode (__SI__)));
 
-int foo () {
-  int i;
-  unsigned int* pu = reinterpret_cast<unsigned int*> (&i);  /* { dg-bogus "signed vs. unsigned" } */
+int32_t foo () {
+  int32_t i;
+  uint32_t* pu = reinterpret_cast<uint32_t*> (&i);  /* { dg-bogus "signed vs. unsigned" } */
   *pu = 1000000;
   return i;
 }
diff --git a/gcc/testsuite/g++.dg/warn/Wtype-limits-Wextra.C b/gcc/testsuite/g++.dg/warn/Wtype-limits-Wextra.C
index 99e1e89b4b7..813cefc2f70 100644
--- a/gcc/testsuite/g++.dg/warn/Wtype-limits-Wextra.C
+++ b/gcc/testsuite/g++.dg/warn/Wtype-limits-Wextra.C
@@ -22,10 +22,14 @@  void a (unsigned char x)
 
 void b (unsigned short x)
 {
-  if (x < 0)  return;/* { dg-warning "comparison is always false due to limited range of data type" } */
-  if (x >= 0) return;/* { dg-warning "comparison is always true due to limited range of data type" } */
-  if (0 > x)  return;/* { dg-warning "comparison is always false due to limited range of data type" } */
-  if (0 <= x) return;/* { dg-warning "comparison is always true due to limited range of data type" } */
+  if (x < 0)  return;/* { dg-warning "comparison is always false due to limited range of data type" "" { target { ! short_eq_int } } } */
+  /* { dg-warning "comparison of unsigned expression in '< 0' is always false" "" { target short_eq_int } .-1 } */
+  if (x >= 0) return;/* { dg-warning "comparison is always true due to limited range of data type" "" { target { ! short_eq_int } } } */
+  /* { dg-warning "comparison of unsigned expression in '>= 0' is always true" "" { target short_eq_int } .-1 } */
+  if (0 > x)  return;/* { dg-warning "comparison is always false due to limited range of data type" "" { target { ! short_eq_int } } } */
+  /* { dg-warning "comparison of unsigned expression in '< 0' is always false" "" { target short_eq_int } .-1 } */
+  if (0 <= x) return;/* { dg-warning "comparison is always true due to limited range of data type" "" { target { ! short_eq_int } } } */
+  /* { dg-warning "comparison of unsigned expression in '>= 0' is always true" "" { target short_eq_int } .-1 } */
 }
 
 void c (unsigned int x)
diff --git a/gcc/testsuite/g++.dg/warn/Wtype-limits.C b/gcc/testsuite/g++.dg/warn/Wtype-limits.C
index 6a968d953db..104f53c7b56 100644
--- a/gcc/testsuite/g++.dg/warn/Wtype-limits.C
+++ b/gcc/testsuite/g++.dg/warn/Wtype-limits.C
@@ -22,10 +22,14 @@  void a (unsigned char x)
 
 void b (unsigned short x)
 {
-  if (x < 0)  return;/* { dg-warning "comparison is always false due to limited range of data type" } */
-  if (x >= 0) return;/* { dg-warning "comparison is always true due to limited range of data type" } */
-  if (0 > x)  return;/* { dg-warning "comparison is always false due to limited range of data type" } */
-  if (0 <= x) return;/* { dg-warning "comparison is always true due to limited range of data type" } */
+  if (x < 0)  return;/* { dg-warning "comparison is always false due to limited range of data type" "" { target { ! short_eq_int } } } */
+  /* { dg-warning "comparison of unsigned expression in '< 0' is always false" "" { target short_eq_int } .-1 } */
+  if (x >= 0) return;/* { dg-warning "comparison is always true due to limited range of data type" "" { target { ! short_eq_int } } } */
+  /* { dg-warning "comparison of unsigned expression in '>= 0' is always true" "" { target short_eq_int } .-1 } */
+  if (0 > x)  return;/* { dg-warning "comparison is always false due to limited range of data type" "" { target { ! short_eq_int } } } */
+  /* { dg-warning "comparison of unsigned expression in '< 0' is always false" "" { target short_eq_int } .-1 } */
+  if (0 <= x) return;/* { dg-warning "comparison is always true due to limited range of data type" "" { target { ! short_eq_int } } } */
+  /* { dg-warning "comparison of unsigned expression in '>= 0' is always true" "" { target short_eq_int } .-1 } */
 }
 
 void c (unsigned int x)
diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/enum11.C b/gcc/testsuite/g++.old-deja/g++.brendan/enum11.C
index fda718b4f7e..2979c77718f 100644
--- a/gcc/testsuite/g++.old-deja/g++.brendan/enum11.C
+++ b/gcc/testsuite/g++.old-deja/g++.brendan/enum11.C
@@ -1,5 +1,6 @@ 
 // { dg-do assemble  }
 // GROUPS passed enums
+typedef unsigned uint32_t __attribute__((mode (__SI__)));
 class X
 {
     enum
@@ -8,7 +9,7 @@  class X
        twoMask  = 0x000F0000,
        thiMask = 0xFFF00000, // { dg-error "comma at end" "" { target { ! c++11 } } }
     };
-    unsigned int foo;
+    uint32_t foo;
 
 public:
     X (int) : foo (oneMask | twoMask ) {}               // No warning
diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C
index c42557a5c16..453eb540ca2 100644
--- a/gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C
+++ b/gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C
@@ -33,7 +33,7 @@ 
 
 int main ();
 
-short s = (short) &main;	// { dg-error "11:cast \[^\n\r]* loses precision" "lose" { xfail h8*-*-* xstormy16-*-* } }
+short s = (short) &main;	// { dg-error "11:cast \[^\n\r]* loses precision" "lose" { target { ! ptr_eq_short } } }
 char c = (char) &main;		// { dg-error "10:cast \[^\n\r]* loses precision" "lose" }
 
 int main () { return 0; }
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/ns15.C b/gcc/testsuite/g++.old-deja/g++.mike/ns15.C
index 7768f698e37..b4cf044a80b 100644
--- a/gcc/testsuite/g++.old-deja/g++.mike/ns15.C
+++ b/gcc/testsuite/g++.old-deja/g++.mike/ns15.C
@@ -1,5 +1,6 @@ 
 // { dg-do assemble }
 // { dg-xfail-if "" { xstormy16-*-* } }
+// { dg-require-effective-target size20plus }
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/gcc/testsuite/g++.old-deja/g++.other/exprstmt1.C b/gcc/testsuite/g++.old-deja/g++.other/exprstmt1.C
index abe072999d1..5970cb21b62 100644
--- a/gcc/testsuite/g++.old-deja/g++.other/exprstmt1.C
+++ b/gcc/testsuite/g++.old-deja/g++.other/exprstmt1.C
@@ -3,23 +3,22 @@ 
 // { dg-error "limited range of data type" "16-bit target" { target xstormy16-*-* } 0 }
 // { dg-error "shift count >=" "16-bit target" { target xstormy16-*-* } 0 }
 
+typedef unsigned uint32_t __attribute__((mode (__SI__)));
+
 int main()
 {
-  unsigned int x = 1381237248;
-
-  if (sizeof (x) != 4)
-    return 0;
+  uint32_t x = 1381237248;
 
   x =
     ({
-      unsigned int y = x;
+      uint32_t y = x;
       ({
-        unsigned int z = y;
-        (unsigned int)
-          ((((unsigned int)z & (unsigned int)0x000000ffUL) << 24)
-           | (((unsigned int)z & (unsigned int)0x0000ff00UL) << 8)
-           | (((unsigned int)z & (unsigned int)0x00ff0000UL) >> 8)
-           | (((unsigned int)z & (unsigned int)0xff000000UL) >> 24));
+        uint32_t z = y;
+        (uint32_t)
+          ((((uint32_t)z & (uint32_t)0x000000ffUL) << 24)
+           | (((uint32_t)z & (uint32_t)0x0000ff00UL) << 8)
+           | (((uint32_t)z & (uint32_t)0x00ff0000UL) >> 8)
+           | (((uint32_t)z & (uint32_t)0xff000000UL) >> 24));
        });
      });
   return x != 152658;
diff --git a/gcc/testsuite/g++.old-deja/g++.other/inline12.C b/gcc/testsuite/g++.old-deja/g++.other/inline12.C
index c91845c411e..5702141babe 100644
--- a/gcc/testsuite/g++.old-deja/g++.other/inline12.C
+++ b/gcc/testsuite/g++.old-deja/g++.other/inline12.C
@@ -4,7 +4,7 @@ 
 // Origin: Hans-Peter Nilsson <hp@axis.com>
 // See <URL:http://gcc.gnu.org/ml/gcc-patches/2000-06/msg00310.html>
 
-typedef unsigned int    udword;
+typedef unsigned udword __attribute__((mode (__SI__)));
 extern "C" {
 void __assert (const char *, int, const char *);
 }
diff --git a/gcc/testsuite/g++.old-deja/g++.other/new6.C b/gcc/testsuite/g++.old-deja/g++.other/new6.C
index 7013337b21b..a3a98a722e2 100644
--- a/gcc/testsuite/g++.old-deja/g++.other/new6.C
+++ b/gcc/testsuite/g++.old-deja/g++.other/new6.C
@@ -5,8 +5,10 @@ 
 using namespace std;
 extern "C" void *malloc (size_t);
 
-int special;
-int space = 0xdeadbeef;
+typedef int int32_t __attribute__((mode (__SI__)));
+
+int32_t special;
+int32_t space = 0xdeadbeef;
 
 void *operator new (size_t size)
 #if __cplusplus <= 199711L
@@ -21,7 +23,7 @@  void *operator new (size_t size)
 int main ()
 {
   special = 1;
-  int *p = new int();
+  int32_t *p = new int32_t();
   special = 0;
   return *p != 0;
 }
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/crash16.C b/gcc/testsuite/g++.old-deja/g++.pt/crash16.C
index 30bd0cc2dd5..1ac630bc01f 100644
--- a/gcc/testsuite/g++.old-deja/g++.pt/crash16.C
+++ b/gcc/testsuite/g++.old-deja/g++.pt/crash16.C
@@ -1,6 +1,7 @@ 
 // { dg-do assemble }
 // { dg-xfail-if "" { xstormy16-*-* } }
 // { dg-options "" }
+// { dg-skip-if "16-bit int overflow" int16 }
 
 extern "C" void qsort(void *base, __SIZE_TYPE__ nmemb, __SIZE_TYPE__ size,
               int (*compar)(const void *, const void *));
diff --git a/gcc/testsuite/g++.old-deja/g++.robertl/eb76.C b/gcc/testsuite/g++.old-deja/g++.robertl/eb76.C
index 3125dc15f34..8109a2f0eaa 100644
--- a/gcc/testsuite/g++.old-deja/g++.robertl/eb76.C
+++ b/gcc/testsuite/g++.old-deja/g++.robertl/eb76.C
@@ -1,5 +1,6 @@ 
 // { dg-do assemble  }
 // { dg-options "-fno-short-enums" }
+// { dg-skip-if "" int16 }
 // the template operator!= interferes.  It should be in a namespace.
 
 #include <utility>
diff --git a/gcc/testsuite/g++.old-deja/g++.warn/flow1.C b/gcc/testsuite/g++.old-deja/g++.warn/flow1.C
index 61f6a554970..fa2b3e5cd1a 100644
--- a/gcc/testsuite/g++.old-deja/g++.warn/flow1.C
+++ b/gcc/testsuite/g++.old-deja/g++.warn/flow1.C
@@ -2,13 +2,15 @@ 
 // { dg-options "-Wreturn-type" }
 // Test that we don't get a warning about flowing off the end.
 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 struct A {
   ~A ();
 };
 
-int f()
+int32_t f()
 {
   A a1[2];
   A a2[2];
-  return 1234567;
+  return 1234567L;
 }
diff --git a/gcc/testsuite/gcc.dg/Walloca-14.c b/gcc/testsuite/gcc.dg/Walloca-14.c
index 657402f3891..51362b2d6be 100644
--- a/gcc/testsuite/gcc.dg/Walloca-14.c
+++ b/gcc/testsuite/gcc.dg/Walloca-14.c
@@ -2,7 +2,8 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target alloca } */
 /* { dg-skip-if "small address space" { "pdp11-*-*" } } */
-/* { dg-options "-O2 -Walloca-larger-than=126812070" } */
+/* { dg-options "-O2 -Walloca-larger-than=126812070" { target ptr32plus }  } */
+/* { dg-options "-O2 -Walloca-larger-than=12070" { target { ! ptr32plus } } } */
 
 void
 g (int *p)
diff --git a/gcc/testsuite/gcc.dg/Warray-bounds-32.c b/gcc/testsuite/gcc.dg/Warray-bounds-32.c
index 54b09bc9b98..9b5f3331735 100644
--- a/gcc/testsuite/gcc.dg/Warray-bounds-32.c
+++ b/gcc/testsuite/gcc.dg/Warray-bounds-32.c
@@ -150,8 +150,8 @@  void wide_ptr_index_range_chain (void)
 
     T (p3[0]);                /* { dg-warning "array subscript \\\[3, 6] is outside array bounds of .\[a-z \]+\\\[3]." } */
     T (p3[1]);                /* { dg-warning "array subscript \\\[4, 7] is outside array bounds of .\[a-z \]+\\\[3]." } */
-    T (p3[9999]);             /* { dg-warning "array subscript \\\[10002, 10005] is outside array bounds of .\[a-z \]+\\\[3]." } */
-
+    T (p3[9999]);             /* { dg-warning "array subscript \\\[10002, 10005] is outside array bounds of .\[a-z \]+\\\[3]." "" { target size20plus} } */
+    /* { dg-warning "array subscript \\\[-6382, -6379] is outside array bounds of .\[a-z \]+\\\[3]." "" { target { ! size20plus } } .-1 } */
     /* Large offsets are indistinguishable from negative values.  */
     T (p3[DIFF_MAX]);         /* { dg-warning "array subscript" "bug" { xfail *-*-* } } */
   }
diff --git a/gcc/testsuite/gcc.dg/Wbuiltin-declaration-mismatch-4.c b/gcc/testsuite/gcc.dg/Wbuiltin-declaration-mismatch-4.c
index 856166c6673..e845b43c073 100644
--- a/gcc/testsuite/gcc.dg/Wbuiltin-declaration-mismatch-4.c
+++ b/gcc/testsuite/gcc.dg/Wbuiltin-declaration-mismatch-4.c
@@ -41,7 +41,7 @@  void test_integer_conversion_abs (void)
   i = abs (uc);
 
   i = abs (si);
-  i = abs (usi);
+  i = abs (usi);    /* { dg-warning ".abs. argument 1 promotes to .unsigned int. where .int. is expected in a call to built-in function declared without prototype" "" { target short_eq_int } } */
 
   i = abs (i);
   i = abs (ui);     /* { dg-warning ".abs. argument 1 type is .unsigned int. where .int. is expected in a call to built-in function declared without prototype" } */
@@ -77,9 +77,9 @@  void test_integer_conversion_memset (void *d)
   /* Passing a ptrdiff_t where size_t is expected may not be unsafe
      but because GCC may emits suboptimal code for such calls warning
      for them helps improve efficiency.  */
-  memset (d, 0, diffi);       /* { dg-warning ".memset. argument 3 promotes to .ptrdiff_t. {aka .\(long \)?int.} where .\(long \)?unsigned int. is expected" } */
+  memset (d, 0, diffi);       /* { dg-warning ".memset. argument 3 promotes to .ptrdiff_t. {aka .\(long \)?\(int\)?\(__int20\)?.} where .\(long \)?\(__int20 \)?unsigned\( int\)?. is expected" } */
 
-  memset (d, 0, 2.0);         /* { dg-warning ".memset. argument 3 type is .double. where '\(long \)?unsigned int' is expected" } */
+  memset (d, 0, 2.0);         /* { dg-warning ".memset. argument 3 type is .double. where '\(long \)?\(__int20 \)?unsigned\( int\)?' is expected" } */
 
   /* Verify that the same call as above but to the built-in doesn't
      trigger a warning.  */
diff --git a/gcc/testsuite/gcc.dg/concat2.c b/gcc/testsuite/gcc.dg/concat2.c
index e9fa216d63d..62f45d4880b 100644
--- a/gcc/testsuite/gcc.dg/concat2.c
+++ b/gcc/testsuite/gcc.dg/concat2.c
@@ -11,4 +11,4 @@ 
 #define e4	e3 e3 e3 e3 e3 e3 e3 e3 e3 e3
 #define e5	e4 e4 e4 e4 e4 e4 e4 e4 e4 e4
 
-void foo() { (void)(e5); }  /* { dg-error "size of string literal is too large" "" { target { ! size32plus } } } */
+void foo() { (void)(e5); }  /* { dg-error "size of string literal is too large" "" { target { ! size20plus } } } */
diff --git a/gcc/testsuite/gcc.dg/fold-convmaxconv-1.c b/gcc/testsuite/gcc.dg/fold-convmaxconv-1.c
index 3ffff8bde42..f8157e9257c 100644
--- a/gcc/testsuite/gcc.dg/fold-convmaxconv-1.c
+++ b/gcc/testsuite/gcc.dg/fold-convmaxconv-1.c
@@ -1,9 +1,12 @@ 
 /* { dg-do compile } */
 /* { dg-options "-O -fdump-tree-optimized" } */
 
-int foo (short a[], int x)
+typedef int int32_t __attribute__((mode (__SI__)));
+typedef unsigned uint32_t __attribute__((mode (__SI__)));
+
+int32_t foo (short a[], int32_t x)
 {
-  unsigned int i;
+  uint32_t i;
   for (i = 0; i < 1000; i++)
     {
       x = a[i];
diff --git a/gcc/testsuite/gcc.dg/fold-convminconv-1.c b/gcc/testsuite/gcc.dg/fold-convminconv-1.c
index f4a048e1f45..7070ecf337c 100644
--- a/gcc/testsuite/gcc.dg/fold-convminconv-1.c
+++ b/gcc/testsuite/gcc.dg/fold-convminconv-1.c
@@ -1,9 +1,12 @@ 
 /* { dg-do compile } */
 /* { dg-options "-O -fdump-tree-optimized" } */
 
-int foo (unsigned short a[], unsigned int x)
+typedef int int32_t __attribute__((mode (__SI__)));
+typedef unsigned uint32_t __attribute__((mode (__SI__)));
+
+int32_t foo (unsigned short a[], uint32_t x)
 {
-  unsigned int i;
+  uint32_t i;
   for (i = 0; i < 1000; i++)
     {
       x = a[i];
diff --git a/gcc/testsuite/gcc.dg/graphite/scop-4.c b/gcc/testsuite/gcc.dg/graphite/scop-4.c
index eeaa7fa02bc..a691eeaf8f2 100644
--- a/gcc/testsuite/gcc.dg/graphite/scop-4.c
+++ b/gcc/testsuite/gcc.dg/graphite/scop-4.c
@@ -1,3 +1,5 @@ 
+/* { dg-require-effective-target size20plus } */
+
 void bar ();
 
 int toto()
diff --git a/gcc/testsuite/gcc.dg/loop-versioning-1.c b/gcc/testsuite/gcc.dg/loop-versioning-1.c
index 17e95fdfbab..2f2c1eeee72 100644
--- a/gcc/testsuite/gcc.dg/loop-versioning-1.c
+++ b/gcc/testsuite/gcc.dg/loop-versioning-1.c
@@ -45,7 +45,11 @@  f6 (double *x, int stepx, unsigned int limit)
     *y = 100;
 }
 
+#if __SIZEOF_SIZE_T__ < 4
+double x[1000];
+#else
 double x[10000];
+#endif
 
 void
 g1 (int stepx, int n)
diff --git a/gcc/testsuite/gcc.dg/loop-versioning-2.c b/gcc/testsuite/gcc.dg/loop-versioning-2.c
index 3d07f83d205..d9a1a99aead 100644
--- a/gcc/testsuite/gcc.dg/loop-versioning-2.c
+++ b/gcc/testsuite/gcc.dg/loop-versioning-2.c
@@ -1,5 +1,5 @@ 
 /* { dg-options "-O3 -fdump-tree-lversion-details" } */
-/* { dg-require-effective-target size32plus } */
+/* { dg-require-effective-target size20plus } */
 
 /* Versioning for step == 1 in these loops would allow loop interchange,
    but otherwise isn't worthwhile.  At the moment we decide not to version.  */
diff --git a/gcc/testsuite/gcc.dg/lto/20081210-1_0.c b/gcc/testsuite/gcc.dg/lto/20081210-1_0.c
index 80a1e9a2c03..8048b26b34e 100644
--- a/gcc/testsuite/gcc.dg/lto/20081210-1_0.c
+++ b/gcc/testsuite/gcc.dg/lto/20081210-1_0.c
@@ -1,10 +1,4 @@ 
-#if defined(_LP64)
-typedef unsigned long int uintptr_t;
-#elif defined (_WIN64)
-typedef unsigned long long int uintptr_t;
-#else
-typedef unsigned int uintptr_t;
-#endif
+typedef __UINTPTR_TYPE__ uintptr_t;
 
 extern void srand (uintptr_t);
 
diff --git a/gcc/testsuite/gcc.dg/lto/pr85870_0.c b/gcc/testsuite/gcc.dg/lto/pr85870_0.c
index b57ac7c0d73..b1b71c63334 100644
--- a/gcc/testsuite/gcc.dg/lto/pr85870_0.c
+++ b/gcc/testsuite/gcc.dg/lto/pr85870_0.c
@@ -3,16 +3,18 @@ 
 /* { dg-lto-options { { -flto -O2 } } } */
 /* { dg-extra-ld-options { -r -nostdlib -flinker-output=nolto-rel } } */
 
+typedef unsigned uint32_t __attribute__((mode (__SI__)));
+
 typedef struct abc_s {
   char a1;
   short a2;
-  unsigned int a3;
-  unsigned int a4;
+  uint32_t a3;
+  uint32_t a4;
 } abc;
 
 typedef struct xyz_s {
- unsigned x1;
- unsigned x2;
+ uint32_t x1;
+ uint32_t x2;
  abc *x3;
 } xyz;
 
diff --git a/gcc/testsuite/gcc.dg/lto/pr85870_1.c b/gcc/testsuite/gcc.dg/lto/pr85870_1.c
index cd1cd310164..c035bbb2fbe 100644
--- a/gcc/testsuite/gcc.dg/lto/pr85870_1.c
+++ b/gcc/testsuite/gcc.dg/lto/pr85870_1.c
@@ -1,14 +1,16 @@ 
+typedef unsigned uint32_t __attribute__((mode (__SI__)));
+
 typedef struct abc_s {
   char a1;
   short a2;
-  unsigned int a3;
-  unsigned int a4;
+  uint32_t a3;
+  uint32_t a4;
 } abc;
 
 
 typedef struct xyz_s {
- unsigned int x1;
- unsigned int x2;
+ uint32_t x1;
+ uint32_t x2;
  abc *x3;
 } xyz;
 
diff --git a/gcc/testsuite/gcc.dg/pr36227.c b/gcc/testsuite/gcc.dg/pr36227.c
index 27fe0015505..ba0d7224939 100644
--- a/gcc/testsuite/gcc.dg/pr36227.c
+++ b/gcc/testsuite/gcc.dg/pr36227.c
@@ -1,14 +1,6 @@ 
 /* { dg-do compile } */
 /* { dg-options "-O2 -Wstrict-overflow=3" } */
-#if (__SIZEOF_LONG_LONG__ == __SIZEOF_POINTER__)
-typedef unsigned long long ptrcast;
-#elif (__SIZEOF_LONG__ == __SIZEOF_POINTER__)
-typedef unsigned long ptrcast;
-#elif (__SIZEOF_INT__ == __SIZEOF_POINTER__)
-typedef unsigned int ptrcast;
-#else
-#error Add target support here
-#endif
+typedef __UINTPTR_TYPE__ ptrcast;
 
 volatile unsigned long *
 sat_add(volatile unsigned long *ptr, unsigned long i, volatile unsigned long *end)
diff --git a/gcc/testsuite/gcc.dg/pr42611.c b/gcc/testsuite/gcc.dg/pr42611.c
index 0426ce2d5bc..f502feac337 100644
--- a/gcc/testsuite/gcc.dg/pr42611.c
+++ b/gcc/testsuite/gcc.dg/pr42611.c
@@ -3,7 +3,8 @@ 
 /* { dg-options "" } */
 
 #define L \
-  (sizeof (__SIZE_TYPE__) == 1 ? __SCHAR_MAX__				\
+  (sizeof (__SIZE_TYPE__) == sizeof (void *) ? __INTPTR_MAX__ \
+  : sizeof (__SIZE_TYPE__) == 1 ? __SCHAR_MAX__				\
   : sizeof (__SIZE_TYPE__) == sizeof (short) ? __SHRT_MAX__		\
   : sizeof (__SIZE_TYPE__) == sizeof (int) ? __INT_MAX__		\
   : sizeof (__SIZE_TYPE__) == sizeof (long) ? __LONG_MAX__		\
diff --git a/gcc/testsuite/gcc.dg/pr59963-2.c b/gcc/testsuite/gcc.dg/pr59963-2.c
index f54a3126960..9344566fc87 100644
--- a/gcc/testsuite/gcc.dg/pr59963-2.c
+++ b/gcc/testsuite/gcc.dg/pr59963-2.c
@@ -32,6 +32,6 @@  foo (int i)
               -7, /* { dg-warning "15:-Wsign-conversion" } */
                -8); /* { dg-warning "16:-Wsign-conversion" } */
   bazu (i, i); /* { dg-warning "9:conversion" } */
-  bazi (0x8, 0x80000000); /* { dg-warning "14:-Wsign-conversion" "first" { xfail int16 } } */
+  bazi (0x8, 0x80000000); /* { dg-warning "14:-Wsign-conversion" "first" { target { ! int16 } } } */
 			  /* { dg-warning "overflow in conversion from" "second" { target int16 } .-1 } */
 }
diff --git a/gcc/testsuite/gcc.dg/pr68317.c b/gcc/testsuite/gcc.dg/pr68317.c
index 9ba6fb075e6..891d12954ba 100644
--- a/gcc/testsuite/gcc.dg/pr68317.c
+++ b/gcc/testsuite/gcc.dg/pr68317.c
@@ -1,15 +1,17 @@ 
 /* { dg-do compile } */
 /* { dg-options "-O2" } */
 
-void bar (int);
+typedef int int32_t __attribute__((mode (__SI__)));
+
+void bar (int32_t);
 
 void
 foo ()
 {
- int index = 0;
+ int32_t index = 0;
 
- for (index; index <= 10; index--)
+ for (index; index <= 10; index--) // expected warning here
    /* Result of the following multiply will overflow
-      when converted to signed int.  */
+      when converted to signed int32_t.  */
    bar ((0xcafe + index) * 0xdead);  /* { dg-warning "iteration \[0-9\]+ invokes undefined behavior" } */
 }
diff --git a/gcc/testsuite/gcc.dg/pr78973.c b/gcc/testsuite/gcc.dg/pr78973.c
index d0ecba49810..2251071cd75 100644
--- a/gcc/testsuite/gcc.dg/pr78973.c
+++ b/gcc/testsuite/gcc.dg/pr78973.c
@@ -9,7 +9,7 @@ 
 static void f (void *p, int n)
 {
   if (n <= 4)
-    __builtin_memset (p, 0, n);   /* { dg-warning "exceeds maximum object size" "pr79073" { xfail ilp32 } } */
+    __builtin_memset (p, 0, n);   /* { dg-warning "exceeds maximum object size" "pr79073" { xfail { ilp32 || { int16 && { ! msp430_large_memory_model } } } } } */
 }
 
 void g (void *d, unsigned n)
diff --git a/gcc/testsuite/gcc.dg/pr85859.c b/gcc/testsuite/gcc.dg/pr85859.c
index b1476ba3806..7a57a09682c 100644
--- a/gcc/testsuite/gcc.dg/pr85859.c
+++ b/gcc/testsuite/gcc.dg/pr85859.c
@@ -15,6 +15,6 @@  int
 main (void)
 {
   b = (unsigned char) __builtin_parity (d);
-  e ? foo (0) : (long) &c;
+  e ? foo (0) : (__INTPTR_TYPE__) &c;
   return 0;
 }
diff --git a/gcc/testsuite/gcc.dg/pr86179.c b/gcc/testsuite/gcc.dg/pr86179.c
index 6a90f09e6e8..f3dd3675c06 100644
--- a/gcc/testsuite/gcc.dg/pr86179.c
+++ b/gcc/testsuite/gcc.dg/pr86179.c
@@ -1,14 +1,17 @@ 
 /* { dg-do compile } */
 /* { dg-options "-O3" } */
 
-void c(int *d, char *g)
+typedef int int32_t __attribute__((mode (__SI__)));
+typedef unsigned uint32_t __attribute__((mode (__SI__)));
+
+void c(int32_t *d, char *g)
 {
   char *a, *b, *e;
   int f;
   for (; f; f -= 8) {
-      *d++ = *e++ | (unsigned)*g++ << 8 | (unsigned)*b++ << 16 |
-	  (unsigned)*a++ << 24;
-      *d++ = *e++ | (unsigned)*g++ << 8 | (unsigned)*b++ << 16 |
-	  (unsigned)*a++ << 24;
+      *d++ = *e++ | (uint32_t)*g++ << 8 | (uint32_t)*b++ << 16 |
+	  (uint32_t)*a++ << 24;
+      *d++ = *e++ | (uint32_t)*g++ << 8 | (uint32_t)*b++ << 16 |
+	  (uint32_t)*a++ << 24;
   }
 }
diff --git a/gcc/testsuite/gcc.dg/torture/20181024-1.c b/gcc/testsuite/gcc.dg/torture/20181024-1.c
index a3cce24b873..9cc97a9033b 100644
--- a/gcc/testsuite/gcc.dg/torture/20181024-1.c
+++ b/gcc/testsuite/gcc.dg/torture/20181024-1.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target size32plus } */
 /* { dg-additional-options "-march=core-avx2" { target { x86_64-*-* i?86-*-* } } } */
+/* { dg-require-effective-target size32plus } */
 
 typedef enum {
  C = 0,               N, S, E, W, T, B,               NE, NW, SE, SW,               NT, NB, ST, SB,               ET, EB, WT, WB,               FLAGS, N_CELL_ENTRIES} CELL_ENTRIES;
diff --git a/gcc/testsuite/gcc.dg/torture/pr71598-2.c b/gcc/testsuite/gcc.dg/torture/pr71598-2.c
index 44b23f56663..8b57a50cb47 100644
--- a/gcc/testsuite/gcc.dg/torture/pr71598-2.c
+++ b/gcc/testsuite/gcc.dg/torture/pr71598-2.c
@@ -1,6 +1,7 @@ 
 /* { dg-do run } */
 /* { dg-prune-output "use of enum values across objects may fail" } */
 /* { dg-additional-options "-fshort-enums" } */
+/* { dg-skip-if "" short_eq_int } */
 
 enum e1 { c1 = -__INT_MAX__ };
 
diff --git a/gcc/testsuite/gcc.dg/torture/pr86034.c b/gcc/testsuite/gcc.dg/torture/pr86034.c
index d83ea394ce9..30912cab095 100644
--- a/gcc/testsuite/gcc.dg/torture/pr86034.c
+++ b/gcc/testsuite/gcc.dg/torture/pr86034.c
@@ -3,15 +3,17 @@ 
 
 /* { dg-do run } */
 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 struct A
 {
-  int b;
-  __INT32_TYPE__ c:24;
-  int d:10;
-  int e;
+  int32_t b;
+  int32_t c:24;
+  int32_t d:10;
+  int32_t e;
 } f;
 
-int g; 
+int32_t g; 
 
 void h ()
 {
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-3.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-3.c
index 39d89dbb117..03e536fd0e7 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-3.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-3.c
@@ -360,35 +360,35 @@  NOIPA void test_too_large (char *d, int x, __builtin_va_list va)
   const size_t imax_p1 = imax + 1;
 
   __builtin_snprintf (d, imax,    "%c", x);
-  __builtin_snprintf (d, imax_p1, "%c", x);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "INT_MAX + 1" { target lp64 } } */
-  /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size" "INT_MAX + 1" { target { { avr-*-* } || ilp32 } } .-1 } */
+  __builtin_snprintf (d, imax_p1, "%c", x);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "INT_MAX + 1" { target { lp64 || msp430_large_memory_model } } } */
+  /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size" "INT_MAX + 1" { target { { avr-*-* } || { { ilp32 } || { int16 && { ! msp430_large_memory_model } } } } } .-1 } */
 
   __builtin_vsnprintf (d, imax,    "%c", va);
-  __builtin_vsnprintf (d, imax_p1, "%c", va);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "INT_MAX + 1" { target lp64 } } */
-  /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size" "INT_MAX + 1" { target { { avr-*-* } || ilp32 } } .-1 } */
+  __builtin_vsnprintf (d, imax_p1, "%c", va);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "INT_MAX + 1" { target { lp64 || msp430_large_memory_model } } } */
+  /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size" "INT_MAX + 1" { target { { avr-*-* } || { { ilp32 } || { int16 && { ! msp430_large_memory_model } } } } } .-1 } */
 
   __builtin___snprintf_chk (d, imax,    0, imax,    "%c", x);
-  __builtin___snprintf_chk (d, imax_p1, 0, imax_p1, "%c", x);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "INT_MAX + 1" { target lp64 } } */
-  /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size" "INT_MAX + 1" { target { { avr-*-* } || ilp32 } } .-1 } */
+  __builtin___snprintf_chk (d, imax_p1, 0, imax_p1, "%c", x);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "INT_MAX + 1" { target { lp64 || msp430_large_memory_model } } } */
+  /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size" "INT_MAX + 1" { target { { avr-*-* } || { { ilp32 } || { int16 && { ! msp430_large_memory_model } } } } } .-1 } */
 
   __builtin___vsnprintf_chk (d, imax,    0, imax,    "%c", va);
-  __builtin___vsnprintf_chk (d, imax_p1, 0, imax_p1, "%c", va);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "INT_MAX + 1" { target lp64 } } */
-  /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size" "INT_MAX + 1" { target { { avr-*-* } || ilp32 } } .-1 } */
+  __builtin___vsnprintf_chk (d, imax_p1, 0, imax_p1, "%c", va);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "INT_MAX + 1" { target { lp64 || msp430_large_memory_model } } } */
+  /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size" "INT_MAX + 1" { target { { avr-*-* } || { { ilp32 } || { int16 && { ! msp430_large_memory_model } } } } } .-1 } */
 
   const size_t ptrmax = __PTRDIFF_MAX__;
   const size_t ptrmax_m1 = ptrmax - 1;
 
-  __builtin_snprintf (d, ptrmax_m1, "%c", x);  /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "PTRDIFF_MAX - 1" { target lp64 } } */
-  __builtin_snprintf (d, ptrmax, "  %c", x);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "PTRDIFF_MAX" { target lp64 } } */
+  __builtin_snprintf (d, ptrmax_m1, "%c", x);  /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "PTRDIFF_MAX - 1" { target { lp64 || msp430_large_memory_model } } } */
+  __builtin_snprintf (d, ptrmax, "  %c", x);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "PTRDIFF_MAX" { target { lp64 || msp430_large_memory_model } } } */
 
-  __builtin_vsnprintf (d, ptrmax_m1, "%c", va);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "PTRDIFF_MAX - 1" { target lp64 } } */
-  __builtin_vsnprintf (d, ptrmax,    "%c", va);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "PTRDIFF_MAX" { target lp64 } } */
+  __builtin_vsnprintf (d, ptrmax_m1, "%c", va);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "PTRDIFF_MAX - 1" { target { lp64 || msp430_large_memory_model } } } */
+  __builtin_vsnprintf (d, ptrmax,    "%c", va);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "PTRDIFF_MAX" { target { lp64 || msp430_large_memory_model } } } */
 
-  __builtin___snprintf_chk (d, ptrmax_m1, 0, ptrmax_m1, "%c", x);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "PTRDIFF_MAX - 1" { target lp64 } } */
-  __builtin___snprintf_chk (d, ptrmax,    0, ptrmax,    "%c", x);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "PTRDIFF_MAX" { target lp64 } } */
+  __builtin___snprintf_chk (d, ptrmax_m1, 0, ptrmax_m1, "%c", x);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "PTRDIFF_MAX - 1" { target { lp64 || msp430_large_memory_model } } } */
+  __builtin___snprintf_chk (d, ptrmax,    0, ptrmax,    "%c", x);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "PTRDIFF_MAX" { target { lp64 || msp430_large_memory_model } } } */
 
-  __builtin___vsnprintf_chk (d, ptrmax_m1, 0, ptrmax_m1, "%c", va);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "PTRDIFF_MAX - 1" { target lp64 } } */
-  __builtin___vsnprintf_chk (d, ptrmax,    0, ptrmax,    "%c", va);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "PTRDIFF_MAX" { target lp64 } } */
+  __builtin___vsnprintf_chk (d, ptrmax_m1, 0, ptrmax_m1, "%c", va);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "PTRDIFF_MAX - 1" { target { lp64 || msp430_large_memory_model } } } */
+  __builtin___vsnprintf_chk (d, ptrmax,    0, ptrmax,    "%c", va);   /* { dg-warning "specified bound \[0-9\]+ exceeds .INT_MAX." "PTRDIFF_MAX" { target { lp64 || msp430_large_memory_model } } } */
 }
 
 /* Exercise ordinary sprintf with malloc.  */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/integer-addr.c b/gcc/testsuite/gcc.dg/tree-ssa/integer-addr.c
index a8a9de4ef55..ed94f6b3f0d 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/integer-addr.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/integer-addr.c
@@ -1,7 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-options "-O2 -fdump-tree-optimized -fno-strict-aliasing" } */
 /* Test with fixed address */
-static int *foo =  (int *) (unsigned long) 0x7800000;
+static int *foo =  (int *) (unsigned long) __INTPTR_MAX__;
 
 int func(void) __attribute__ ((noinline));
 
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-10.c b/gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-10.c
index 8f5a9a03970..621f48f7d6e 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-10.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-10.c
@@ -3,16 +3,18 @@ 
 /* { dg-require-effective-target size20plus } */
 /* { dg-skip-if "too big data segment" { visium-*-* } } */
 
+typedef int int32_t __attribute__((mode (__SI__)));
+
 #define M 256
 int a[M][M], b[M][M];
-int __attribute__((noinline))
+int32_t __attribute__((noinline))
 double_reduc (int n)
 {
-  int sum = 0;
+  int32_t sum = 0;
   for (int j = 0; j < n; j++)
     {
       for (int i = 0; i < n; i++)
-	sum = sum + a[i][j]*b[i][j];
+	sum = sum + (int32_t)a[i][j]*(int32_t)b[i][j];
     }
   return sum;
 }
@@ -34,7 +36,7 @@  int main (void)
   for (int i = 0; i < M; ++i)
     init (i);
 
-  int sum = double_reduc (M);
+  int32_t sum = double_reduc (M);
 
   if (sum != 1065369600)
     abort ();
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr84436-3.c b/gcc/testsuite/gcc.dg/tree-ssa/pr84436-3.c
index 87937f30ab1..48740dd5a24 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr84436-3.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr84436-3.c
@@ -20,5 +20,5 @@  void f() {
   h(g);
 }
 
-/* { dg-final { scan-tree-dump-times ".* \\+ 4294967247" 1 "switchconv" } } */
+/* { dg-final { scan-tree-dump-times ".* \\+ (?:4294967247|65487)" 1 "switchconv" } } */
 /* { dg-final { scan-tree-dump-not "switch" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr84648.c b/gcc/testsuite/gcc.dg/tree-ssa/pr84648.c
index 6ff5a07cd20..7832ffa398b 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr84648.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr84648.c
@@ -1,8 +1,10 @@ 
 /* { dg-do compile } */
 /* { dg-options "-O3 -fdump-tree-cddce1-details" } */
 
+typedef unsigned uint32_t __attribute__((mode (__SI__)));
+
 int main() {
-    for (unsigned i = 0; i < (1u << 31); ++i) {
+    for (uint32_t i = 0; i < (1UL << 31); ++i) {
     }
     return 0;
 }
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/scev-8.c b/gcc/testsuite/gcc.dg/tree-ssa/scev-8.c
index 666dd30bfbe..a5b2ff71958 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/scev-8.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/scev-8.c
@@ -3,6 +3,12 @@ 
 
 int *a;
 
+#if __SIZEOF_INT__ == __SIZEOF_SHORT__
+typedef char small_t;
+#else
+typedef short small_t;
+#endif
+
 int
 foo1 (long long s, long long l)
 {
@@ -10,7 +16,7 @@  foo1 (long long s, long long l)
 
   for (i = s; i < l; i++)
     {
-      a[(short)i] = 0;
+      a[(small_t)i] = 0;
     }
   return 0;
 }
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-8.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-8.c
index c456d734fa7..95c936cbf71 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-8.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-8.c
@@ -300,10 +300,10 @@  f2 (struct C *x)
 	  else
 	    {
 	      o = f2 (x);
-#if __SIZEOF_POINTER__ == __SIZEOF_LONG__
+#if __SIZEOF_POINTER__ == __SIZEOF_LONG__ && !__MSP430X_LARGE__
 	      if (((unsigned long) o > (unsigned long) -4000L))
-#elif __SIZEOF_POINTER__ == __SIZEOF_INT__
-	  if (((__UINTPTR_TYPE__) o > (__UINTPTR_TYPE__) -4000U))
+#else
+	  if (((__UINTPTR_TYPE__) o > (__UINTPTR_TYPE__) -4000UL))
 #endif
 		{
 		  e = 5;
@@ -388,10 +388,10 @@  f2 (struct C *x)
 	  break;
 	case 19:
 	  o = f2 (x);
-#if __SIZEOF_POINTER__ == __SIZEOF_LONG__
+#if __SIZEOF_POINTER__ == __SIZEOF_LONG__ && !__MSP430X_LARGE__
 	  if (((unsigned long) o > (unsigned long) -4000L))
-#elif __SIZEOF_POINTER__ == __SIZEOF_INT__
-	  if (((__UINTPTR_TYPE__) o > (__UINTPTR_TYPE__) -4000U))
+#else
+	  if (((__UINTPTR_TYPE__) o > (__UINTPTR_TYPE__) -4000UL))
 #endif
 	    {
 	      e = 6;
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 3e91a81dd5a..197bf2d17b0 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -2767,6 +2767,16 @@  proc check_effective_target_large_return_values { } {
     }
     return 1
 }
+# Return 1 if we support 20-bit or larger array and structure sizes
+# using default options, 0 otherwise.
+# This implies at least a 24-bit address space, as no targets have an address
+# space between 20 and 24 bits.
+
+proc check_effective_target_size24plus { } {
+    return [check_no_compiler_messages size24plus object {
+	char dummy[524289L];
+    }]
+}
 
 # Return 1 if we support 24-bit or larger array and structure sizes
 # using default options, 0 otherwise.
@@ -2829,6 +2839,34 @@  proc check_effective_target_int_eq_float { } {
     }]
 }
 
+# Return 1 if short size is equal to int size,
+# 0 otherwise.
+
+proc check_effective_target_short_eq_int { } {
+    return [check_no_compiler_messages short_eq_int object {
+	int dummy[sizeof (short) == sizeof (int) ? 1 : -1];
+    }]
+}
+
+# Return 1 if pointer size is equal to short size,
+# 0 otherwise.
+
+proc check_effective_target_ptr_eq_short { } {
+    return [check_no_compiler_messages ptr_eq_short object {
+	int dummy[sizeof (void *) == sizeof (short) ? 1 : -1];
+    }]
+}
+
+
+# Return 1 if pointer size is equal to int size,
+# 0 otherwise.
+
+proc check_effective_target_ptr_eq_int { } {
+    return [check_no_compiler_messages ptr_eq_int object {
+	int dummy[sizeof (void *) == sizeof (int) ? 1 : -1];
+    }]
+}
+
 # Return 1 if pointer size is equal to long size,
 # 0 otherwise.
 
@@ -10249,3 +10287,12 @@  proc check_effective_target_lgccjit { } {
      int main() { return 0; }
   } "-lgccjit"]
 }
+
+# Return 1 if the MSP430 large memory model is in use.
+proc check_effective_target_msp430_large_memory_model {} {
+    return [check_no_compiler_messages msp430_large assembly {
+	#ifndef __MSP430X_LARGE__
+	#error
+	#endif
+    } ""]
+}