[EXT_EP-9235] Compiler may lose volatile qualifier in A->B->C when B and C are both volatile Created: 14/Feb/19  Updated: 28/Mar/22  Resolved: 14/Feb/19

Status: Fixed
Project: Embedded Software & Tools
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Medium
Reporter: TI User Assignee: TI User
Resolution: Fixed Votes: 0
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Product: Code Generation Tools
Internal ID: CODEGEN-5943
Forum URL: https://e2e.ti.com/support/tools/ccs/f/81/t/770705
Found In Release: C6000_8.2.0
C2000_18.1.0.LTS
C6000_8.3.0
ARM_18.12.0.LTS
PRU_2.3.0
ARM_18.1.0.LTS
MSP430_18.1.0.LTS
C2000_19.6.0.STS
ARM_16.9.0.LTS
ARM_19.6.0.STS
C7000_2.0.0.STS
MSP430_18.12.0.LTS
MSP430_19.6.0.STS
C2000_18.12.0.LTS
Fix In Release: MSP430_18.12.2.LTS
ARM_18.1.6.LTS
MSP430_18.1.6.LTS
PRU_2.3.2
C2000_19.6.0.STS
C2000_18.1.6.LTS
C2000_18.12.2.LTS
PRU_2.4.0*
ARM_19.6.0.STS
ARM_18.12.2.LTS
C6000_8.3.4
C7000_2.0.0.STS
C6000_8.2.7
MSP430_19.6.0.STS
Workaround: The expression has to contain both dereferences, eg, a->b->c, for the problem to appear. If they're separated by using a temp, as in

  T * volatile p;
  p = a->b;
  ... p->c ...

then the problem should be avoided. Making the temp "p" volatile is also important, to prevent the compiler from recombining the two dereferences.

Or compile with -o1, -o0, or -ooff.
Release Notes: In an expression like A->B->C, when B and C are both volatile structure fields, we'd expect to see two distinct memory accesses every time. There is a bug in the compiler specifically with having two dereferences in a single expression, ie, A->B->C, in which it may lose the volatile qualifier from B. That may lead it to save A->B in a temporary variable and reuse that value instead of re-reading it as is supposed to happen.

 Description   

Compiler may lose volatile qualifier in A->B->C when B and C are both volatile


Generated at Sat Dec 13 11:31:04 CST 2025 using Jira 10.3.7#10030007-sha1:a563685562f94d165eb4e158cfb2a142338d8c54.