[PATCH] D148689: [clang][Interp] Handle PredefinedExprs
Timm Bäder via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 16 06:52:36 PDT 2023
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG1e9ac717877b: [clang][Interp] Handle PredefinedExprs (authored by tbaeder).
Changed prior to commit:
https://reviews.llvm.org/D148689?vs=519835&id=532134#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D148689/new/
https://reviews.llvm.org/D148689
Files:
clang/lib/AST/Interp/ByteCodeExprGen.cpp
clang/lib/AST/Interp/ByteCodeExprGen.h
clang/test/AST/Interp/literals.cpp
Index: clang/test/AST/Interp/literals.cpp
===================================================================
--- clang/test/AST/Interp/literals.cpp
+++ clang/test/AST/Interp/literals.cpp
@@ -1,7 +1,7 @@
-// RUN: %clang_cc1 -fexperimental-new-constant-interpreter -std=c++11 -verify %s
-// RUN: %clang_cc1 -fexperimental-new-constant-interpreter -std=c++20 -verify %s
-// RUN: %clang_cc1 -std=c++11 -verify=ref %s
-// RUN: %clang_cc1 -std=c++20 -verify=ref %s
+// RUN: %clang_cc1 -fexperimental-new-constant-interpreter -fms-extensions -std=c++11 -verify %s
+// RUN: %clang_cc1 -fexperimental-new-constant-interpreter -fms-extensions -std=c++20 -verify %s
+// RUN: %clang_cc1 -std=c++11 -fms-extensions -verify=ref %s
+// RUN: %clang_cc1 -std=c++20 -fms-extensions -verify=ref %s
#define INT_MIN (~__INT_MAX__)
#define INT_MAX __INT_MAX__
@@ -851,3 +851,26 @@
}
#endif
+
+namespace PredefinedExprs {
+#if __cplusplus >= 201402L
+ template<typename CharT>
+ constexpr bool strings_match(const CharT *str1, const CharT *str2) {
+ while (*str1 && *str2) {
+ if (*str1++ != *str2++)
+ return false;
+ };
+
+ return *str1 == *str2;
+ }
+
+ void foo() {
+ static_assert(strings_match(__FUNCSIG__, "void __cdecl PredefinedExprs::foo(void)"), "");
+ static_assert(strings_match(L__FUNCSIG__, L"void __cdecl PredefinedExprs::foo(void)"), "");
+ static_assert(strings_match(L__FUNCTION__, L"foo"), "");
+ static_assert(strings_match(__FUNCTION__, "foo"), "");
+ static_assert(strings_match(__func__, "foo"), "");
+ static_assert(strings_match(__PRETTY_FUNCTION__, "void PredefinedExprs::foo()"), "");
+ }
+#endif
+}
Index: clang/lib/AST/Interp/ByteCodeExprGen.h
===================================================================
--- clang/lib/AST/Interp/ByteCodeExprGen.h
+++ clang/lib/AST/Interp/ByteCodeExprGen.h
@@ -94,6 +94,7 @@
bool VisitCompoundLiteralExpr(const CompoundLiteralExpr *E);
bool VisitTypeTraitExpr(const TypeTraitExpr *E);
bool VisitLambdaExpr(const LambdaExpr *E);
+ bool VisitPredefinedExpr(const PredefinedExpr *E);
protected:
bool visitExpr(const Expr *E) override;
Index: clang/lib/AST/Interp/ByteCodeExprGen.cpp
===================================================================
--- clang/lib/AST/Interp/ByteCodeExprGen.cpp
+++ clang/lib/AST/Interp/ByteCodeExprGen.cpp
@@ -932,6 +932,14 @@
return true;
}
+template <class Emitter>
+bool ByteCodeExprGen<Emitter>::VisitPredefinedExpr(const PredefinedExpr *E) {
+ if (DiscardResult)
+ return true;
+
+ return this->visit(E->getFunctionName());
+}
+
template <class Emitter> bool ByteCodeExprGen<Emitter>::discard(const Expr *E) {
if (E->containsErrors())
return false;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D148689.532134.patch
Type: text/x-patch
Size: 2723 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230616/173b825a/attachment-0001.bin>
More information about the cfe-commits
mailing list