Skip to content

Commit f1ec467

Browse files
committed
C++: fix tests: frontend no longer optimises dynamic_cast to base type
1 parent a2f9c87 commit f1ec467

File tree

6 files changed

+146
-146
lines changed

6 files changed

+146
-146
lines changed

cpp/ql/test/library-tests/conversions/conversions.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,8 +223,8 @@ void DynamicCast() {
223223
PolymorphicBase* pb = &b;
224224
PolymorphicDerived* pd = &d;
225225

226-
// These two casts are represented as BaseClassCasts because they can be resolved at compile time.
227-
pb = dynamic_cast<PolymorphicBase*>(pd);
226+
// These two casts were previously represented as BaseClassCasts because they were resolved at compile time, but the front-end no longer performs this optimization.
227+
pb = dynamic_cast<PolymorphicBase*>(pd);
228228
PolymorphicBase& rb = dynamic_cast<PolymorphicBase&>(d);
229229

230230
pd = dynamic_cast<PolymorphicDerived*>(pb);

cpp/ql/test/library-tests/conversions/conversions.expected

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,8 @@
137137
| conversions.cpp:207:7:207:31 | reinterpret_cast<long>... | pointer to integral conversion | prval | long | void * |
138138
| conversions.cpp:208:7:208:14 | (void *)... | integral to pointer conversion | prval | void * | long |
139139
| conversions.cpp:209:7:209:32 | reinterpret_cast<void *>... | integral to pointer conversion | prval | void * | long |
140-
| conversions.cpp:227:8:227:41 | (PolymorphicBase *)... | base class conversion | prval | PolymorphicBase * | PolymorphicDerived * |
141-
| conversions.cpp:228:25:228:57 | (PolymorphicBase)... | base class conversion | lval | PolymorphicBase | PolymorphicDerived |
140+
| conversions.cpp:227:8:227:41 | dynamic_cast<PolymorphicBase *>... | dynamic_cast | prval | PolymorphicBase * | PolymorphicDerived * |
141+
| conversions.cpp:228:25:228:57 | dynamic_cast<PolymorphicBase>... | dynamic_cast | lval | PolymorphicBase | PolymorphicDerived |
142142
| conversions.cpp:230:8:230:44 | dynamic_cast<PolymorphicDerived *>... | dynamic_cast | prval | PolymorphicDerived * | PolymorphicBase * |
143143
| conversions.cpp:231:28:231:63 | dynamic_cast<PolymorphicDerived>... | dynamic_cast | lval | PolymorphicDerived | PolymorphicBase |
144144
| conversions.cpp:235:7:235:16 | (void *)... | pointer conversion | prval | void * | ..(*)(..) |

cpp/ql/test/library-tests/ir/ir/PrintAST.expected

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5583,8 +5583,8 @@ ir.cpp:
55835583
# 857| 0: pb
55845584
# 857| Type = PolymorphicBase *
55855585
# 857| ValueCategory = lvalue
5586-
# 857| 1: (PolymorphicBase *)...
5587-
# 857| Conversion = base class conversion
5586+
# 857| 1: dynamic_cast<PolymorphicBase *>...
5587+
# 857| Conversion = dynamic_cast
55885588
# 857| Type = PolymorphicBase *
55895589
# 857| ValueCategory = prvalue
55905590
# 857| expr: pd
@@ -5597,8 +5597,8 @@ ir.cpp:
55975597
# 858| expr: (reference to)
55985598
# 858| Type = PolymorphicBase &
55995599
# 858| ValueCategory = prvalue
5600-
# 858| expr: (PolymorphicBase)...
5601-
# 858| Conversion = base class conversion
5600+
# 858| expr: dynamic_cast<PolymorphicBase>...
5601+
# 858| Conversion = dynamic_cast
56025602
# 858| Type = PolymorphicBase
56035603
# 858| ValueCategory = lvalue
56045604
# 858| expr: d

cpp/ql/test/library-tests/ir/ir/aliased_ssa_ir.expected

Lines changed: 46 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -3559,52 +3559,52 @@ ir.cpp:
35593559

35603560
# 849| DynamicCast() -> void
35613561
# 849| Block 0
3562-
# 849| v0_0(void) = EnterFunction :
3563-
# 849| mu0_1(unknown) = UnmodeledDefinition :
3564-
# 850| r0_2(glval<PolymorphicBase>) = VariableAddress[b] :
3565-
#-----| r0_3(glval<unknown>) = FunctionAddress[PolymorphicBase] :
3566-
#-----| v0_4(void) = Invoke : r0_3, this:r0_2
3567-
# 851| r0_5(glval<PolymorphicDerived>) = VariableAddress[d] :
3568-
# 851| r0_6(glval<unknown>) = FunctionAddress[PolymorphicDerived] :
3569-
# 851| v0_7(void) = Invoke : r0_6, this:r0_5
3570-
# 853| r0_8(glval<PolymorphicBase *>) = VariableAddress[pb] :
3571-
# 853| r0_9(glval<PolymorphicBase>) = VariableAddress[b] :
3572-
# 853| m0_10(PolymorphicBase *) = Store : r0_8, r0_9
3573-
# 854| r0_11(glval<PolymorphicDerived *>) = VariableAddress[pd] :
3574-
# 854| r0_12(glval<PolymorphicDerived>) = VariableAddress[d] :
3575-
# 854| m0_13(PolymorphicDerived *) = Store : r0_11, r0_12
3576-
# 857| r0_14(glval<PolymorphicDerived *>) = VariableAddress[pd] :
3577-
# 857| r0_15(PolymorphicDerived *) = Load : r0_14, m0_13
3578-
# 857| r0_16(PolymorphicBase *) = ConvertToBase[PolymorphicDerived : PolymorphicBase] : r0_15
3579-
# 857| r0_17(glval<PolymorphicBase *>) = VariableAddress[pb] :
3580-
# 857| m0_18(PolymorphicBase *) = Store : r0_17, r0_16
3581-
# 858| r0_19(glval<PolymorphicBase &>) = VariableAddress[rb] :
3582-
# 858| r0_20(glval<PolymorphicDerived>) = VariableAddress[d] :
3583-
# 858| r0_21(glval<PolymorphicBase>) = ConvertToBase[PolymorphicDerived : PolymorphicBase] : r0_20
3584-
# 858| m0_22(PolymorphicBase &) = Store : r0_19, r0_21
3585-
# 860| r0_23(glval<PolymorphicBase *>) = VariableAddress[pb] :
3586-
# 860| r0_24(PolymorphicBase *) = Load : r0_23, m0_18
3587-
# 860| r0_25(PolymorphicDerived *) = CheckedConvertOrNull : r0_24
3588-
# 860| r0_26(glval<PolymorphicDerived *>) = VariableAddress[pd] :
3589-
# 860| m0_27(PolymorphicDerived *) = Store : r0_26, r0_25
3590-
# 861| r0_28(glval<PolymorphicDerived &>) = VariableAddress[rd] :
3591-
# 861| r0_29(glval<PolymorphicBase>) = VariableAddress[b] :
3592-
# 861| r0_30(glval<PolymorphicDerived>) = CheckedConvertOrThrow : r0_29
3593-
# 861| m0_31(PolymorphicDerived &) = Store : r0_28, r0_30
3594-
# 863| r0_32(glval<void *>) = VariableAddress[pv] :
3595-
# 863| r0_33(glval<PolymorphicBase *>) = VariableAddress[pb] :
3596-
# 863| r0_34(PolymorphicBase *) = Load : r0_33, m0_18
3597-
# 863| r0_35(void *) = DynamicCastToVoid : r0_34
3598-
# 863| m0_36(void *) = Store : r0_32, r0_35
3599-
# 864| r0_37(glval<void *>) = VariableAddress[pcv] :
3600-
# 864| r0_38(glval<PolymorphicDerived *>) = VariableAddress[pd] :
3601-
# 864| r0_39(PolymorphicDerived *) = Load : r0_38, m0_27
3602-
# 864| r0_40(void *) = DynamicCastToVoid : r0_39
3603-
# 864| m0_41(void *) = Store : r0_37, r0_40
3604-
# 865| v0_42(void) = NoOp :
3605-
# 849| v0_43(void) = ReturnVoid :
3606-
# 849| v0_44(void) = UnmodeledUse : mu*
3607-
# 849| v0_45(void) = ExitFunction :
3562+
# 849| v0_0(void) = EnterFunction :
3563+
# 849| mu0_1(unknown) = UnmodeledDefinition :
3564+
# 850| r0_2(glval<PolymorphicBase>) = VariableAddress[b] :
3565+
#-----| r0_3(glval<unknown>) = FunctionAddress[PolymorphicBase] :
3566+
#-----| v0_4(void) = Invoke : r0_3, this:r0_2
3567+
# 851| r0_5(glval<PolymorphicDerived>) = VariableAddress[d] :
3568+
# 851| r0_6(glval<unknown>) = FunctionAddress[PolymorphicDerived] :
3569+
# 851| v0_7(void) = Invoke : r0_6, this:r0_5
3570+
# 853| r0_8(glval<PolymorphicBase *>) = VariableAddress[pb] :
3571+
# 853| r0_9(glval<PolymorphicBase>) = VariableAddress[b] :
3572+
# 853| m0_10(PolymorphicBase *) = Store : r0_8, r0_9
3573+
# 854| r0_11(glval<PolymorphicDerived *>) = VariableAddress[pd] :
3574+
# 854| r0_12(glval<PolymorphicDerived>) = VariableAddress[d] :
3575+
# 854| m0_13(PolymorphicDerived *) = Store : r0_11, r0_12
3576+
# 857| r0_14(glval<PolymorphicDerived *>) = VariableAddress[pd] :
3577+
# 857| r0_15(PolymorphicDerived *) = Load : r0_14, m0_13
3578+
# 857| r0_16(PolymorphicBase *) = CheckedConvertOrNull : r0_15
3579+
# 857| r0_17(glval<PolymorphicBase *>) = VariableAddress[pb] :
3580+
# 857| m0_18(PolymorphicBase *) = Store : r0_17, r0_16
3581+
# 858| r0_19(glval<PolymorphicBase &>) = VariableAddress[rb] :
3582+
# 858| r0_20(glval<PolymorphicDerived>) = VariableAddress[d] :
3583+
# 858| r0_21(glval<PolymorphicBase>) = CheckedConvertOrThrow : r0_20
3584+
# 858| m0_22(PolymorphicBase &) = Store : r0_19, r0_21
3585+
# 860| r0_23(glval<PolymorphicBase *>) = VariableAddress[pb] :
3586+
# 860| r0_24(PolymorphicBase *) = Load : r0_23, m0_18
3587+
# 860| r0_25(PolymorphicDerived *) = CheckedConvertOrNull : r0_24
3588+
# 860| r0_26(glval<PolymorphicDerived *>) = VariableAddress[pd] :
3589+
# 860| m0_27(PolymorphicDerived *) = Store : r0_26, r0_25
3590+
# 861| r0_28(glval<PolymorphicDerived &>) = VariableAddress[rd] :
3591+
# 861| r0_29(glval<PolymorphicBase>) = VariableAddress[b] :
3592+
# 861| r0_30(glval<PolymorphicDerived>) = CheckedConvertOrThrow : r0_29
3593+
# 861| m0_31(PolymorphicDerived &) = Store : r0_28, r0_30
3594+
# 863| r0_32(glval<void *>) = VariableAddress[pv] :
3595+
# 863| r0_33(glval<PolymorphicBase *>) = VariableAddress[pb] :
3596+
# 863| r0_34(PolymorphicBase *) = Load : r0_33, m0_18
3597+
# 863| r0_35(void *) = DynamicCastToVoid : r0_34
3598+
# 863| m0_36(void *) = Store : r0_32, r0_35
3599+
# 864| r0_37(glval<void *>) = VariableAddress[pcv] :
3600+
# 864| r0_38(glval<PolymorphicDerived *>) = VariableAddress[pd] :
3601+
# 864| r0_39(PolymorphicDerived *) = Load : r0_38, m0_27
3602+
# 864| r0_40(void *) = DynamicCastToVoid : r0_39
3603+
# 864| m0_41(void *) = Store : r0_37, r0_40
3604+
# 865| v0_42(void) = NoOp :
3605+
# 849| v0_43(void) = ReturnVoid :
3606+
# 849| v0_44(void) = UnmodeledUse : mu*
3607+
# 849| v0_45(void) = ExitFunction :
36083608

36093609
# 867| String::String() -> void
36103610
# 867| Block 0

0 commit comments

Comments
 (0)