// Check the case when only the StreamChecker is enabled.
// RUN: %clang_analyze_cc1 %s \
// RUN:   -analyzer-checker=core,alpha.unix.Stream \
// RUN:   -analyzer-checker=debug.ExprInspection \
// RUN:   -analyzer-config eagerly-assume=false \
// RUN:   -triple x86_64-unknown-linux \
// RUN:   -verify=stream

// Check the case when only the StdLibraryFunctionsChecker is enabled.
// RUN: %clang_analyze_cc1 %s \
// RUN:   -analyzer-checker=apiModeling.StdCLibraryFunctions \
// RUN:   -analyzer-config apiModeling.StdCLibraryFunctions:DisplayLoadedSummaries=true \
// RUN:   -analyzer-checker=debug.ExprInspection \
// RUN:   -analyzer-config eagerly-assume=false \
// RUN:   -triple x86_64-unknown-linux \
// RUN:   -verify=stdLib 2>&1 | FileCheck %s

// Check the case when both the StreamChecker and the
// StdLibraryFunctionsChecker are enabled.
// RUN: %clang_analyze_cc1 %s \
// RUN:   -analyzer-checker=core,alpha.unix.Stream \
// RUN:   -analyzer-checker=apiModeling.StdCLibraryFunctions \
// RUN:   -analyzer-config apiModeling.StdCLibraryFunctions:DisplayLoadedSummaries=true \
// RUN:   -analyzer-checker=debug.ExprInspection \
// RUN:   -analyzer-config eagerly-assume=false \
// RUN:   -triple x86_64-unknown-linux \
// RUN:   -verify=both 2>&1 | FileCheck %s

// Verify that the summaries are loaded when the StdLibraryFunctionsChecker is
// enabled.
//      CHECK: Loaded summary for: int getchar()
// CHECK-NEXT: Loaded summary for: unsigned long fread(void *restrict, size_t, size_t, FILE *restrict)
// CHECK-NEXT: Loaded summary for: unsigned long fwrite(const void *restrict, size_t, size_t, FILE *restrict)

#include "Inputs/system-header-simulator.h"

void clang_analyzer_eval(int);

void test_fread_fwrite(FILE *fp, int *buf) {
  fp = fopen("foo", "r");
  if (!fp)
    return;
  size_t x = fwrite(buf, sizeof(int), 10, fp);

  clang_analyzer_eval(x <= 10); // \
 // stream-warning{{TRUE}} \
 // stdLib-warning{{TRUE}} \
 // both-warning{{TRUE}} \

  clang_analyzer_eval(x == 10); // \
  // stream-warning{{TRUE}} \
  // stream-warning{{FALSE}} \
  // stdLib-warning{{UNKNOWN}} \
  // both-warning{{TRUE}} \
  // both-warning{{FALSE}}

  fclose(fp);
}
