Created attachment 27446 [details] source file exhibiting the bug when compiled Compiling attached main.cpp gives the following error: jeffrey@ubuntu:~/scratch$ g++ -o scratch main.cpp main.cpp: In function ‘int main(int, char**)’: main.cpp:21:6: error: ‘operator Y<X>&’ is not a member of ‘X’ However, no error occurs with any of the following changes: (a) Removing the __attribute__((__may_alias__)) (commenting in line 3 and commenting out line 4). (b) Removing the implementation (line 8) or using a throwing implementation (line 9) rather than the present implementation (line 10). (c) Replacing the conversion operator with a regular member function (commenting out lines 10,21 and commenting in lines 11,22 or 12,22. Further investigation reveals a possibly related error. One can define the function out-of-line (commenting in lines 8,16 and commenting out line 10) with no error, as long as line 15 remains commented out; additionally commenting in line 15 gives the following error: jeffrey@ubuntu:~/scratch$ g++ -o scratch main.cpp main.cpp:16:20: error: no ‘X::operator Y<X>&()’ member function declared in class ‘X’ This error still appears if one uses a throwing implementation (like in (b)) or replaces the conversion operator with a regular member function (like in (c)), but no error occurs with the removal of the __attribute__((__may_alias__)) (as in (a)).
This is fixed in mainline. I'm adding two testcases and closing the bug.
Author: paolo Date: Thu Aug 13 15:45:37 2015 New Revision: 226868 URL: https://gcc.gnu.org/viewcvs?rev=226868&root=gcc&view=rev Log: 2015-08-13 Paolo Carlini <paolo.carlini@oracle.com> PR c++/53421 * g++.dg/ext/attribute-may-alias-1.C: New. * g++.dg/ext/attribute-may-alias-2.C: Likewise. Added: trunk/gcc/testsuite/g++.dg/ext/attribute-may-alias-1.C trunk/gcc/testsuite/g++.dg/ext/attribute-may-alias-2.C Modified: trunk/gcc/testsuite/ChangeLog
Done.