Extrem seltsamer Bug in GCC?

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
dawit
Beiträge: 42
Registriert: 05.02.2011, 17:06

Extrem seltsamer Bug in GCC?

Beitrag von dawit »

Hallo, hab heute dank GCC die Hälfte meiner Haare und den Großteil meines Verstandes verloren. Ich habe versucht, den Code auf ein Minimum zu reduzieren, kann aber immer noch nicht sagen, wann der Bug denn nun genau auftritt. Wenn jemand das Problem noch einengen kann, wäre ich sehr dankbar.
Der Code:

Code: Alles auswählen

#include <type_traits>

template<typename ...T>
struct type_list {};

template<typename ...T>
struct make_type_list
{
	using type = type_list<T...>;
};

// Der Bug tritt nicht auf, wenn make_tuple_type direkt verwendet wird.
template<typename ...T>
using make_type_list_t = typename make_type_list<T...>::type;


struct ContainerEndA {};

template<typename ...Lists>
struct ContainerA
{
	using type = make_type_list_t<Lists..., ContainerEndA>;
};


struct ContainerEndB {};

//template<typename Head, typename ...Lists>    // Internal compiler error
template<typename ...Lists>
struct ContainerB
{
	using type = make_type_list_t<Lists..., ContainerEndB>;
};


int main()
{
	// Es spielt keine Rolle mit welchen Typen ContainerA und ContainerB instanziiert werden.
	static_assert(
		std::is_same<ContainerA<int>::type, ContainerB<int>::type>::value,
		"Fails in clang but not in GCC 4.9"
	);
}
GCC scheint ContainerA<>::type mit ContainerB<>::type zu ersetzen (das hängt von der Reihenfolge ab, in der ContainerA und ContainerB definiert werden). Hingegen wird ContainerA<> nicht durch ContainerB<> ersetzt, wie man am letzten static_assert erkennen kann.
Ich bin gerade ein bisschen ratlos. Das ist doch ein Bug, oder?
Wer mit dem Code ein wenig herumspielen will, kann dies gleich hier tun.

Gibt es vielleicht bereits einen Bug-Report? (ich weiß gerade nicht einmal, wonach ich genau suchen soll...)

EDIT: Habe den Code leicht vereinfacht und dabei noch eine Möglichkeit gefunden, einen Internal Compiler Error auszulösen.

Viele Grüße
David
dawit
Beiträge: 42
Registriert: 05.02.2011, 17:06

Re: Extrem seltsamer Bug in GCC?

Beitrag von dawit »

Hab jetzt mal einen Bug Report eingereicht: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63139
Alexander Kornrumpf
Moderator
Beiträge: 2113
Registriert: 25.02.2009, 13:37

Re: Extrem seltsamer Bug in GCC?

Beitrag von Alexander Kornrumpf »

Danke für's Teilen. Ich finde sowas immer interessant.
dawit
Beiträge: 42
Registriert: 05.02.2011, 17:06

Re: Extrem seltsamer Bug in GCC?

Beitrag von dawit »

Gern :). Es hilft auch mir selbst immer, ein Problem für andere aufzuschreiben, da wird mir vieles noch einmal ganz anders klar.
dawit
Beiträge: 42
Registriert: 05.02.2011, 17:06

Re: Extrem seltsamer Bug in GCC?

Beitrag von dawit »

Bug ist gefixed! (siehe Link weiter oben)
Antworten