/* Copyright (C) 2000, 2001  Free Software Foundation.

   Ensure all expected transformations of builtin fputs occur and that
   we honor side effects in the stream argument.

   Written by Kaveh R. Ghazi, 10/30/2000.  */

#include <stdio.h>
extern void abort(void);

int i;

void
main_test(void)
{
  FILE *s_array[] = {stdout, NULL}, **s_ptr = s_array;
  const char *const s1 = "hello world";

  fputs ("", *s_ptr);
  fputs ("\n", *s_ptr);
  fputs ("bye", *s_ptr);
  fputs (s1, *s_ptr);
  fputs (s1+5, *s_ptr);
  fputs (s1+10, *s_ptr);
  fputs (s1+11, *s_ptr);

  /* Check side-effects when transforming fputs -> NOP.  */
  fputs ("", *s_ptr++);
  if (s_ptr != s_array+1 || *s_ptr != 0)
    abort();

  /* Check side-effects when transforming fputs -> fputc.  */
  s_ptr = s_array;
  fputs ("\n", *s_ptr++);
  if (s_ptr != s_array+1 || *s_ptr != 0)
    abort();

  /* Check side-effects when transforming fputs -> fwrite.  */
  s_ptr = s_array;
  fputs ("hello\n", *s_ptr++);
  if (s_ptr != s_array+1 || *s_ptr != 0)
    abort();

  /* Test at least one instance of the __builtin_ style.  We do this
     to ensure that it works and that the prototype is correct.  */
  s_ptr = s_array;
  __builtin_fputs ("", *s_ptr);
  /* These builtin stubs are called by __builtin_fputs, ensure their
     prototypes are set correctly too.  */
  __builtin_fputc ('\n', *s_ptr);
  __builtin_fwrite ("hello\n", 1, 6, *s_ptr);
  /* Check the unlocked style, these evaluate to nothing to avoid
     problems on systems without the unlocked functions.  */
  fputs_unlocked ("", *s_ptr);
  __builtin_fputs_unlocked ("", *s_ptr);

  /* Check side-effects in conditional expression.  */
  s_ptr = s_array;
  fputs (i++ ? "f" : "x", *s_ptr++);
  if (s_ptr != s_array+1 || *s_ptr != 0 || i != 1)
    abort();
  fputs (--i ? "\n" : "\n", *--s_ptr);
  if (s_ptr != s_array || i != 0)
    abort();
}
