MarcusJohnson91 updated this revision to Diff 361410.
MarcusJohnson91 added a comment.
Rebased on main
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D103426/new/
https://reviews.llvm.org/D103426
Files:
clang/lib/AST/OSLog.cpp
clang/lib/Sema/SemaChecking.cpp
clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp
Index: clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp
===================================================================
--- clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp
+++ clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp
@@ -785,28 +785,10 @@
// Currently we only handle (not wide) string literals. It is possible to do
// better, either by looking at references to const variables, or by doing
// real flow analysis.
- std::string String;
auto FormatString =
dyn_cast<StringLiteral>(CE->getArg(ArgIndex)->IgnoreParenImpCasts());
- StringLiteral::StringKind Kind = FormatString->getKind();
-
- if (Kind == StringLiteral::Ascii || Kind == StringLiteral::UTF8) {
- String = FormatString->getStringAsChar();
- } else if (Kind == StringLiteral::UTF16) {
- std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> Convert;
- std::u16string U16 = FormatString->getStringAsChar16();
- String = Convert.to_bytes(U16);
- } else if (Kind == StringLiteral::UTF32) {
- std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> Convert;
- std::u32string U32 = FormatString->getStringAsChar32();
- String = Convert.to_bytes(U32);
- } else if (Kind == StringLiteral::Wide) {
- std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> Convert;
- std::wstring WChar = FormatString->getStringAsWChar();
- String = Convert.to_bytes(WChar);
- }
-
+ std::string String(FormatString->getStrDataAsChar());
StringRef StrRef = StringRef(String);
if (FormatString &&
Index: clang/lib/Sema/SemaChecking.cpp
===================================================================
--- clang/lib/Sema/SemaChecking.cpp
+++ clang/lib/Sema/SemaChecking.cpp
@@ -622,25 +622,7 @@
auto *FormatExpr = TheCall->getArg(FormatIndex)->IgnoreParenImpCasts();
if (auto *Format = dyn_cast<StringLiteral>(FormatExpr)) {
- StringLiteral::StringKind Kind = Format->getKind();
- std::string String;
-
- if (Kind == StringLiteral::Ascii || Kind == StringLiteral::UTF8) {
- String = Format->getStringAsChar();
- } else if (Kind == StringLiteral::UTF16) {
- std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> Convert;
- std::u16string U16 = Format->getStringAsChar16();
- String = Convert.to_bytes(U16);
- } else if (Kind == StringLiteral::UTF32) {
- std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> Convert;
- std::u32string U32 = Format->getStringAsChar32();
- String = Convert.to_bytes(U32);
- } else if (Kind == StringLiteral::Wide) {
- std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> Convert;
- std::wstring WChar = Format->getStringAsWChar();
- String = Convert.to_bytes(WChar);
- }
-
+ std::string String(Format->getStrDataAsChar());
StringRef FormatStrRef(String);
EstimateSizeFormatHandler H(FormatStrRef);
@@ -7492,6 +7474,10 @@
return FExpr->getString().drop_front(Offset);
}
+ const char *getStrDataAsChar() const {
+ return FExpr->getStrDataAsChar();
+ }
+
std::string getStringAsChar() const {
return FExpr->getStringAsChar();
}
@@ -9549,24 +9535,7 @@
/*IsStringLocation*/ true, OrigFormatExpr->getSourceRange());
return;
}
- StringLiteral::StringKind Kind = FExpr->getKind();
- std::string String;
-
- if (Kind == StringLiteral::Ascii || Kind == StringLiteral::UTF8) {
- String = FExpr->getStringAsChar();
- } else if (Kind == StringLiteral::UTF16) {
- std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> Convert;
- std::u16string U16 = FExpr->getStringAsChar16();
- String = Convert.to_bytes(U16);
- } else if (Kind == StringLiteral::UTF32) {
- std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> Convert;
- std::u32string U32 = FExpr->getStringAsChar32();
- String = Convert.to_bytes(U32);
- } else if (Kind == StringLiteral::Wide) {
- std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> Convert;
- std::wstring WChar = FExpr->getStringAsWChar();
- String = Convert.to_bytes(WChar);
- }
+ std::string String(FExpr->getStrDataAsChar());
StringRef StrRef(String);
const char *Str = StrRef.data();
@@ -9637,25 +9606,7 @@
assert(T && "String literal not of constant array type!");
size_t TypeSize = T->getSize().getZExtValue();
- StringLiteral::StringKind Kind = FExpr->getKind();
- std::string String;
-
- if (Kind == StringLiteral::Ascii || Kind == StringLiteral::UTF8) {
- String = FExpr->getStringAsChar();
- } else if (Kind == StringLiteral::UTF16) {
- std::u16string U16 = FExpr->getStringAsChar16();
- std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> Convert;
- String = Convert.to_bytes(U16);
- } else if (Kind == StringLiteral::UTF32) {
- std::u32string U32 = FExpr->getStringAsChar32();
- std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> Convert;
- String = Convert.to_bytes(U32);
- } else if (Kind == StringLiteral::Wide) {
- std::wstring WChar = FExpr->getStringAsWChar();
- std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> Convert;
- String = Convert.to_bytes(WChar);
- }
-
+ std::string String(FExpr->getStrDataAsChar());
StringRef StrRef(String);
const char *Str = StrRef.data();
Index: clang/lib/AST/OSLog.cpp
===================================================================
--- clang/lib/AST/OSLog.cpp
+++ clang/lib/AST/OSLog.cpp
@@ -205,23 +205,6 @@
const StringLiteral *Lit = cast<StringLiteral>(StringArg->IgnoreParenCasts());
assert(Lit);
std::string String(Lit->getStrDataAsChar());
- /*
- if (Lit->isAscii() || Lit->isUTF8()) {
- String = Lit->getStringAsChar();
- } else if (Lit->isUTF16()) {
- std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> Convert;
- std::u16string U16 = Lit->getStringAsChar16();
- String = Convert.to_bytes(U16);
- } else if (Lit->isUTF32()) {
- std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> Convert;
- std::u32string U32 = Lit->getStringAsChar32();
- String = Convert.to_bytes(U32);
- } else if (Lit->isWide()) {
- std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> Convert;
- std::wstring WChar = Lit->getStringAsWChar();
- String = Convert.to_bytes(WChar);
- }
- */
StringRef Data(String);
OSLogFormatStringHandler H(VarArgs);
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits