tbaeder updated this revision to Diff 494504. tbaeder marked an inline comment as done. tbaeder added a comment.
Nope, no surprises. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D142448/new/ https://reviews.llvm.org/D142448 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 @@ -748,3 +748,26 @@ static_assert(get3() == 3, ""); #endif }; + +namespace TypeTraits { + static_assert(__is_trivial(int), ""); + static_assert(__is_trivial(float), ""); + static_assert(__is_trivial(E), ""); + struct S{}; + static_assert(__is_trivial(S), ""); + struct S2 { + S2() {} + }; + static_assert(!__is_trivial(S2), ""); + + template <typename T> + struct S3 { + constexpr bool foo() const { return __is_trivial(T); } + }; + struct T { + ~T() {} + }; + struct U {}; + static_assert(S3<U>{}.foo(), ""); + static_assert(!S3<T>{}.foo(), ""); +} Index: clang/lib/AST/Interp/ByteCodeExprGen.h =================================================================== --- clang/lib/AST/Interp/ByteCodeExprGen.h +++ clang/lib/AST/Interp/ByteCodeExprGen.h @@ -91,6 +91,7 @@ bool VisitExprWithCleanups(const ExprWithCleanups *E); bool VisitMaterializeTemporaryExpr(const MaterializeTemporaryExpr *E); bool VisitCompoundLiteralExpr(const CompoundLiteralExpr *E); + bool VisitTypeTraitExpr(const TypeTraitExpr *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 @@ -895,6 +895,11 @@ return false; } +template <class Emitter> +bool ByteCodeExprGen<Emitter>::VisitTypeTraitExpr(const TypeTraitExpr *E) { + return this->emitConstBool(E->getValue(), E); +} + template <class Emitter> bool ByteCodeExprGen<Emitter>::discard(const Expr *E) { if (E->containsErrors()) return false;
Index: clang/test/AST/Interp/literals.cpp =================================================================== --- clang/test/AST/Interp/literals.cpp +++ clang/test/AST/Interp/literals.cpp @@ -748,3 +748,26 @@ static_assert(get3() == 3, ""); #endif }; + +namespace TypeTraits { + static_assert(__is_trivial(int), ""); + static_assert(__is_trivial(float), ""); + static_assert(__is_trivial(E), ""); + struct S{}; + static_assert(__is_trivial(S), ""); + struct S2 { + S2() {} + }; + static_assert(!__is_trivial(S2), ""); + + template <typename T> + struct S3 { + constexpr bool foo() const { return __is_trivial(T); } + }; + struct T { + ~T() {} + }; + struct U {}; + static_assert(S3<U>{}.foo(), ""); + static_assert(!S3<T>{}.foo(), ""); +} Index: clang/lib/AST/Interp/ByteCodeExprGen.h =================================================================== --- clang/lib/AST/Interp/ByteCodeExprGen.h +++ clang/lib/AST/Interp/ByteCodeExprGen.h @@ -91,6 +91,7 @@ bool VisitExprWithCleanups(const ExprWithCleanups *E); bool VisitMaterializeTemporaryExpr(const MaterializeTemporaryExpr *E); bool VisitCompoundLiteralExpr(const CompoundLiteralExpr *E); + bool VisitTypeTraitExpr(const TypeTraitExpr *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 @@ -895,6 +895,11 @@ return false; } +template <class Emitter> +bool ByteCodeExprGen<Emitter>::VisitTypeTraitExpr(const TypeTraitExpr *E) { + return this->emitConstBool(E->getValue(), E); +} + template <class Emitter> bool ByteCodeExprGen<Emitter>::discard(const Expr *E) { if (E->containsErrors()) return false;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits