Commit Graph

3 Commits

Author SHA1 Message Date
Arthur O'Dwyer 597f2bcee8 [clang] [test] [NFC] Eliminate some hard tabs in tests
"cxx2b-consteval-if.cpp" was showing up misindented.
2022-02-16 10:42:58 -05:00
Corentin Jabot 6eeda06c1d [Clang] Fix nesting of discarded and immediate contexts.
In C++23, discarded statements and if consteval statements can nest
arbitrarily. To support that, we keep track of whether the parent of
the current evaluation context is discarded or immediate.

This is done at the construction of an evaluation context
to improve performance.

Fixes https://bugs.llvm.org/show_bug.cgi?id=52231
2021-12-01 12:58:32 -05:00
Aaron Ballman ab2ca8496d consteval if does not form a discarded statement
When we added support for if consteval, we accidentally formed a discarded
statement evaluation context for the branch-not-taken. However, a discarded
statement is a property of an if constexpr statement, not an if consteval
statement (https://eel.is/c++draft/stmt.if#2.sentence-2). This turned out to
cause issues when deducing the return type from a function with a consteval if
statement -- we wouldn't consider the branch-not-taken when deducing the return
type.

This fixes PR52206.

Note, there is additional work left to be done. We need to track discarded
statement and immediate evaluation contexts separately rather than as being
mutually exclusive.
2021-10-20 07:24:55 -04:00