[Bug c++/81853] New: [C++14] "using namespace" is not a constant expression in function-like macro

2017-08-15 Thread t.poechtrager at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81853

Bug ID: 81853
   Summary: [C++14] "using namespace" is not a constant expression
in function-like macro
   Product: gcc
   Version: 7.1.1
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: t.poechtrager at gmail dot com
  Target Milestone: ---

$ g++ --version
g++ (GCC) 7.1.1 20170630
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

---

$ cat test.cpp 

namespace test {
constexpr int test_fun() { return 42; }
}

#define test_macro() \
({ \
using namespace test; \
test_fun(); \
})

int main()
{
constexpr int test_var = test_macro();
return test_var;
}

---

$ g++ test.cpp 
test.cpp: In function ‘int main()’:
test.cpp:8:19: error: statement is not a constant expression
   using namespace test; \
   ^
test.cpp:14:30: note: in expansion of macro ‘test_macro’
 constexpr int test_var = test_macro();
  ^~

---

Clang accepts this since 3.4:

$ clang++ test.cpp -std=c++14 && ./a.out ; echo $?
42

[Bug lto/65544] LTO link fails with -static-libstdc++ + weak new/delete operators

2015-03-25 Thread t.poechtrager at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65544

--- Comment #4 from Thomas Pöchtrager  ---
If it matters, there are no linker errors with -fno-use-linker-plugin.

[Bug lto/65544] LTO link fails with -static-libstdc++ + weak new/delete operators

2015-03-25 Thread t.poechtrager at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65544

