[Bug c/77410] macro reference supplied as macro reference argument is not expanded
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77410 --- Comment #1 from J. Hart --- If an additional level of macro referencing is added, the result is correct. It would appear that if an argument is directly used with an concatenation directive, that argument is not expanded. example: #define MDNM utl1 #define m1(mdnm) mdnm##x #define m2(mdnm) m1(mdnm) int m2(MDNM)(void); void utl1x(void); void MDNMx(void); gcc utl1.c -o utl1.o utl1.c:5:6: error: conflicting types for 'utl1x' void utl1x(void); ^ utl1.c:1:14: note: previous declaration of 'utl1x' was here #define MDNM utl1 ^ utl1.c:2:18: note: in definition of macro 'm1' #define m1(mdnm) mdnm##x ^ utl1.c:4:5: note: in expansion of macro 'm2' int m2(MDNM)(void); ^ utl1.c:4:8: note: in expansion of macro 'MDNM' int m2(MDNM)(void);
[Bug c++/99558] New: wrong argument types reported for "no matching function" error message if ctor argument is a variable
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99558 Bug ID: 99558 Summary: wrong argument types reported for "no matching function" error message if ctor argument is a variable Product: gcc Version: 10.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: jfhart085 at gmail dot com Target Milestone: --- Created attachment 50371 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50371&action=edit utl2.cc - demonstrates using deliberate error message from compile Wrong argument types are reported for "no matching function" error message for a ctor if a ctor argument is a variable. The argument is reported as being a reference when it is not. An error message is deliberately generated to demonstrate the problem as follows: wrong argument type: variable used as argument, first argument is shown as "int &" but is actually "int" : $ g++ -c -o utl2.o utl2.cc utl2.cc: In function "int main()": utl2.cc:13:5: error: no matching function for call to "cls4::cls4(int&, int)" correct argument type: constant used as argument, first argument is correctly shown as "int" $ g++ -D DBG1 -c -o utl2.o utl2.cc utl2.cc: In function "int main()": utl2.cc:13:5: error: no matching function for call to "cls4::cls4(int, int)" from gcc -v : Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/10.2.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: /home/jhart/temp1/gcc-10.2.0/configure --prefix=/usr --disable-multilib --with-system-zlib --enable-languages=c,c++,fortran Thread model: posix Supported LTO compression algorithms: zlib gcc version 10.2.0 (GCC)
[Bug c++/99558] wrong argument types reported for "no matching function" error message if ctor argument is a variable
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99558 --- Comment #2 from J. Hart --- Thank you very much for your kind attention and assistance. I had thought it was indicating a reference rather than an lvalue. Your correction is most useful and appreciated. I deliberately introduced the second error to demonstrate the first, so the second one was expected. Thanks again, J. Hart On 03/12/2021 06:30 PM, redi at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99558 > > Jonathan Wakely changed: > > What|Removed |Added > > Resolution|--- |INVALID > Status|UNCONFIRMED |RESOLVED > > --- Comment #1 from Jonathan Wakely --- > (In reply to J. Hart from comment #0) >> $ g++ -c -o utl2.o utl2.cc >> utl2.cc: In function "int main()": >> utl2.cc:13:5: error: no matching function for call to "cls4::cls4(int&, int)" >> >> correct argument type: constant used as argument, first argument is >> correctly shown as "int" > GCC is correct. When you use a variable you are passing an lvalue of type int, > which is what int& means. When you pass a constant it is an rvalue, i.e. int. > >> $ g++ -D DBG1 -c -o utl2.o utl2.cc >> utl2.cc: In function "int main()": >> utl2.cc:13:5: error: no matching function for call to "cls4::cls4(int, int)" > Because you're passing two rvalues. >