[Clang] Reset FP options before function instantiations
authorSerge Pavlov <sepavloff@gmail.com>
Wed, 5 Jul 2023 09:31:23 +0000 (16:31 +0700)
committerSerge Pavlov <sepavloff@gmail.com>
Wed, 5 Jul 2023 09:34:19 +0000 (16:34 +0700)
commit2e903709de003dc6ae980197f4a0850a158dd9b8
tree859ae2036a1c73d389964f73caf824fea2681894
parent7717c0071d7ce9f4ca7b1417f677bb0380171621
[Clang] Reset FP options before function instantiations

This is recommit of 98390ccb80569e8fbb20e6c996b4b8cff87fbec6, reverted
in 82a3969d710f5fb7a2ee4c9afadb648653923fef, because it caused
https://github.com/llvm/llvm-project/issues/63542. Although the problem
described in the issue is independent of the reverted patch, fail of
PCH/late-parsed-instantiations.cpp indeed obseved on PowerPC and is
likely to be caused by wrong serialization of `LateParsedTemplate`
objects. In this patch the serialization is fixed.

Original commit message is below.

Previously function template instantiations occurred with FP options
that were in effect at the end of translation unit. It was a problem
for late template parsing as these FP options were used as attributes of
AST nodes and may result in crash. To fix it FP options are set to the
state of the point of template definition.

Differential Revision: https://reviews.llvm.org/D143241
clang/include/clang/Sema/Sema.h
clang/lib/Parse/ParseTemplate.cpp
clang/lib/Sema/SemaTemplate.cpp
clang/lib/Serialization/ASTReader.cpp
clang/lib/Serialization/ASTWriter.cpp
clang/test/CodeGen/fp-template.cpp