--- Comment #3 from Thomas Pöchtrager  ---
(In reply to Richard Biener from comment #2)
> Can you verify if the cross compiler uses a linker-plugin by specifying
> -fuse-linker-plugin?  Without that errors like this are unfortunately
> expected.

The problem persits with -fuse-linker-plugin.

$ i686-w64-mingw32-g++ test.cpp -fuse-linker-plugin -flto -static-libstdc++ -v
Using built-in specs.
COLLECT_GCC=i686-w64-mingw32-g++
COLLECT_LTO_WRAPPER=/opt/compiler/mingw-w64/libexec/gcc/i686-w64-mingw32/4.9.2/lto-wrapper
Target: i686-w64-mingw32
Configured with: ../configure --prefix=/opt/compiler/mingw-w64
--target=i686-w64-mingw32 --with-gnu-ld --with-gnu-as
--enable-languages=c,c++,lto --disable-multilib --enable-lto
--enable-threads=posix
Thread model: posix
gcc version 4.9.2 (GCC) 
COLLECT_GCC_OPTIONS='-fuse-linker-plugin' '-flto' '-v' '-shared-libgcc'
'-mtune=generic' '-march=pentiumpro'
 /opt/compiler/mingw-w64/libexec/gcc/i686-w64-mingw32/4.9.2/cc1plus -quiet -v
-D_REENTRANT test.cpp -quiet -dumpbase test.cpp -mtune=generic
-march=pentiumpro -auxbase test -version -fuse-linker-plugin -flto -o
/tmp/ccnj4m7D.s
GNU C++ (GCC) version 4.9.2 (i686-w64-mingw32)
compiled by GNU C version 4.9.1, GMP version 6.0.0, MPFR version
3.1.2-p3, MPC version 1.0.2
warning: MPFR header version 3.1.2-p3 differs from library version 3.1.2-p11.
warning: MPC header version 1.0.2 differs from library version 1.0.3.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory
"/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/sys-include"
#include "..." search starts here:
#include <...> search starts here:

/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/include/c++/4.9.2

/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/include/c++/4.9.2/i686-w64-mingw32

/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/include/c++/4.9.2/backward
 /opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/include
 /opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/include-fixed

/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/include
End of search list.
GNU C++ (GCC) version 4.9.2 (i686-w64-mingw32)
compiled by GNU C version 4.9.1, GMP version 6.0.0, MPFR version
3.1.2-p3, MPC version 1.0.2
warning: MPFR header version 3.1.2-p3 differs from library version 3.1.2-p11.
warning: MPC header version 1.0.2 differs from library version 1.0.3.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: a4174c607d6c7ea8e319dc3ef635686f
COLLECT_GCC_OPTIONS='-fuse-linker-plugin' '-flto' '-v' '-shared-libgcc'
'-mtune=generic' '-march=pentiumpro'

/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/bin/as
-v -o /tmp/ccy6gCyh.o /tmp/ccnj4m7D.s
GNU assembler version 2.25 (i686-w64-mingw32) using BFD version (GNU Binutils)
2.25
COMPILER_PATH=/opt/compiler/mingw-w64/libexec/gcc/i686-w64-mingw32/4.9.2/:/opt/compiler/mingw-w64/libexec/gcc/i686-w64-mingw32/4.9.2/:/opt/compiler/mingw-w64/libexec/gcc/i686-w64-mingw32/:/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/:/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/:/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/bin/
LIBRARY_PATH=/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/:/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/lib/../lib/:/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/lib/
COLLECT_GCC_OPTIONS='-fuse-linker-plugin' '-flto' '-v' '-shared-libgcc'
'-mtune=generic' '-march=pentiumpro'
 /opt/compiler/mingw-w64/libexec/gcc/i686-w64-mingw32/4.9.2/collect2 -plugin
/opt/compiler/mingw-w64/libexec/gcc/i686-w64-mingw32/4.9.2/liblto_plugin.so
-plugin-opt=/opt/compiler/mingw-w64/libexec/gcc/i686-w64-mingw32/4.9.2/lto-wrapper
-plugin-opt=-fresolution=/tmp/ccFrtw0U.res -plugin-opt=-pass-through=-lmingw32
-plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc
-plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex
-plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lpthread
-plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32
-plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32
-plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s
-plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname
-plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -flto -m
i386pe -Bdynamic
/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/lib/../lib/crt2.o
/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/crtbegin.o
-L/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2
-L/opt/compiler/mingw-w64/lib/gcc/i

[Bug lto/65544] LTO link fails with -static-libstdc++ + weak new/delete operators

2015-03-24 Thread t.poechtrager at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65544

Thomas Pöchtrager  changed:

   What|Removed |Added

Version|unknown |4.9.2

--- Comment #1 from Thomas Pöchtrager  ---
Sorry, the MinGW version has ben cut, it's

gcc version 4.9.2 (GCC)

[Bug lto/65544] New: LTO link fails with -static-libstdc++ + weak new/delete operators

2015-03-24 Thread t.poechtrager at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65544

Bug ID: 65544
   Summary: LTO link fails with -static-libstdc++ + weak
new/delete operators
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: lto
  Assignee: unassigned at gcc dot gnu.org
  Reporter: t.poechtrager at gmail dot com

$ cat test.cpp  
#include  
#include  
#include  

#define WEAK __attribute__((weak))  

WEAK void *operator new(size_t size) throw()
{   
void *p = malloc(size); 
if(!p) abort(); 
return p;   
}   

WEAK void *operator new[](size_t size) throw()  
{   
void *p = malloc(size); 
if(!p) abort(); 
return p;   
}   

WEAK void operator delete(void *p) throw() { if(p) free(p); }   
WEAK void operator delete(void *p, size_t) throw() { if(p) free(p); }   

WEAK void operator delete[](void *p) throw() { if(p) free(p); } 
WEAK void operator delete[](void *p, size_t) throw() { if(p) free(p); } 


int main(){}



$ i686-w64-mingw32-g++ test.cpp -static-libstdc++  # works
$ i686-w64-mingw32-g++ test.cpp -flto  # works
$ g++ test.cpp -flto -static-libstdc++ # native g++ works too
$ g++ test.cpp -flto -static-libstdc++ -m32# 32-bit is no problem
either

$ i686-w64-mingw32-g++ test.cpp -flto -static-libstdc++
`__ZdlPv' referenced in section `.text$_ZNSt9exceptionD0Ev' of
/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/lib/../lib/libstdc++.a(eh_exception.o):
defined in discarded section `.text' of /tmp/cc4sS08t.o (symbol from plugin)
`__ZdlPv' referenced in section `.text$_ZNSt13bad_exceptionD0Ev' of
/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/lib/../lib/libstdc++.a(eh_exception.o):
defined in discarded section `.text' of /tmp/cc4sS08t.o (symbol from plugin)
`__ZdlPv' referenced in section `.text$_ZN10__cxxabiv115__forced_unwindD0Ev' of
/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/lib/../lib/libstdc++.a(eh_exception.o):
defined in discarded section `.text' of /tmp/cc4sS08t.o (symbol from plugin)
`__ZdlPv' referenced in section
`.text$_ZN10__cxxabiv119__foreign_exceptionD0Ev' of
/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/lib/../lib/libstdc++.a(eh_exception.o):
defined in discarded section `.text' of /tmp/cc4sS08t.o (symbol from plugin)
`__ZdlPv' referenced in section
`.text$_ZN9__gnu_cxx24__concurrence_lock_errorD0Ev[__ZN9__gnu_cxx24__concurrence_lock_errorD0Ev]'
of
/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/lib/../lib/libstdc++.a(eh_alloc.o):
defined in discarded section `.text' of /tmp/cc4sS08t.o (symbol from plugin)
`__ZdlPv' referenced in section
`.text$_ZN9__gnu_cxx26__concurrence_unlock_errorD0Ev[__ZN9__gnu_cxx26__concurrence_unlock_errorD0Ev]'
of
/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/lib/../lib/libstdc++.a(eh_alloc.o):
defined in discarded section `.text' of /tmp/cc4sS08t.o (symbol from plugin)
`__ZdlPv' referenced in section
`.text$_ZN10__cxxabiv120__si_class_type_infoD0Ev' of
/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/lib/../lib/libstdc++.a(si_class_type_info.o):
defined in discarded section `.text' of /tmp/cc4sS08t.o (symbol from plugin)
`__ZdlPv' referenced in section `.text$_ZNSt9type_infoD0Ev' of
/opt/compiler/mingw-w64/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/lib/../lib/libstdc++.a(tinfo.o):
defined in discarded section `.text' of /tmp/cc4sS08t.o (symbol from plugin)
`__ZdlPv' referenced in section `.text$_ZN10__cxxabiv117__class_type_infoD0Ev'
of
/opt

[Bug c/61564] New: #pragma GCC optimize ("-fno-lto") causes the compiler to crash

2014-06-19 Thread t.poechtrager at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61564

Bug ID: 61564
   Summary: #pragma GCC optimize ("-fno-lto") causes the compiler
to crash
   Product: gcc
   Version: 4.9.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c
  Assignee: unassigned at gcc dot gnu.org
  Reporter: t.poechtrager at gmail dot com
Target: Linux x86_64, i686-w64-mingw32 and others

$ cat test.cpp
#pragma GCC push_options
#pragma GCC optimize ("-fno-lto")
int main(void){return 0;}
#pragma GCC pop_options

### GCC 4.9.0 ###
$ LC_ALL=C gcc test.cpp -flto 
test.cpp:4:24: internal compiler error: Segmentation fault
 #pragma GCC pop_options
^
Please submit a full bug report,
with preprocessed source if appropriate.
See  for instructions.
Preprocessed source stored into /tmp/ccpuDCNO.out file, please attach this to
your bugreport.

### GCC 4.6.4 ###
$ LC_ALL=C gcc-4.6 test.cpp -flto # no crash