Author: Timm Bäder Date: 2024-02-02T07:40:05+01:00 New Revision: 2147a2a4f3ef344a561677b55444ce4d028ec59f
URL: https://github.com/llvm/llvm-project/commit/2147a2a4f3ef344a561677b55444ce4d028ec59f DIFF: https://github.com/llvm/llvm-project/commit/2147a2a4f3ef344a561677b55444ce4d028ec59f.diff LOG: [clang][Interp] Not all TypeTraitExprs are of bool type In C, they return an integer, so emit their value as such. Added: Modified: clang/lib/AST/Interp/ByteCodeExprGen.cpp clang/test/Sema/PR2919-builtin-types-compat-strips-crv.c clang/test/Sema/auto-type.c Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp b/clang/lib/AST/Interp/ByteCodeExprGen.cpp index a93635a9f6888..ca7e529041188 100644 --- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp +++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp @@ -1668,7 +1668,9 @@ template <class Emitter> bool ByteCodeExprGen<Emitter>::VisitTypeTraitExpr(const TypeTraitExpr *E) { if (DiscardResult) return true; - return this->emitConstBool(E->getValue(), E); + if (E->getType()->isBooleanType()) + return this->emitConstBool(E->getValue(), E); + return this->emitConst(E->getValue(), E); } template <class Emitter> diff --git a/clang/test/Sema/PR2919-builtin-types-compat-strips-crv.c b/clang/test/Sema/PR2919-builtin-types-compat-strips-crv.c index 9c1335786a500..2ead63c8e43e1 100644 --- a/clang/test/Sema/PR2919-builtin-types-compat-strips-crv.c +++ b/clang/test/Sema/PR2919-builtin-types-compat-strips-crv.c @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -fsyntax-only %s +// RUN: %clang_cc1 -fsyntax-only %s -fexperimental-new-constant-interpreter typedef struct foo T0; typedef const struct foo T1; diff --git a/clang/test/Sema/auto-type.c b/clang/test/Sema/auto-type.c index 1170c687c96aa..b66f58b923287 100644 --- a/clang/test/Sema/auto-type.c +++ b/clang/test/Sema/auto-type.c @@ -1,4 +1,5 @@ // RUN: %clang_cc1 %s -fsyntax-only -Wno-strict-prototypes -verify -pedantic -std=c11 +// RUN: %clang_cc1 %s -fsyntax-only -Wno-strict-prototypes -verify -pedantic -std=c11 -fexperimental-new-constant-interpreter __auto_type a = 5; // expected-warning {{'__auto_type' is a GNU extension}} __extension__ __auto_type a1 = 5; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits