[Bug c/77410] macro reference supplied as macro reference argument is not expanded

2016-08-29 Thread jfhart085 at gmail dot com
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

2021-03-12 Thread jfhart085 at gmail dot com via Gcc-bugs
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

2021-03-12 Thread jfhart085 at gmail dot com via Gcc-bugs
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.
>