[clang] Store FPOptions earlier when parsing function (#92146)

After https://github.com/llvm/llvm-project/pull/85605 ([clang] Set
correct FPOptions if attribute 'optnone' presents) the current FP
options in Sema are saved during parsing function because Sema can
modify them if optnone is present. However they were saved too late, it
caused fails in some cases when precompiled headers are used. This patch
moves the storing earlier.
This commit is contained in:
Serge Pavlov
2024-05-15 23:12:57 +07:00
committed by GitHub
parent 54c6ee922a
commit 9bbefb7f60
2 changed files with 8 additions and 2 deletions

View File

@@ -1439,6 +1439,8 @@ Decl *Parser::ParseFunctionDefinition(ParsingDeclarator &D,
}
}
Sema::FPFeaturesStateRAII SaveFPFeatures(Actions);
// Tell the actions module that we have entered a function definition with the
// specified Declarator for the function.
SkipBodyInfo SkipBody;
@@ -1497,8 +1499,6 @@ Decl *Parser::ParseFunctionDefinition(ParsingDeclarator &D,
return Actions.ActOnFinishFunctionBody(Res, nullptr, false);
}
Sema::FPFeaturesStateRAII SaveFPFeatures(Actions);
if (Tok.is(tok::kw_try))
return ParseFunctionTryBlock(Res, BodyScope);

View File

@@ -0,0 +1,6 @@
// RUN: %clang_cc1 -emit-pch -x c++-header %s -o %t.pch
// RUN: %clang_cc1 -emit-llvm -DMAIN -include-pch %t.pch %s -o /dev/null
#ifndef MAIN
__attribute__((optnone)) void foo() {}
#endif