// RUN: %clang_cc1 -triple x86_64-linux-gnu -fsyntax-only -DCHECK_ERROR %s -verify 

float function_scope(float a) {
#pragma float_control(precise, on) junk // expected-warning {{extra tokens at end of '#pragma float_control' - ignored}}
  return a;
}

// Ok, at namespace scope.
namespace foo {
#pragma float_control(push)
#pragma float_control(pop)
}

// Ok, within a language linkage specification.
extern "C" {
#pragma float_control(push)
#pragma float_control(pop)
}

// Same.
extern "C++" {
#pragma float_control(push)
#pragma float_control(pop)
}

#ifdef CHECK_ERROR
// Ok at file scope.
#pragma float_control(push)
#pragma float_control(pop)
#pragma float_control(precise, on, push)
void check_stack() {
  // Not okay within a function declaration.
#pragma float_control(push)                   // expected-error {{can only appear at file or namespace scope or within a language linkage specification}}
#pragma float_control(pop)                    // expected-error {{can only appear at file or namespace scope or within a language linkage specification}}
#pragma float_control(precise, on, push)      // expected-error {{can only appear at file or namespace scope or within a language linkage specification}}
#pragma float_control(except, on, push)       // expected-error {{can only appear at file or namespace scope or within a language linkage specification}}
#pragma float_control(except, on, push, junk) // expected-error {{float_control is malformed}}
  return;
}
#endif

// RUN: %clang_cc1 -triple x86_64-linux-gnu -fdenormal-fp-math=preserve-sign,preserve-sign -fsyntax-only %s -DDEFAULT -verify
// RUN: %clang_cc1 -triple x86_64-linux-gnu -fsyntax-only %s -ffp-contract=fast -DPRECISE -verify
// RUN: %clang_cc1 -triple x86_64-linux-gnu -fsyntax-only %s -ffp-contract=off -frounding-math -ffp-exception-behavior=strict -DSTRICT -verify
// RUN: %clang_cc1 -triple x86_64-linux-gnu -menable-no-infs -menable-no-nans -funsafe-math-optimizations -fno-signed-zeros -mreassociate -freciprocal-math -ffp-contract=fast -ffast-math -ffinite-math-only -fsyntax-only %s -DFAST -verify
double a = 0.0;
double b = 1.0;

#ifdef STRICT
#pragma float_control(precise, off) // expected-error {{'#pragma float_control(precise, off)' is illegal when except is enabled}}
#else
#ifndef FAST
#pragma STDC FENV_ACCESS ON
#pragma float_control(precise, off) // expected-error {{'#pragma float_control(precise, off)' is illegal when except is enabled}}
#endif
#endif

#pragma float_control(precise, on)
#pragma float_control(except, on) // OK
#ifndef STRICT
#pragma float_control(except, on)
#pragma float_control(precise, off) // expected-error {{'#pragma float_control(precise, off)' is illegal when except is enabled}}
#endif
int main() {
#ifdef STRICT
#pragma float_control(precise, off) // expected-error {{'#pragma float_control(precise, off)' is illegal when except is enabled}}
#else
#pragma float_control(precise, off) // expected-error {{'#pragma float_control(precise, off)' is illegal when except is enabled}}
#endif
#pragma float_control(except, on)
  //  error: '#pragma float_control(except, on)' is illegal when precise is disabled
  double x = b / a; // only used for fp flag setting
  if (a == a)       // only used for fp flag setting
    return 0;       //(int)x;
}
