16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -x c++ -emit-llvm -triple=mips-unknown-linux-gnu < %s | FileCheck --check-prefix=O32 %s
26bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -x c++ -emit-llvm -triple=mips64-unknown-linux-gnu -target-abi n32 < %s | FileCheck --check-prefix=N32 %s
3ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// RUN: %clang_cc1 -x c++ -emit-llvm -triple=mips64-unknown-linux-gnu -target-abi n64 < %s | FileCheck --check-prefix=N64 %s
46bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
56bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// Test that the size_t is correct for the ABI. It's not sufficient to be the
66bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// correct size, it must be the same type for correct name mangling.
76bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
86bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hineslong *alloc_long() {
96bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  long *rv = new long; // size_t is implicit in the new operator
106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  return rv;
116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines}
126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// O32-LABEL: define i32* @_Z10alloc_longv()
136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// O32: call noalias i8* @_Znwj(i32 4)
146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// N32-LABEL: define i32* @_Z10alloc_longv()
166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// N32: call noalias i8* @_Znwj(i32 4)
176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// N64-LABEL: define i64* @_Z10alloc_longv()
196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// N64: call noalias i8* @_Znwm(i64 8)
206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hineslong *alloc_long_array() {
226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  long *rv = new long[2];
236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  return rv;
246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines}
256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// O32-LABEL: define i32* @_Z16alloc_long_arrayv()
276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// O32: call noalias i8* @_Znaj(i32 8)
286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// N32-LABEL: define i32* @_Z16alloc_long_arrayv()
306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// N32: call noalias i8* @_Znaj(i32 8)
316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// N64-LABEL: define i64* @_Z16alloc_long_arrayv()
336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// N64: call noalias i8* @_Znam(i64 16)
346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include <stddef.h>
366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid size_t_arg(size_t a) {
386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines}
396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// O32-LABEL: _Z10size_t_argj
416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// N32-LABEL: _Z10size_t_argj
426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// N64-LABEL: _Z10size_t_argm
436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid ptrdiff_t_arg(ptrdiff_t a) {
456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines}
466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// O32-LABEL: _Z13ptrdiff_t_argi
486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// N32-LABEL: _Z13ptrdiff_t_argi
496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// N64-LABEL: _Z13ptrdiff_t_argl
50