================
@@ -9283,8 +9283,14 @@ static AssignConvertType 
checkPointerTypesForAssignment(Sema &S,
       return AssignConvertType::IncompatibleFunctionPointer;
     return AssignConvertType::IncompatiblePointer;
   }
-  if (!S.getLangOpts().CPlusPlus && S.IsFunctionConversion(ltrans, rtrans))
-    return AssignConvertType::IncompatibleFunctionPointer;
+  bool DiscardingCFIUncheckedCallee, AddingCFIUncheckedCallee;
+  if (!S.getLangOpts().CPlusPlus &&
+      S.IsFunctionConversion(ltrans, rtrans, &DiscardingCFIUncheckedCallee,
+                             &AddingCFIUncheckedCallee)) {
+    // Allow conversions between CFIUncheckedCallee-ness.
+    if (!DiscardingCFIUncheckedCallee && !AddingCFIUncheckedCallee)
+      return AssignConvertType::IncompatibleFunctionPointer;
+  }
----------------
brunodf-snps wrote:

Hi, I'm late here because we only spotted this while integrating clang-21 in 
our downstream tree.

I think there is a logic error here. If a function conversion is _also_ 
discarding or adding CFIUncheckedCallee status, it is suddenly no longer an 
incompatible function pointer? That does not make sense to me, and it stops 
diagnosing conversions that we should be diagnosing (and normally are 
diagnosing), see this example: https://godbolt.org/z/bnYsE63Gc

Granted, the original code has flawed logic, which I reported already back in 
2019: https://bugs.llvm.org/show_bug.cgi?id=42120
In short, the code seems to use the _negative_ of the `IsFunctionConversion` 
condition in the _inverse_ direction of what you would expect. My bug report 
observes that this appears to work but breaks in more complex cases. I 
suggested a patch at the time, but this did not get picked up. I would consider 
submitting a PR, but I would like some clang maintainers to agree with my 
report and patch (or suggest some other fix), before doing so.

https://github.com/llvm/llvm-project/pull/135836
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to