[clang] nonblocking/nonallocating attributes (was: nolock/noalloc) (PR #84983)

Doug Wyatt via cfe-commits cfe-commits at lists.llvm.org
Sat May 4 10:17:38 PDT 2024


================
@@ -1870,6 +1870,28 @@ bool Sema::IsFunctionConversion(QualType FromType, QualType ToType,
       FromFn = QT->getAs<FunctionType>();
       Changed = true;
     }
+
+    // For C, when called from checkPointerTypesForAssignment,
+    // we need not to alter FromFn, or else even an innocuous cast
+    // like dropping effects will fail. In C++ however we do want to
+    // alter FromFn. TODO: Is this correct?
+    if (getLangOpts().CPlusPlus) {
+      FromFPT =
+          dyn_cast<FunctionProtoType>(FromFn); // in case FromFn changed above
----------------
dougsonos wrote:

Interesting, I copied this verbatim from just above:
```
  // Drop 'noexcept' if not present in target type.
  if (const auto *FromFPT = dyn_cast<FunctionProtoType>(FromFn)) {
    const auto *ToFPT = cast<FunctionProtoType>(ToFn);
```
Is this wrong too?

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


More information about the cfe-commits mailing list