On 9/10/20 6:01 AM, Tom de Vries wrote: > Hi, > > Consider test-case gcc.c-torture/compile/pr71109.c. > > It contains a prototype-less declaration of foo: > ... > static void foo (); > ... > followed by a call to foo > ... > foo (bar, a); > ... > followed by the definition of foo: > ... > static inline void > foo (int x, struct S y, struct T z) > ... > > The test-case has undefined behaviour, but for the nvptx target it doesn't > even > assemble: > ... > $ gcc src/gcc/testsuite/gcc.c-torture/compile/pr71109.c -c > ptxas pr71109.o, line 196; error : Type of argument does not match formal > parameter '%in_ar0' > ptxas pr71109.o, line 196; error : Alignment of argument does not match > formal parameter '%in_ar0' > ptxas pr71109.o, line 196; error : Call has wrong number of parameters > ptxas fatal : Ptx assembly aborted due to errors > nvptx-as: ptxas returned 255 exit status > ... > > The problem is that this call: > ... > 191 { > 192 .param .u64 %out_arg1; > 193 st.param.u64 [%out_arg1],%r23; > 194 .param .u64 %out_arg2; > 195 st.param.u64 [%out_arg2],%r32; > 196 call foo,(%out_arg1,%out_arg2); > 197 } > ... > does not match the preceding declaration: > ... > 6 // BEGIN FUNCTION DECL: foo > 7 .func foo (.param .u32 %in_ar0, .param .u64 %in_ar1, .param .u64 > %in_ar2); > ... > which is a PTX error. > > Introduce an effective target non_strict_prototype that returns 0 for nvptx, > and use it in this and similar test-cases. > > Tested on nvptx. > > OK for trunk? > > Thanks, > - Tom > > [testsuite] Introduce effective target non_strict_prototype > > gcc/testsuite/ChangeLog: > > * lib/target-supports.exp (check_effective_target_non_strict_prototype): > New proc. > * gcc.c-torture/compile/pr71109.c: Require effective target > non_strict_prototype. > * gcc.c-torture/compile/pr83051-2.c: Same. > * gcc.c-torture/compile/pr89663-1.c: Same. > * gcc.c-torture/compile/pr89663-2.c: Same. > * gcc.c-torture/compile/pr96796.c: Same.
OK jeff
pEpkey.asc
Description: application/pgp-keys