[PATCH] D115031: [AST] Print NTTP args as string-literals when possible

Zhihao Yuan via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Dec 3 15:32:33 PST 2021

lichray added inline comments.

Comment at: clang/lib/AST/APValue.cpp:628-629
+static bool TryPrintAsStringLiteral(raw_ostream &Out, const ArrayType *ATy,
+                                    const APValue *Data, size_t Size) {
+  if (Size == 0)
rsmith wrote:
> Is there anything you can factor out of `StringLiteral::outputString` and reuse here? At least the single-character printing code seems like something we should try to not overly duplicate.
The goals of the two routines are different. `StringLiteral::outputString` must output something that can parse back as a string literal, even it doesn't decode UTF-8 right now; the new routine in this patch doesn't have to -- it can give up anytime it wants.

I wish `switch` statements were more composable. But if you don't mind, I can add a function in `CharInfo.h` to test and get the C-style escaped char and retire the outmost `switch` statements in those two routines.

Comment at: clang/lib/AST/APValue.cpp:637-639
+  // Nothing we can do about a sequence that is not null-terminated
+  if (!Data[--Size].getInt().isZero())
+    return false;
rsmith wrote:
> We should drop all trailing zeroes here, because array initialization from a string literal will reconstruct them.
Are you sure? `MyType<{""}>` and `MyType<{"\0\0\0"}>` are different types.

  rG LLVM Github Monorepo



More information about the cfe-commits mailing list