Melanie Blower | 7f9b513 | 2019-12-04 12:23:46 -0800 | [diff] [blame] | 1 | // RUN: %clang_cc1 -x c++ -ftrapping-math -fexceptions -fcxx-exceptions -frounding-math -ffp-exception-behavior=strict -emit-llvm -o - %s | FileCheck %s -check-prefix=FPMODELSTRICT
|
| 2 | // RUN: %clang_cc1 -x c++ -ffp-contract=fast -fexceptions -fcxx-exceptions -emit-llvm -o - %s | FileCheck %s -check-prefix=PRECISE
|
| 3 | // RUN: %clang_cc1 -x c++ -ffast-math -fexceptions -fcxx-exceptions -ffp-contract=fast -emit-llvm -o - %s | FileCheck %s -check-prefix=FAST
|
| 4 | // RUN: %clang_cc1 -x c++ -ffast-math -fexceptions -fcxx-exceptions -emit-llvm -o - %s | FileCheck %s -check-prefix=FAST
|
| 5 | // RUN: %clang_cc1 -x c++ -ffast-math -fexceptions -fcxx-exceptions -ffp-contract=fast -ffp-exception-behavior=ignore -emit-llvm -o - %s | FileCheck %s -check-prefix=FAST
|
| 6 | // RUN: %clang_cc1 -x c++ -ffast-math -fexceptions -fcxx-exceptions -ffp-contract=fast -ffp-exception-behavior=strict -emit-llvm -o - %s | FileCheck %s -check-prefix=EXCEPT
|
| 7 | // RUN: %clang_cc1 -x c++ -ffast-math -fexceptions -fcxx-exceptions -ffp-contract=fast -ffp-exception-behavior=maytrap -emit-llvm -o - %s | FileCheck %s -check-prefix=MAYTRAP
|
| 8 | float f0, f1, f2;
|
| 9 |
|
| 10 | template <class>
|
| 11 | class aaaa {
|
| 12 | public:
|
| 13 | ~aaaa();
|
| 14 | void b();
|
| 15 | };
|
| 16 |
|
| 17 | template <class c>
|
| 18 | aaaa<c>::~aaaa() { try {
|
| 19 | b();
|
| 20 | // CHECK-LABEL: define {{.*}}void @_ZN4aaaaIiED2Ev{{.*}}
|
| 21 |
|
| 22 | } catch (...) {
|
| 23 | // MAYTRAP: llvm.experimental.constrained.fadd.f32(float %{{.*}}, float %{{.*}}, metadata !"round.tonearest", metadata !"fpexcept.maytrap")
|
| 24 | // EXCEPT: llvm.experimental.constrained.fadd.f32(float %{{.*}}, float %{{.*}}, metadata !"round.tonearest", metadata !"fpexcept.strict")
|
| 25 | // FPMODELSTRICT: llvm.experimental.constrained.fadd.f32(float %{{.*}}, float %{{.*}}, metadata !"round.dynamic", metadata !"fpexcept.strict")
|
| 26 | // STRICTEXCEPT: llvm.experimental.constrained.fadd.f32(float %{{.*}}, float %{{.*}}, metadata !"round.dynamic", metadata !"fpexcept.strict")
|
| 27 | // STRICTNOEXCEPT: llvm.experimental.constrained.fadd.f32(float %{{.*}}, float %{{.*}}, metadata !"round.dynamic", metadata !"fpexcept.ignore")
|
| 28 | // PRECISE: fadd contract float %{{.*}}, %{{.*}}
|
| 29 | // FAST: fadd fast
|
| 30 | f0 = f1 + f2;
|
| 31 |
|
| 32 | // CHECK: ret void
|
| 33 | }
|
| 34 | }
|
| 35 |
|
| 36 | class d {
|
| 37 | public:
|
| 38 | d(const char *, int);
|
| 39 | aaaa<int> e;
|
| 40 | };
|
| 41 |
|
| 42 | float foo() {
|
| 43 | d x("", 1);
|
| 44 | aaaa<int> a;
|
| 45 | return f0;
|
| 46 | }
|
| 47 |
|