On 02/12/2018 07:32 PM, Jeff Law wrote:
diff --git a/gcc/testsuite/gcc.c-torture/compile/regs-arg-size.c
b/gcc/testsuite/gcc.c-torture/compile/regs-arg-size.c
new file mode 100644
index 00000000000..0ca0b9f034b
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/regs-arg-size.c
@@ -0,0 +1,36 @@
+int foo;
+typedef long unsigned int size_t;
+typedef short unsigned int wchar_t;
+struct tm
+{
+ int tm_mday;
+ int tm_mon;
+ int tm_year;
+};
+size_t
+__strftime (wchar_t * s, size_t maxsize, const wchar_t * format, const struct
tm *tim_p)
+{
+ size_t count = 0;
+ int len = 0;
+ size_t i, ctloclen;
+ unsigned long width;
+ {
+ if (foo)
+ {
+ {
+ wchar_t *fmt = L"%s%.*d";
+ len = swprintf (&s[count], maxsize, fmt, "-", width, 0);
+ }
+ if ((count) >= maxsize)
+ return 0;
+ }
+ else
+ {
+ len =
+ swprintf (&s[count], maxsize - count, L"%.2d/%.2d/%.2d", 42, 99, 0);
+ if ((count) >= maxsize)
+ return 0;
+
+ }
+ }
+}
Hi,
when compiling this test for nvptx, the missing declaration for swprintf
results in this default declaration in the .s file based on the
arguments of the first call:
...
.extern .func (.param.u32 %value_out) swprintf (.param.u64
%in_ar0, .param.u64 %in_ar1, .param.u64 %in_ar2, .param.u64 %in_ar3,
.param.u64 %in_ar4, .param.u32 %in_ar5);
...
and this error message when ptxas process the second call:
...
ptxas regs-arg-size.o, line 97; error : Type or alignment of argument
does not match formal parameter '%in_ar3'
ptxas regs-arg-size.o, line 97; error : Type or alignment of argument
does not match formal parameter '%in_ar4'
ptxas fatal : Ptx assembly aborted due to errors
nvptx-as: ptxas returned 255 exit status
...
When adding a declaration in the source like so:
...
diff --git a/gcc/testsuite/gcc.c-torture/compile/regs-arg-size.c
b/gcc/testsuite/gcc.c-torture/compile/regs-arg-size.c
index 0ca0b9f034b..81943a2c459 100644
--- a/gcc/testsuite/gcc.c-torture/compile/regs-arg-size.c
+++ b/gcc/testsuite/gcc.c-torture/compile/regs-arg-size.c
@@ -1,6 +1,7 @@
int foo;
typedef long unsigned int size_t;
typedef short unsigned int wchar_t;
+extern int swprintf(wchar_t *wcs, size_t maxlen, const wchar_t *format,
...);
struct tm
{
int tm_mday;
...
the declaration changes to:
...
.extern .func (.param.u32 %value_out) swprintf (.param.u64 %in_ar0,
.param.u64 %in_ar1, .param.u64 %in_ar2, .param.u64 %in_ar3);
...
and test test-case passes.
Is it ok to update the test-case like this, or should it require
effective target 'untyped_assembly' (which is false for nvptx).
Thanks,
- Tom