Changeset 0f9ceacb
- Timestamp:
- Nov 29, 2019, 2:59:11 PM (5 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- b798713
- Parents:
- d4f1521 (diff), 78cdb06 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
src/GenPoly/Lvalue.cc
rd4f1521 r0f9ceacb 60 60 } 61 61 62 struct ReferenceConversions final : public WithStmtsToAdd {62 struct ReferenceConversions final : public WithStmtsToAdd, public WithGuards { 63 63 Expression * postmutate( CastExpr * castExpr ); 64 64 Expression * postmutate( AddressExpr * addrExpr ); … … 71 71 72 72 struct FixIntrinsicResult final : public WithGuards { 73 enum { 74 NoSkip, 75 Skip, 76 SkipInProgress 77 } skip = NoSkip; 78 79 void premutate( AsmExpr * ) { GuardValue( skip ); skip = Skip; } 80 void premutate( ApplicationExpr * ) { GuardValue( skip ); skip = (skip == Skip) ? SkipInProgress : NoSkip; } 81 82 73 83 Expression * postmutate( ApplicationExpr * appExpr ); 74 84 void premutate( FunctionDecl * funcDecl ); … … 162 172 163 173 Expression * FixIntrinsicResult::postmutate( ApplicationExpr * appExpr ) { 164 if ( isIntrinsicReference( appExpr ) ) {174 if ( skip != SkipInProgress && isIntrinsicReference( appExpr ) ) { 165 175 // eliminate reference types from intrinsic applications - now they return lvalues 166 176 ReferenceType * result = strict_dynamic_cast< ReferenceType * >( appExpr->result ); -
tests/.expect/references.txt
rd4f1521 r0f9ceacb 36 36 3 37 37 3 9 { 1., 7. }, [1, 2, 3] 38 4 38 39 Destructing a Y 39 40 Destructing a Y -
tests/references.cfa
rd4f1521 r0f9ceacb 119 119 f( 3, a + b, (S){ 1.0, 7.0 }, (int [3]){ 1, 2, 3 } ); // two rvalue to reference 120 120 } 121 122 { 123 int a = 3; 124 int *p = &a; 125 asm ( 126 "incl %[p]\n\t" : 127 : [p] "m" (*p) 128 ); 129 printf("%d\n", a); 130 } 121 131 } 122 132
Note: See TracChangeset
for help on using the changeset viewer.