[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-07-02 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From b2088c0596a2bbc892404ef78af9b1059d848a84 Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 12 ++--
 clang/test/CodeGen/systemz-charset-diag.cpp |  8 
 clang/test/CodeGen/systemz-charset.c|  5 +
 9 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index f0e06473bf615..889df34ab9bfb 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5706,6 +5706,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index b8d760e7e0975..d54e4ce19166a 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 3f41e7c5c6f0d..6c7becf184a92 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 2987d32d6e0d2..f8855d06fa343 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/ParseExpr.cpp

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-07-02 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From b2088c0596a2bbc892404ef78af9b1059d848a84 Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 12 ++--
 clang/test/CodeGen/systemz-charset-diag.cpp |  8 
 clang/test/CodeGen/systemz-charset.c|  5 +
 9 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index f0e06473bf615..889df34ab9bfb 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5706,6 +5706,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index b8d760e7e0975..d54e4ce19166a 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 3f41e7c5c6f0d..6c7becf184a92 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 2987d32d6e0d2..f8855d06fa343 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/ParseExpr.cpp

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-07-02 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From 3d90597c16bb738afd67ccee44480b7ffce34af4 Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 12 ++--
 clang/test/CodeGen/systemz-charset-diag.cpp |  8 
 clang/test/CodeGen/systemz-charset.c|  5 +
 9 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index f0e06473bf615..889df34ab9bfb 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5706,6 +5706,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index b8d760e7e0975..d54e4ce19166a 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 3f41e7c5c6f0d..6c7becf184a92 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 2987d32d6e0d2..f8855d06fa343 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/ParseExpr.cpp

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-07-02 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From 3d90597c16bb738afd67ccee44480b7ffce34af4 Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 12 ++--
 clang/test/CodeGen/systemz-charset-diag.cpp |  8 
 clang/test/CodeGen/systemz-charset.c|  5 +
 9 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index f0e06473bf615..889df34ab9bfb 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5706,6 +5706,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index b8d760e7e0975..d54e4ce19166a 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 3f41e7c5c6f0d..6c7becf184a92 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 2987d32d6e0d2..f8855d06fa343 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/ParseExpr.cpp

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-06-30 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From 39f1cf139c62b99d76628f4ac1db9e4082c01c9a Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 12 ++--
 clang/test/CodeGen/systemz-charset-diag.cpp |  8 
 clang/test/CodeGen/systemz-charset.c|  5 +
 9 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index f0e06473bf615..889df34ab9bfb 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5706,6 +5706,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index b8d760e7e0975..d54e4ce19166a 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 3f41e7c5c6f0d..6c7becf184a92 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 2987d32d6e0d2..f8855d06fa343 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/ParseExpr.cpp

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-06-30 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From 39f1cf139c62b99d76628f4ac1db9e4082c01c9a Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 12 ++--
 clang/test/CodeGen/systemz-charset-diag.cpp |  8 
 clang/test/CodeGen/systemz-charset.c|  5 +
 9 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index f0e06473bf615..889df34ab9bfb 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5706,6 +5706,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index b8d760e7e0975..d54e4ce19166a 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 3f41e7c5c6f0d..6c7becf184a92 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 2987d32d6e0d2..f8855d06fa343 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/ParseExpr.cpp

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-06-26 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From ac7a884c59debba04e708f3d8091602158797b3f Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 12 ++--
 clang/test/CodeGen/systemz-charset-diag.cpp |  8 
 clang/test/CodeGen/systemz-charset.c|  5 +
 9 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index f0e06473bf615..889df34ab9bfb 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5706,6 +5706,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index b8d760e7e0975..d54e4ce19166a 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 3f41e7c5c6f0d..6c7becf184a92 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 2987d32d6e0d2..f8855d06fa343 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/ParseExpr.cpp

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-06-26 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From ac7a884c59debba04e708f3d8091602158797b3f Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 12 ++--
 clang/test/CodeGen/systemz-charset-diag.cpp |  8 
 clang/test/CodeGen/systemz-charset.c|  5 +
 9 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index f0e06473bf615..889df34ab9bfb 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5706,6 +5706,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index b8d760e7e0975..d54e4ce19166a 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 3f41e7c5c6f0d..6c7becf184a92 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 2987d32d6e0d2..f8855d06fa343 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/ParseExpr.cpp

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-06-26 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From ac7a884c59debba04e708f3d8091602158797b3f Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 12 ++--
 clang/test/CodeGen/systemz-charset-diag.cpp |  8 
 clang/test/CodeGen/systemz-charset.c|  5 +
 9 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index f0e06473bf615..889df34ab9bfb 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5706,6 +5706,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index b8d760e7e0975..d54e4ce19166a 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 3f41e7c5c6f0d..6c7becf184a92 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 2987d32d6e0d2..f8855d06fa343 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/ParseExpr.cpp

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-06-19 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From 6e3ddca29305863eb309ad8b60b44934f7405f93 Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 12 ++--
 clang/test/CodeGen/systemz-charset-diag.cpp |  8 
 clang/test/CodeGen/systemz-charset.c|  5 +
 9 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index 5e7af97feeb6c..21210f3aa41d9 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5715,6 +5715,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index b8d760e7e0975..d54e4ce19166a 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 405dddf7991b4..97e0721c02b1b 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 2987d32d6e0d2..f8855d06fa343 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/ParseExpr.cpp

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-06-19 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From 6e3ddca29305863eb309ad8b60b44934f7405f93 Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 12 ++--
 clang/test/CodeGen/systemz-charset-diag.cpp |  8 
 clang/test/CodeGen/systemz-charset.c|  5 +
 9 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index 5e7af97feeb6c..21210f3aa41d9 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5715,6 +5715,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index b8d760e7e0975..d54e4ce19166a 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 405dddf7991b4..97e0721c02b1b 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 2987d32d6e0d2..f8855d06fa343 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/ParseExpr.cpp

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-06-17 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From 61be13de8d76bfeaddc5e6ff017ade6f1f4b22a7 Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 12 ++--
 clang/test/CodeGen/systemz-charset-diag.cpp |  8 
 clang/test/CodeGen/systemz-charset.c| 15 +++
 9 files changed, 52 insertions(+), 10 deletions(-)

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index c6c492b4980af..b441998e54040 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5715,6 +5715,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index b8d760e7e0975..d54e4ce19166a 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 405dddf7991b4..97e0721c02b1b 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 2987d32d6e0d2..f8855d06fa343 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/Par

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-06-17 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From 61be13de8d76bfeaddc5e6ff017ade6f1f4b22a7 Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 12 ++--
 clang/test/CodeGen/systemz-charset-diag.cpp |  8 
 clang/test/CodeGen/systemz-charset.c| 15 +++
 9 files changed, 52 insertions(+), 10 deletions(-)

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index c6c492b4980af..b441998e54040 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5715,6 +5715,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index b8d760e7e0975..d54e4ce19166a 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 405dddf7991b4..97e0721c02b1b 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 2987d32d6e0d2..f8855d06fa343 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/Par

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-06-08 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From 5d2326cd219900cb03bd78fce3f205bb2a09b8bc Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 12 ++--
 clang/test/CodeGen/systemz-charset-diag.cpp |  8 
 clang/test/CodeGen/systemz-charset.c| 15 +++
 9 files changed, 52 insertions(+), 10 deletions(-)

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index c6c492b4980af..b441998e54040 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5715,6 +5715,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index e71794b2d92c9..e88eae42f4351 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 405dddf7991b4..97e0721c02b1b 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index e38481f05da63..261218ed78a58 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/Par

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-06-08 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From 5d2326cd219900cb03bd78fce3f205bb2a09b8bc Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 12 ++--
 clang/test/CodeGen/systemz-charset-diag.cpp |  8 
 clang/test/CodeGen/systemz-charset.c| 15 +++
 9 files changed, 52 insertions(+), 10 deletions(-)

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index c6c492b4980af..b441998e54040 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5715,6 +5715,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index e71794b2d92c9..e88eae42f4351 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 405dddf7991b4..97e0721c02b1b 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index e38481f05da63..261218ed78a58 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/Par

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-05-29 Thread Abhina Sree via llvm-branch-commits


@@ -8120,7 +7838,13 @@ bool 
CheckFormatHandler::HandleInvalidConversionSpecifier(
 keepGoing = false;
   }
 
-  StringRef Specifier(csStart, csLen);
+  // The csStart points to a character that has already been converted to the
+  // exec charset, so we have to reverse the conversion to allow diagnostic
+  // message to match an expected value when using -verify option,
+  std::string RS(csStart, csLen);
+  for (unsigned int i = 0; i < RS.size(); ++i)
+RS[i] = FormatStrConverter.convert(RS[i]);
+  StringRef Specifier(RS);

abhina-sree wrote:

Thanks, I fixed this in the other PR 
https://github.com/llvm/llvm-project/pull/196568

https://github.com/llvm/llvm-project/pull/169803
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-05-28 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From 3f6de8a01b969344f780a33c28be7f3a324188fb Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 11 ++-
 clang/test/CodeGen/systemz-charset-diag.cpp |  8 
 clang/test/CodeGen/systemz-charset.c| 15 +++
 9 files changed, 52 insertions(+), 9 deletions(-)

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index c6c492b4980af..b441998e54040 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5715,6 +5715,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index e71794b2d92c9..e88eae42f4351 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 405dddf7991b4..97e0721c02b1b 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index e38481f05da63..261218ed78a58 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/Parse

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-05-28 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From 3f6de8a01b969344f780a33c28be7f3a324188fb Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 11 ++-
 clang/test/CodeGen/systemz-charset-diag.cpp |  8 
 clang/test/CodeGen/systemz-charset.c| 15 +++
 9 files changed, 52 insertions(+), 9 deletions(-)

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index c6c492b4980af..b441998e54040 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5715,6 +5715,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index e71794b2d92c9..e88eae42f4351 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 405dddf7991b4..97e0721c02b1b 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index e38481f05da63..261218ed78a58 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/Parse

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-05-25 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From f894f45ede1a3b3a6497f0be4e3bff614c973e39 Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 11 ++-
 clang/test/CodeGen/systemz-charset-diag.cpp |  9 +
 clang/test/CodeGen/systemz-charset.c| 15 +++
 9 files changed, 53 insertions(+), 9 deletions(-)
 create mode 100644 clang/test/CodeGen/systemz-charset-diag.cpp

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index c6c492b4980af..b441998e54040 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5715,6 +5715,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index e71794b2d92c9..e88eae42f4351 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 405dddf7991b4..97e0721c02b1b 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index e38481f05da63..261218ed78a58 10064

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-05-25 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From f894f45ede1a3b3a6497f0be4e3bff614c973e39 Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 11 ++-
 clang/test/CodeGen/systemz-charset-diag.cpp |  9 +
 clang/test/CodeGen/systemz-charset.c| 15 +++
 9 files changed, 53 insertions(+), 9 deletions(-)
 create mode 100644 clang/test/CodeGen/systemz-charset-diag.cpp

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index c6c492b4980af..b441998e54040 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5715,6 +5715,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index e71794b2d92c9..e88eae42f4351 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 405dddf7991b4..97e0721c02b1b 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index e38481f05da63..261218ed78a58 10064

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-05-25 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From 0b0c0d5f5794198add260fcd26e486e9691689f5 Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 11 ++-
 clang/test/CodeGen/systemz-charset-diag.cpp |  9 +
 clang/test/CodeGen/systemz-charset.c| 15 +++
 9 files changed, 53 insertions(+), 9 deletions(-)
 create mode 100644 clang/test/CodeGen/systemz-charset-diag.cpp

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index c6c492b4980af..b441998e54040 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5715,6 +5715,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index e71794b2d92c9..e88eae42f4351 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 405dddf7991b4..97e0721c02b1b 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index e38481f05da63..261218ed78a58 10064

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-05-25 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From 0b0c0d5f5794198add260fcd26e486e9691689f5 Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 11 ++-
 clang/test/CodeGen/systemz-charset-diag.cpp |  9 +
 clang/test/CodeGen/systemz-charset.c| 15 +++
 9 files changed, 53 insertions(+), 9 deletions(-)
 create mode 100644 clang/test/CodeGen/systemz-charset-diag.cpp

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index c6c492b4980af..b441998e54040 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5715,6 +5715,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index e71794b2d92c9..e88eae42f4351 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 405dddf7991b4..97e0721c02b1b 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index e38481f05da63..261218ed78a58 10064

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-05-25 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From 34008a7d0cc281b95d5d01a62b3e5c43db093f7a Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/5] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 11 ++-
 clang/test/CodeGen/systemz-charset-diag.cpp |  9 +
 clang/test/CodeGen/systemz-charset.c| 15 +++
 9 files changed, 53 insertions(+), 9 deletions(-)
 create mode 100644 clang/test/CodeGen/systemz-charset-diag.cpp

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index c6c492b4980af..b441998e54040 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5715,6 +5715,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index e71794b2d92c9..e88eae42f4351 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7374,7 +7375,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 405dddf7991b4..97e0721c02b1b 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..388cfa662068a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index e38481f05da63..261218ed78a58 10064

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-05-12 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From 92cc35c88356fce00edaa19129b0723fefc57a0c Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/4] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 11 ++-
 clang/test/CodeGen/systemz-charset-diag.cpp |  9 +
 clang/test/CodeGen/systemz-charset.c| 15 +++
 9 files changed, 53 insertions(+), 9 deletions(-)
 create mode 100644 clang/test/CodeGen/systemz-charset-diag.cpp

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index cec1dc99e90d8..fa465f9e83efe 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5662,6 +5662,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index 72beac7526dc5..e2bc5593efa97 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7372,7 +7373,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 55ea562faacaa..d9ee9de4f5377 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 877161b65b6c3..61c4df70693de 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 4c5ad7d87d6f9..7a030550b15f1 10064

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-05-11 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From f720469a901ad09b0cf94603fbcbf17a13946004 Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/3] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 11 ++-
 clang/test/CodeGen/systemz-charset-diag.cpp |  9 +
 clang/test/CodeGen/systemz-charset.c| 15 +++
 9 files changed, 53 insertions(+), 9 deletions(-)
 create mode 100644 clang/test/CodeGen/systemz-charset-diag.cpp

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index cec1dc99e90d8..fa465f9e83efe 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5662,6 +5662,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index 72beac7526dc5..e2bc5593efa97 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7372,7 +7373,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 55ea562faacaa..d9ee9de4f5377 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 877161b65b6c3..61c4df70693de 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 4c5ad7d87d6f9..7a030550b15f1 10064

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-05-09 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree updated 
https://github.com/llvm/llvm-project/pull/169803

