Tested on x86-64 darwin, linux; aarch64 linux; sparc solaris,
pushed to trunk, thanks
Iain
--- 8< ---
Since there is a mixture of Posix and unspecified functions in this
group, it appears to have precipitated placement in two different
headers (stdlib and unistd). Include both to cater for this.
Darwin also emits a deprecation warning for mktemp.
gcc/testsuite/ChangeLog:
* gcc.dg/analyzer/mkdtemp-1.c: Add unistd header.
* gcc.dg/analyzer/mkstemps-1.c: Likewise.
* gcc.dg/analyzer/mktemp-1.c: Handle deprecation warnings.
Signed-off-by: Iain Sandoe <[email protected]>
---
gcc/testsuite/gcc.dg/analyzer/mkdtemp-1.c | 1 +
gcc/testsuite/gcc.dg/analyzer/mkstemps-1.c | 1 +
gcc/testsuite/gcc.dg/analyzer/mktemp-1.c | 22 ++++++++++++++++++++--
3 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/gcc/testsuite/gcc.dg/analyzer/mkdtemp-1.c
b/gcc/testsuite/gcc.dg/analyzer/mkdtemp-1.c
index da77ce78651..2cc339b9a65 100644
--- a/gcc/testsuite/gcc.dg/analyzer/mkdtemp-1.c
+++ b/gcc/testsuite/gcc.dg/analyzer/mkdtemp-1.c
@@ -2,6 +2,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <unistd.h>
#include <errno.h>
#include "analyzer-decls.h"
diff --git a/gcc/testsuite/gcc.dg/analyzer/mkstemps-1.c
b/gcc/testsuite/gcc.dg/analyzer/mkstemps-1.c
index 75fcb9dbb08..6f1e7ef3e73 100644
--- a/gcc/testsuite/gcc.dg/analyzer/mkstemps-1.c
+++ b/gcc/testsuite/gcc.dg/analyzer/mkstemps-1.c
@@ -3,6 +3,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <unistd.h>
extern void populate (char *buf);
diff --git a/gcc/testsuite/gcc.dg/analyzer/mktemp-1.c
b/gcc/testsuite/gcc.dg/analyzer/mktemp-1.c
index 0f4b448a6aa..0f1122a06ed 100644
--- a/gcc/testsuite/gcc.dg/analyzer/mktemp-1.c
+++ b/gcc/testsuite/gcc.dg/analyzer/mktemp-1.c
@@ -3,7 +3,7 @@
/* TODO: mktemp is deprecated per MSC24-C
(https://wiki.sei.cmu.edu/confluence/x/hNYxBQ).
Once a warning for deprecated functions exists, mktemp should
- also warn about its use. */
+ also warn about its use. Later versions of Darwin do warn here. */
#include <stdio.h>
#include <stdlib.h>
@@ -15,40 +15,47 @@ extern void populate (char *buf);
void test_passthrough (char *s)
{
mktemp (s);
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
}
void test_string_literal_correct_placeholder (void)
{
mktemp ("/home/user/sessXXXXXX"); /* { dg-warning "'mktemp' on a string
literal \\\[STR30-C\\\]" } */
- /* { dg-message "use a writable character array" "fix suggestion" { target
*-*-* } .-1 } */
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
+ /* { dg-message "use a writable character array" "fix suggestion" { target
*-*-* } .-2 } */
}
void test_string_literal_missing_placeholder (void)
{
mktemp ("/home/user/sess"); /* { dg-warning "'mktemp' on a string literal
\\\[STR30-C\\\]" } */
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
}
void test_string_literal_empty (void)
{
mktemp (""); /* { dg-warning "'mktemp' on a string literal \\\[STR30-C\\\]"
} */
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
}
void test_correct (void)
{
char tmpl[] = "/var/run/sock.XXXXXX";
mktemp (tmpl);
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
}
void test_correct_minimal (void)
{
char tmpl[] = "XXXXXX";
mktemp (tmpl);
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
}
void test_correct_offset_into_buffer (void)
{
char buf[] = "////XXXXXX";
mktemp (buf + 4);
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
}
void test_missing_placeholder_offset_into_buffer (void)
@@ -56,36 +63,42 @@ void test_missing_placeholder_offset_into_buffer (void)
char buf[] = "////XXXXXX";
/* Placeholder is incorrect from the pointer's perspective. */
mktemp (buf + 5); /* { dg-warning "'mktemp' template string does not end
with 'XXXXXX'" } */
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
}
void test_missing_placeholder (void)
{
char tmpl[] = "/var/run/sock";
mktemp (tmpl); /* { dg-warning "'mktemp' template string does not end with
'XXXXXX'" } */
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
}
void test_too_short (void)
{
char tmpl[] = "XY";
mktemp (tmpl); /* { dg-warning "'mktemp' template string does not end with
'XXXXXX'" } */
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
}
void test_empty_buffer (void)
{
char tmpl[] = "";
mktemp (tmpl); /* { dg-warning "'mktemp' template string does not end with
'XXXXXX'" } */
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
}
void test_partial_placeholder (void)
{
char tmpl[] = "/var/run/sockXXXXX-";
mktemp (tmpl); /* { dg-warning "'mktemp' template string does not end with
'XXXXXX'" } */
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
}
void test_four_xs (void)
{
char tmpl[] = "/var/run/sockXXXX";
mktemp (tmpl); /* { dg-warning "'mktemp' template string does not end with
'XXXXXX'" } */
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
}
void test_populated_buf (void)
@@ -93,11 +106,13 @@ void test_populated_buf (void)
char tmpl[24];
populate (tmpl);
mktemp (tmpl);
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
}
void test_NULL (void)
{
mktemp (NULL); /* possibly -Wanalyzer-null-argument */
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
}
void test_errno_bad_template (void)
@@ -105,6 +120,7 @@ void test_errno_bad_template (void)
errno = 0;
char tmpl[] = "/tmp/foo";
char *result = mktemp (tmpl); /* { dg-warning "'mktemp' template string does
not end with 'XXXXXX'" } */
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
__analyzer_eval (errno > 0); /* { dg-warning "TRUE" } */
}
@@ -112,6 +128,7 @@ void test_failure_nul_byte (void)
{
char tmpl[] = "/tmp/foo";
char *result = mktemp (tmpl); /* { dg-warning "'mktemp' template string does
not end with 'XXXXXX'" } */
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
__analyzer_eval (result[0] == '\0'); /* { dg-warning "TRUE" } */
__analyzer_eval (result == tmpl); /* { dg-warning "TRUE" } */
}
@@ -120,6 +137,7 @@ void test_success_path (void)
{
char tmpl[] = "/tmp/testXXXXXX";
char *result = mktemp (tmpl);
+ /* { dg-warning {'mktemp' is deprecated:} "" { target *-*-darwin2* } .-1 } */
if (result[0] != '\0')
__analyzer_eval (result == tmpl); /* { dg-warning "TRUE" } */
}
--
2.50.1 (Apple Git-155)