aeubanks added inline comments.
================ Comment at: clang/lib/Sema/SemaExpr.cpp:3586-3591 + // MSVC treats all predefined expressions as string literals rather than char + // arrays. + if (LangOpts.MicrosoftExt) + return SL; + return PredefinedExpr::Create(Context, Loc, ResTy, IK, SL); ---------------- aaron.ballman wrote: > This is incorrect -- these are still predefined expressions even if they're a > string literal. Otherwise, we lose AST fidelity and things like the > `predefinedExpr()` AST matcher don't work > (https://github.com/llvm/llvm-project/blob/main/clang/include/clang/ASTMatchers/ASTMatchers.h#L2697), > and `-ast-print` will print the wrong thing > (https://github.com/llvm/llvm-project/blob/main/clang/lib/AST/StmtPrinter.cpp#L1248). how would you structure this? an almost identical `PredefinedExpr` class that also subclasses `StringLiteral`? or special case all the places that check for `StringLiteral` to also check for `PredefinedExpr` (the case I was mostly looking at was initializing a char array with predefined expressions but presumably there are more places that matter) Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D146764/new/ https://reviews.llvm.org/D146764 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits