diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp b/clang/lib/AST/Interp/ByteCodeExprGen.cpp index 79b0a3857d075..40a06b3b80ac0 100644 --- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp +++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp @@ -616,6 +616,8 @@ bool ByteCodeExprGen::VisitAbstractConditionalOperator( template bool ByteCodeExprGen::VisitStringLiteral(const StringLiteral *E) { + if (DiscardResult) + return true; unsigned StringIndex = P.createGlobalString(E); return this->emitGetPtrGlobal(StringIndex, E); } @@ -623,6 +625,8 @@ bool ByteCodeExprGen::VisitStringLiteral(const StringLiteral *E) { template bool ByteCodeExprGen::VisitCharacterLiteral( const CharacterLiteral *E) { + if (DiscardResult) + return true; return this->emitConst(E->getValue(), E); } diff --git a/clang/test/AST/Interp/literals.cpp b/clang/test/AST/Interp/literals.cpp index b8467b86c4c90..64ba381057c45 100644 --- a/clang/test/AST/Interp/literals.cpp +++ b/clang/test/AST/Interp/literals.cpp @@ -901,6 +901,8 @@ namespace DiscardExprs { (int[]){1,2,3}; int arr[] = {1,2,3}; arr[0]; + "a"; + 'b'; return 0; }