================
@@ -207,13 +207,9 @@ FormatStringConverter::FormatStringConverter(
       ArgsOffset(FormatArgOffset + 1), LangOpts(LO) {
   assert(ArgsOffset <= NumArgs);
   FormatExpr = llvm::dyn_cast<StringLiteral>(
-      Args[FormatArgOffset]->IgnoreImplicitAsWritten());
+      Args[FormatArgOffset]->IgnoreUnlessSpelledInSource());
 
-  if (!FormatExpr || !FormatExpr->isOrdinary()) {
-    // Function must have a narrow string literal as its first argument.
-    conversionNotPossible("first argument is not a narrow string literal");
-    return;
-  }
+  assert(FormatExpr && FormatExpr->isOrdinary());
----------------
mikecrowe wrote:

Fair enough. TBH I'm not sure that I can completely understand it myself and 
that's why I wrote lots of tests to try to catch all the cases.

My hand-wavy explanation is that `FormatStringConverter` wants to work on the 
string literal (as it is written in the source code) rather than any type that 
string literal may have been implicitly converted to (which aren't written in 
the source code) in order to be passed to the function being converted.

https://github.com/llvm/llvm-project/pull/142312
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to