[PATCH] D138270: [clang][Sema] Skip checking int expressions for overflow in constexpr functions

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Nov 30 11:45:24 PST 2022


aaron.ballman added a comment.

In D138270#3956221 <https://reviews.llvm.org/D138270#3956221>, @tbaeder wrote:

> Output for that test case is:
>
>   ./array.cpp:1:16: error: constexpr function never produces a constant expression [-Winvalid-constexpr]
>   constexpr void f() {
>                  ^
>   ./array.cpp:3:23: note: value 1292785156096 is outside the range of representable values of type 'int'
>       arr[1024*1024*1024*1204];
>                         ^
>   ./array.cpp:3:28: warning: expression result unused [-Wunused-value]
>       arr[1024*1024*1024*1204];
>       ~~~ ~~~~~~~~~~~~~~~~~~~^
>   1 warning and 1 error generated.
>
> The first overflow warning is missing. That seems to be new though, I don't get that warning with clang 14 either.

The downside to losing that warning is that passing `-Wno-invalid-constexpr` will lose the diagnostic entirely, which seems like a regression.



================
Comment at: clang/include/clang/Sema/Sema.h:3514-3517
+  bool curFunctionDeclIsConstexpr() const {
+    const FunctionDecl *FD = getCurFunctionDecl();
+    return FD ? FD->isConstexpr() : false;
+  }
----------------
You should add some documentation comments to the function.

One slight worry I have here is with dependent (perhaps special) member functions; is this function meant to answer "is this function callable in a constexpr context" or is it meant to answer "did the user specify this as a constexpr function"?

e.g.,
```
template <int N>
constexpr int func(int Val) { return Val / N; } // Not yet instantiated.
```


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138270/new/

https://reviews.llvm.org/D138270



More information about the cfe-commits mailing list