>From f720469a901ad09b0cf94603fbcbf17a13946004 Mon Sep 17 00:00:00 2001
From: Abhina Sreeskantharajan 
Date: Fri, 8 May 2026 12:17:22 -0400
Subject: [PATCH 1/2] add ParserConversionAction, do not translate unevaluated
 strings

---
 clang/include/clang/Parse/Parser.h  |  1 +
 clang/include/clang/Sema/Sema.h |  4 +++-
 clang/lib/Parse/ParseDecl.cpp   | 10 ++
 clang/lib/Parse/ParseDeclCXX.cpp|  2 ++
 clang/lib/Parse/ParseExpr.cpp   |  6 +++---
 clang/lib/Parse/Parser.cpp  |  4 
 clang/lib/Sema/SemaExpr.cpp | 11 ++-
 clang/test/CodeGen/systemz-charset-diag.cpp |  9 +
 clang/test/CodeGen/systemz-charset.c| 15 +++
 9 files changed, 53 insertions(+), 9 deletions(-)
 create mode 100644 clang/test/CodeGen/systemz-charset-diag.cpp

diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index cec1dc99e90d8..fa465f9e83efe 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -5662,6 +5662,7 @@ class Parser : public CodeCompletionHandler {
 bool Finished;
   };
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
+  ConversionAction ParserConversionAction;
 
   /// StashAwayMethodOrFunctionBodyTokens -  Consume the tokens and store them
   /// for later parsing.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index 72beac7526dc5..e2bc5593efa97 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -55,6 +55,7 @@
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
 #include "clang/Basic/TypeTraits.h"
