[clang] [clang] Do not clear FP pragma stack when instantiating functions (PR #70646)

John McCall via cfe-commits cfe-commits at lists.llvm.org
Thu Nov 9 10:23:47 PST 2023


rjmccall wrote:

> pragma pack uses pragma stack and it is allowed in any place: https://godbolt.org/z/f8fP1vn63 . If such pragma presents in the late-parsed template, and push-pop operations in it are not balanced, the late parse of such function can break the pragma stack and next templates can be parsed incorrectly. It is not a FP pragma, but it demonstrates that the compiler must provide some Sema state isolation for late parsed templates.

Okay, so if we accept this, this is a hard constraint on our ability to do late parsing of function bodies in situations not blessed by the language.  We could decide not to support that — we probably have to support uses of `#pragma pack` within a function, but we could e.g. emit an error if the effect of the pragmas is non-local (or a warning saying that we're going to ignore it).  It looks like MSVC clears the stack before it does late parsing: you get a warning if you put your test function inside a class body.

https://github.com/llvm/llvm-project/pull/70646


More information about the cfe-commits mailing list