http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56263
Bug #: 56263 Summary: [avr] Provide strict address-space checking Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: target AssignedTo: g...@gcc.gnu.org ReportedBy: g...@gcc.gnu.org CC: demiurg_...@freemail.ru Target: avr Created attachment 29401 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29401 Test case that shall error with strict address spaces The intrinsic address spaces introduced with PR49868 are imlemented in such a way that each address space is a subset of each other. This allows code like follows to operate as expected and without warnings: char read_char (const char *address, int data_in_flash) { if (data_in_flash) return *(const __flash char*) address; else return *address; } Currently, targetm.addr_space_subset_p returns always true in order to allow pointer casts like above without diagnostics. avr.c:avr_addr_space_subset_p() could be implemented in such a way, that it returns true iff the respective ASes are physical subsets of each other, and not only if their address, regarded as number, are subsets. In order not to change the current ABI, this can be achieved by a new command line option like -maddr-space-subset that allows the user to pick the model of his favor.