Skip to content

Commit 059a335

Browse files
committed
Store the calculated constant expression value into the ConstantExpr object
With https://reviews.llvm.org/D63376, we began storing the APValue directly into the ConstantExpr object so that we could reuse the calculated value later. However, it missed a case when not in C++11 mode but the expression is known to be constant.
1 parent e87b8e4 commit 059a335

28 files changed

+98
-7
lines changed

clang/lib/Sema/SemaExpr.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16138,7 +16138,8 @@ Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result,
1613816138
if (Result)
1613916139
*Result = E->EvaluateKnownConstIntCheckOverflow(Context);
1614016140
if (!isa<ConstantExpr>(E))
16141-
E = ConstantExpr::Create(Context, E);
16141+
E = Result ? ConstantExpr::Create(Context, E, APValue(*Result))
16142+
: ConstantExpr::Create(Context, E);
1614216143
return E;
1614316144
}
1614416145

clang/test/AST/ast-dump-c-attr.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,9 @@ struct [[deprecated]] Test4 {
3434
// CHECK-NEXT: FieldDecl{{.*}}Test6
3535
// CHECK-NEXT: DeprecatedAttr 0x{{[^ ]*}} <col:5, col:25> "Frobble" ""
3636
// CHECK-NEXT: FieldDecl{{.*}}Test7
37-
// CHECK-NEXT: Constant{{.*}}'int'
38-
// CHECK-NEXT: IntegerLiteral{{.*}}'int' 12
37+
// CHECK-NEXT: ConstantExpr{{.*}}'int'
38+
// CHECK-NEXT: value: Int 12
39+
// CHECK-NEXT: IntegerLiteral{{.*}}'int' 12
3940
// CHECK-NEXT: DeprecatedAttr 0x{{[^ ]*}} <col:15> "" ""
4041

4142
struct [[deprecated]] Test8;

clang/test/AST/ast-dump-decl-json.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -948,6 +948,7 @@ void testParmVarDecl(int TestParmVarDecl);
948948
// CHECK-NEXT: "qualType": "int"
949949
// CHECK-NEXT: },
950950
// CHECK-NEXT: "valueCategory": "rvalue",
951+
// CHECK-NEXT: "value": "1",
951952
// CHECK-NEXT: "inner": [
952953
// CHECK-NEXT: {
953954
// CHECK-NEXT: "id": "0x{{.*}}",
@@ -1668,6 +1669,7 @@ void testParmVarDecl(int TestParmVarDecl);
16681669
// CHECK-NEXT: "qualType": "int"
16691670
// CHECK-NEXT: },
16701671
// CHECK-NEXT: "valueCategory": "rvalue",
1672+
// CHECK-NEXT: "value": "1",
16711673
// CHECK-NEXT: "inner": [
16721674
// CHECK-NEXT: {
16731675
// CHECK-NEXT: "id": "0x{{.*}}",

clang/test/AST/ast-dump-decl.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ enum testEnumConstantDecl {
112112
// CHECK: EnumConstantDecl{{.*}} TestEnumConstantDecl 'int'
113113
// CHECK: EnumConstantDecl{{.*}} TestEnumConstantDeclInit 'int'
114114
// CHECK-NEXT: ConstantExpr
115-
// CHECK-NEXT: IntegerLiteral
115+
// CHECK-NEXT: value: Int 1
116+
// CHECK-NEXT: IntegerLiteral
116117

117118
struct testIndirectFieldDecl {
118119
struct {
@@ -160,7 +161,8 @@ struct testFieldDecl {
160161
// CHECK: FieldDecl{{.*}} TestFieldDecl 'int'
161162
// CHECK: FieldDecl{{.*}} TestFieldDeclWidth 'int'
162163
// CHECK-NEXT: ConstantExpr
163-
// CHECK-NEXT: IntegerLiteral
164+
// CHECK-NEXT: value: Int 1
165+
// CHECK-NEXT: IntegerLiteral
164166
// CHECK-MODULE: FieldDecl{{.*}} TestFieldDeclPrivate 'int' __module_private__
165167

166168
int TestVarDecl;

clang/test/AST/ast-dump-openmp-distribute-parallel-for-simd.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ void test_five(int x, int y, int z) {
113113
// CHECK-NEXT: | `-OMPDistributeParallelForSimdDirective {{.*}} <line:17:1, col:53>
114114
// CHECK-NEXT: | |-OMPCollapseClause {{.*}} <col:42, col:52>
115115
// CHECK-NEXT: | | `-ConstantExpr {{.*}} <col:51> 'int'
116+
// CHECK-NEXT: | | |-value: Int 1
116117
// CHECK-NEXT: | | `-IntegerLiteral {{.*}} <col:51> 'int' 1
117118
// CHECK-NEXT: | `-CapturedStmt {{.*}} <line:18:3, line:20:7>
118119
// CHECK-NEXT: | |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc> nothrow
@@ -159,6 +160,7 @@ void test_five(int x, int y, int z) {
159160
// CHECK-NEXT: | `-OMPDistributeParallelForSimdDirective {{.*}} <line:24:1, col:53>
160161
// CHECK-NEXT: | |-OMPCollapseClause {{.*}} <col:42, col:52>
161162
// CHECK-NEXT: | | `-ConstantExpr {{.*}} <col:51> 'int'
163+
// CHECK-NEXT: | | |-value: Int 2
162164
// CHECK-NEXT: | | `-IntegerLiteral {{.*}} <col:51> 'int' 2
163165
// CHECK-NEXT: | `-CapturedStmt {{.*}} <line:25:3, line:27:7>
164166
// CHECK-NEXT: | |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc> nothrow
@@ -206,6 +208,7 @@ void test_five(int x, int y, int z) {
206208
// CHECK-NEXT: `-OMPDistributeParallelForSimdDirective {{.*}} <line:31:1, col:53>
207209
// CHECK-NEXT: |-OMPCollapseClause {{.*}} <col:42, col:52>
208210
// CHECK-NEXT: | `-ConstantExpr {{.*}} <col:51> 'int'
211+
// CHECK-NEXT: | |-value: Int 2
209212
// CHECK-NEXT: | `-IntegerLiteral {{.*}} <col:51> 'int' 2
210213
// CHECK-NEXT: `-CapturedStmt {{.*}} <line:32:3, line:35:9>
211214
// CHECK-NEXT: |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc> nothrow

clang/test/AST/ast-dump-openmp-distribute-parallel-for.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ void test_five(int x, int y, int z) {
113113
// CHECK-NEXT: | `-OMPDistributeParallelForDirective {{.*}} <line:17:1, col:48>
114114
// CHECK-NEXT: | |-OMPCollapseClause {{.*}} <col:37, col:47>
115115
// CHECK-NEXT: | | `-ConstantExpr {{.*}} <col:46> 'int'
116+
// CHECK-NEXT: | | |-value: Int 1
116117
// CHECK-NEXT: | | `-IntegerLiteral {{.*}} <col:46> 'int' 1
117118
// CHECK-NEXT: | `-CapturedStmt {{.*}} <line:18:3, line:20:7>
118119
// CHECK-NEXT: | |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc> nothrow
@@ -159,6 +160,7 @@ void test_five(int x, int y, int z) {
159160
// CHECK-NEXT: | `-OMPDistributeParallelForDirective {{.*}} <line:24:1, col:48>
160161
// CHECK-NEXT: | |-OMPCollapseClause {{.*}} <col:37, col:47>
161162
// CHECK-NEXT: | | `-ConstantExpr {{.*}} <col:46> 'int'
163+
// CHECK-NEXT: | | |-value: Int 2
162164
// CHECK-NEXT: | | `-IntegerLiteral {{.*}} <col:46> 'int' 2
163165
// CHECK-NEXT: | `-CapturedStmt {{.*}} <line:25:3, line:27:7>
164166
// CHECK-NEXT: | |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc> nothrow
@@ -206,6 +208,7 @@ void test_five(int x, int y, int z) {
206208
// CHECK-NEXT: `-OMPDistributeParallelForDirective {{.*}} <line:31:1, col:48>
207209
// CHECK-NEXT: |-OMPCollapseClause {{.*}} <col:37, col:47>
208210
// CHECK-NEXT: | `-ConstantExpr {{.*}} <col:46> 'int'
211+
// CHECK-NEXT: | |-value: Int 2
209212
// CHECK-NEXT: | `-IntegerLiteral {{.*}} <col:46> 'int' 2
210213
// CHECK-NEXT: `-CapturedStmt {{.*}} <line:32:3, line:35:9>
211214
// CHECK-NEXT: |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc> nothrow

clang/test/AST/ast-dump-openmp-distribute-simd.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ void test_five(int x, int y, int z) {
105105
// CHECK-NEXT: | `-OMPDistributeSimdDirective {{.*}} <line:17:1, col:40>
106106
// CHECK-NEXT: | |-OMPCollapseClause {{.*}} <col:29, col:39>
107107
// CHECK-NEXT: | | `-ConstantExpr {{.*}} <col:38> 'int'
108+
// CHECK-NEXT: | | |-value: Int 1
108109
// CHECK-NEXT: | | `-IntegerLiteral {{.*}} <col:38> 'int' 1
109110
// CHECK-NEXT: | `-CapturedStmt {{.*}} <line:18:3, line:20:7>
110111
// CHECK-NEXT: | |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc> nothrow
@@ -147,6 +148,7 @@ void test_five(int x, int y, int z) {
147148
// CHECK-NEXT: | `-OMPDistributeSimdDirective {{.*}} <line:24:1, col:40>
148149
// CHECK-NEXT: | |-OMPCollapseClause {{.*}} <col:29, col:39>
149150
// CHECK-NEXT: | | `-ConstantExpr {{.*}} <col:38> 'int'
151+
// CHECK-NEXT: | | |-value: Int 2
150152
// CHECK-NEXT: | | `-IntegerLiteral {{.*}} <col:38> 'int' 2
151153
// CHECK-NEXT: | `-CapturedStmt {{.*}} <line:25:3, line:27:7>
152154
// CHECK-NEXT: | |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc> nothrow
@@ -190,6 +192,7 @@ void test_five(int x, int y, int z) {
190192
// CHECK-NEXT: `-OMPDistributeSimdDirective {{.*}} <line:31:1, col:40>
191193
// CHECK-NEXT: |-OMPCollapseClause {{.*}} <col:29, col:39>
192194
// CHECK-NEXT: | `-ConstantExpr {{.*}} <col:38> 'int'
195+
// CHECK-NEXT: | |-value: Int 2
193196
// CHECK-NEXT: | `-IntegerLiteral {{.*}} <col:38> 'int' 2
194197
// CHECK-NEXT: `-CapturedStmt {{.*}} <line:32:3, line:35:9>
195198
// CHECK-NEXT: |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc> nothrow

clang/test/AST/ast-dump-openmp-distribute.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ void test_five(int x, int y, int z) {
105105
// CHECK-NEXT: | `-OMPDistributeDirective {{.*}} <line:17:1, col:35>
106106
// CHECK-NEXT: | |-OMPCollapseClause {{.*}} <col:24, col:34>
107107
// CHECK-NEXT: | | `-ConstantExpr {{.*}} <col:33> 'int'
108+
// CHECK-NEXT: | | |-value: Int 1
108109
// CHECK-NEXT: | | `-IntegerLiteral {{.*}} <col:33> 'int' 1
109110
// CHECK-NEXT: | `-CapturedStmt {{.*}} <line:18:3, line:20:7>
110111
// CHECK-NEXT: | |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc>
@@ -147,6 +148,7 @@ void test_five(int x, int y, int z) {
147148
// CHECK-NEXT: | `-OMPDistributeDirective {{.*}} <line:24:1, col:35>
148149
// CHECK-NEXT: | |-OMPCollapseClause {{.*}} <col:24, col:34>
149150
// CHECK-NEXT: | | `-ConstantExpr {{.*}} <col:33> 'int'
151+
// CHECK-NEXT: | | |-value: Int 2
150152
// CHECK-NEXT: | | `-IntegerLiteral {{.*}} <col:33> 'int' 2
151153
// CHECK-NEXT: | `-CapturedStmt {{.*}} <line:25:3, line:27:7>
152154
// CHECK-NEXT: | |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc>
@@ -190,6 +192,7 @@ void test_five(int x, int y, int z) {
190192
// CHECK-NEXT: `-OMPDistributeDirective {{.*}} <line:31:1, col:35>
191193
// CHECK-NEXT: |-OMPCollapseClause {{.*}} <col:24, col:34>
192194
// CHECK-NEXT: | `-ConstantExpr {{.*}} <col:33> 'int'
195+
// CHECK-NEXT: | |-value: Int 2
193196
// CHECK-NEXT: | `-IntegerLiteral {{.*}} <col:33> 'int' 2
194197
// CHECK-NEXT: `-CapturedStmt {{.*}} <line:32:3, line:35:9>
195198
// CHECK-NEXT: |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc>

clang/test/AST/ast-dump-openmp-for-simd.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ void test_five(int x, int y, int z) {
105105
// CHECK-NEXT: | `-OMPForSimdDirective {{.*}} <line:17:1, col:33>
106106
// CHECK-NEXT: | |-OMPCollapseClause {{.*}} <col:22, col:32>
107107
// CHECK-NEXT: | | `-ConstantExpr {{.*}} <col:31> 'int'
108+
// CHECK-NEXT: | | |-value: Int 1
108109
// CHECK-NEXT: | | `-IntegerLiteral {{.*}} <col:31> 'int' 1
109110
// CHECK-NEXT: | `-CapturedStmt {{.*}} <line:18:3, line:20:7>
110111
// CHECK-NEXT: | |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc>
@@ -147,6 +148,7 @@ void test_five(int x, int y, int z) {
147148
// CHECK-NEXT: | `-OMPForSimdDirective {{.*}} <line:24:1, col:33>
148149
// CHECK-NEXT: | |-OMPCollapseClause {{.*}} <col:22, col:32>
149150
// CHECK-NEXT: | | `-ConstantExpr {{.*}} <col:31> 'int'
151+
// CHECK-NEXT: | | |-value: Int 2
150152
// CHECK-NEXT: | | `-IntegerLiteral {{.*}} <col:31> 'int' 2
151153
// CHECK-NEXT: | `-CapturedStmt {{.*}} <line:25:3, line:27:7>
152154
// CHECK-NEXT: | |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc>
@@ -190,6 +192,7 @@ void test_five(int x, int y, int z) {
190192
// CHECK-NEXT: `-OMPForSimdDirective {{.*}} <line:31:1, col:33>
191193
// CHECK-NEXT: |-OMPCollapseClause {{.*}} <col:22, col:32>
192194
// CHECK-NEXT: | `-ConstantExpr {{.*}} <col:31> 'int'
195+
// CHECK-NEXT: | |-value: Int 2
193196
// CHECK-NEXT: | `-IntegerLiteral {{.*}} <col:31> 'int' 2
194197
// CHECK-NEXT: `-CapturedStmt {{.*}} <line:32:3, line:35:9>
195198
// CHECK-NEXT: |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc>

clang/test/AST/ast-dump-openmp-for.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ void test_five(int x, int y, int z) {
105105
// CHECK-NEXT: | `-OMPForDirective {{.*}} <line:17:1, col:28>
106106
// CHECK-NEXT: | |-OMPCollapseClause {{.*}} <col:17, col:27>
107107
// CHECK-NEXT: | | `-ConstantExpr {{.*}} <col:26> 'int'
108+
// CHECK-NEXT: | | |-value: Int 1
108109
// CHECK-NEXT: | | `-IntegerLiteral {{.*}} <col:26> 'int' 1
109110
// CHECK-NEXT: | `-CapturedStmt {{.*}} <line:18:3, line:20:7>
110111
// CHECK-NEXT: | |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc>
@@ -147,6 +148,7 @@ void test_five(int x, int y, int z) {
147148
// CHECK-NEXT: | `-OMPForDirective {{.*}} <line:24:1, col:28>
148149
// CHECK-NEXT: | |-OMPCollapseClause {{.*}} <col:17, col:27>
149150
// CHECK-NEXT: | | `-ConstantExpr {{.*}} <col:26> 'int'
151+
// CHECK-NEXT: | | |-value: Int 2
150152
// CHECK-NEXT: | | `-IntegerLiteral {{.*}} <col:26> 'int' 2
151153
// CHECK-NEXT: | `-CapturedStmt {{.*}} <line:25:3, line:27:7>
152154
// CHECK-NEXT: | |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc>
@@ -190,6 +192,7 @@ void test_five(int x, int y, int z) {
190192
// CHECK-NEXT: `-OMPForDirective {{.*}} <line:31:1, col:28>
191193
// CHECK-NEXT: |-OMPCollapseClause {{.*}} <col:17, col:27>
192194
// CHECK-NEXT: | `-ConstantExpr {{.*}} <col:26> 'int'
195+
// CHECK-NEXT: | |-value: Int 2
193196
// CHECK-NEXT: | `-IntegerLiteral {{.*}} <col:26> 'int' 2
194197
// CHECK-NEXT: `-CapturedStmt {{.*}} <line:32:3, line:35:9>
195198
// CHECK-NEXT: |-CapturedDecl {{.*}} <<invalid sloc>> <invalid sloc>

0 commit comments

Comments
 (0)