OSDN Git Service

Fix spurious warning for strstr (s, "").
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 19 Nov 2005 02:25:25 +0000 (02:25 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 19 Nov 2005 02:25:25 +0000 (02:25 +0000)
* builtins.c (fold_builtin_strstr): Pass s1 through fold_convert before
returning it.
* gcc.dg/builtin-strstr.c: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@107206 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/builtins.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/builtin-strstr.c [new file with mode: 0644]

index c4f105f..b128468 100644 (file)
@@ -1,3 +1,8 @@
+2005-11-18  James E Wilson  <wilson@specifix.com>
+
+       * builtins.c (fold_builtin_strstr): Pass s1 through fold_convert before
+       returning it.
+
 2005-11-18  Mike Stump  <mrs@apple.com>
 
        * c-common.c (handle_cleanup_attribute): Use a lang hook for lookup_name.
index 359ff64..6cca5fb 100644 (file)
@@ -9199,8 +9199,10 @@ fold_builtin_strstr (tree arglist, tree type)
          return fold_convert (type, tem);
        }
 
+      /* The argument is const char *, and the result is char *, so we need
+        a type conversion here to avoid a warning.  */
       if (p2[0] == '\0')
-       return s1;
+       return fold_convert (type, s1);
 
       if (p2[1] != '\0')
        return 0;
index 046330f..570041e 100644 (file)
@@ -1,3 +1,7 @@
+2005-11-18  James E Wilson  <wilson@specifix.com>
+
+       * gcc.dg/builtin-strstr.c: New.
+
 2005-11-18  Richard Henderson  <rth@redhat.com>
 
        * gcc.target/ia64/20010423-1.c, gcc.target/ia64/20020313-1.c,
diff --git a/gcc/testsuite/gcc.dg/builtin-strstr.c b/gcc/testsuite/gcc.dg/builtin-strstr.c
new file mode 100644 (file)
index 0000000..b8201f4
--- /dev/null
@@ -0,0 +1,8 @@
+/* The strstr call is expanded to just "s", which should not result in a
+   warning about discarding qualifiers in an assignment.  */
+/* { dg-do compile } */
+extern char * strstr (const char *s1, const char * s2);
+void foo(const char *s){
+  char * cp;
+  cp = strstr(s, "");
+}