[FPEnv] Partially implement #pragma STDC FENV_ROUND
authorSerge Pavlov <sepavloff@gmail.com>
Mon, 24 Aug 2020 07:02:26 +0000 (14:02 +0700)
committerSerge Pavlov <sepavloff@gmail.com>
Fri, 4 Sep 2020 09:47:10 +0000 (16:47 +0700)
commita633da5391b0e42c0185132e8b532ae9bc34489f
tree8e0e36267d0ed508b0426f8ca6202d45f5b119f7
parentf9ad112770ece2e3612ddcdd6a4157bc0b0faf31
[FPEnv] Partially implement #pragma STDC FENV_ROUND

This change implements pragma STDC FENV_ROUND, which is introduced by
the extension to standard (TS 18661-1). The pragma is implemented only
in frontend, it sets apprpriate state of FPOptions stored in Sema. Use
of these bits in constant evaluation adn/or code generator is not in the
scope of this change.

Parser issues warning on unsuppored pragma when it encounteres pragma
STDC FENV_ROUND, however it makes syntax checks and updates Sema state
as if the pragma were supported.

Primary purpose of the partial implementation is to facilitate
development of non-default floating poin environment. Previously a
developer cannot set non-default rounding mode in sources, this mades
preparing tests for say constant evaluation  substantially complicated.

Differential Revision: https://reviews.llvm.org/D86921
clang/include/clang/Basic/DiagnosticParseKinds.td
clang/include/clang/Basic/TokenKinds.def
clang/include/clang/Parse/Parser.h
clang/include/clang/Sema/Sema.h
clang/lib/Parse/ParsePragma.cpp
clang/lib/Parse/ParseStmt.cpp
clang/lib/Parse/Parser.cpp
clang/lib/Sema/SemaAttr.cpp
clang/test/AST/ast-dump-fpfeatures.cpp
clang/test/Parser/pragma-fenv_round.c [new file with mode: 0644]