+#include "clang/Lex/LiteralConverter.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"
@@ -7372,7 +7373,8 @@ class Sema final : public SemaBase {
   /// from multiple tokens.  However, the common case is that StringToks points
   /// to one string.
   ExprResult ActOnStringLiteral(ArrayRef StringToks,
-Scope *UDLScope = nullptr);
+Scope *UDLScope = nullptr,
+ConversionAction Action = CA_ToExecEncoding);
 
   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef StringToks);
 
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 55ea562faacaa..d9ee9de4f5377 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -564,6 +564,9 @@ unsigned Parser::ParseAttributeArgsCommon(
   nullptr,
   Sema::ExpressionEvaluationContextRecord::EK_AttrArgument);
 
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
+
   ExprResult ArgExpr = ParseAssignmentExpression();
   if (ArgExpr.isInvalid()) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -644,6 +647,9 @@ void Parser::ParseGNUAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   if (AttrKind == ParsedAttr::AT_Availability) {
 ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc, 
ScopeName,
ScopeLoc, Form);
@@ -723,6 +729,9 @@ unsigned Parser::ParseClangAttributeArgs(
   ParsedAttr::Kind AttrKind =
   ParsedAttr::getParsedKind(AttrName, ScopeName, Form.getSyntax());
 
+  SaveAndRestore 
SavedTranslationState(ParserConversionAction,
+ CA_NoConversion);
+
   switch (AttrKind) {
   default:
 return ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc,
@@ -1546,6 +1555,7 @@ void Parser::ParseExternalSourceSymbolAttribute(
   SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch);
   continue;
 }
+
 if (Keyword == Ident_language) {
   if (HadLanguage) {
 Diag(KeywordLoc, diag::err_external_source_symbol_duplicate_clause)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 877161b65b6c3..61c4df70693de 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1001,6 +1001,8 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation 
&DeclEnd) {
 return nullptr;
   }
 } else if (tokenIsLikeStringLiteral(Tok, getLangOpts())) {
+  SaveAndRestore SavedTranslationState(
+  ParserConversionAction, CA_NoConversion);
   AssertMessage = ParseUnevaluatedStringLiteralExpression();
 } else {
   Diag(Tok, diag::err_expected_string_literal)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 4c5ad7d87d6f9..7a030550b15f1 10064

[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-05-09 Thread Abhina Sree via llvm-branch-commits

abhina-sree wrote:

> [!WARNING]
> This pull request is not mergeable via GitHub because a downstack PR is 
> open. Once all requirements are satisfied, merge this PR as a stack  href="https://app.graphite.com/github/pr/llvm/llvm-project/169803?utm_source=stack-comment-downstack-mergeability-warning";
>  >on Graphite.
> https://graphite.dev/docs/merge-pull-requests";>Learn more

* **#195890** https://app.graphite.com/github/pr/llvm/llvm-project/195890?utm_source=stack-comment-icon";
 target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" 
width="10px" height="10px"/>
* **#196569** https://app.graphite.com/github/pr/llvm/llvm-project/196569?utm_source=stack-comment-icon";
 target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" 
width="10px" height="10px"/>
* **#196568** https://app.graphite.com/github/pr/llvm/llvm-project/196568?utm_source=stack-comment-icon";
 target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" 
width="10px" height="10px"/>
* **#169803** https://app.graphite.com/github/pr/llvm/llvm-project/169803?utm_source=stack-comment-icon";
 target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" 
width="10px" height="10px"/> 👈 https://app.graphite.com/github/pr/llvm/llvm-project/169803?utm_source=stack-comment-view-in-graphite";
 target="_blank">(View in Graphite)
* **#138895** https://app.graphite.com/github/pr/llvm/llvm-project/138895?utm_source=stack-comment-icon";
 target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" 
width="10px" height="10px"/>
* `main`




This stack of pull requests is managed by https://graphite.dev?utm-source=stack-comment";>Graphite. Learn 
more about https://stacking.dev/?utm_source=stack-comment";>stacking.


https://github.com/llvm/llvm-project/pull/169803
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-05-09 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree edited 
https://github.com/llvm/llvm-project/pull/169803
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [clang] Add ParserConversionAction (PR #169803)

2026-05-09 Thread Abhina Sree via llvm-branch-commits

https://github.com/abhina-sree edited 
https://github.com/llvm/llvm-project/pull/169803
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits