Skip to content
This repository was archived by the owner on Mar 4, 2025. It is now read-only.
This repository was archived by the owner on Mar 4, 2025. It is now read-only.

Segmentation Fault while compiling toy example #6

@sqall01

Description

@sqall01

Hi,

I just managed to compile the project. However, I am not able to compile a simple toy example with it. Here is the code of the toy example I used:

#include <cstdio>
#include <time.h>
#include <stdlib.h>


class A {

public:
	virtual void virtual_fct() {
		printf("A\n");
	}

private:
	int x = 0x41;

};


class B : public A {

private:
	int y = 5;

public:
	virtual void virtual_fct() {
		printf("B\n");
	}

	virtual void virtual_only_B_fct() {
		printf("only B fct\n");
	}
};


A * return_object(int what) {
	if(what == 0) {
		return new A;
	}
	else {
		return new B;
	}
}


void take_object(A *base_ptr, int what) {
	if(what == 0) {
		static_cast<A*>(base_ptr)->virtual_fct();
	}
	else {
		static_cast<B*>(base_ptr)->virtual_only_B_fct();
	}
}

int main() {

	srand(time(NULL));
	int r = rand() % 2;
	A *base_ptr = return_object(r);
	take_object(base_ptr, r);
	return 0;
}

I get the following output if I try to compile it with your modified compiler:

sqall@de0b:~/work/tests/toy/new$ /media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang++ toy.cpp 
toy.cpp:14:8: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
        int x = 0x41;
              ^
toy.cpp:22:8: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
        int y = 5;
              ^
#0 0x0000000000ee89e8 llvm::sys::PrintStackTrace(llvm::raw_ostream&) (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0xee89e8)
#1 0x0000000000ee90c6 SignalHandler(int) (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0xee90c6)
#2 0x00007fd5d1bd1390 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x11390)
#3 0x000000000083db43 (anonymous namespace)::X86MCCodeEmitter::encodeInstruction(llvm::MCInst const&, llvm::raw_ostream&, llvm::SmallVectorImpl<llvm::MCFixup>&, llvm::MCSubtargetInfo const&) const (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0x83db43)
#4 0x0000000000d26f2b llvm::MCELFStreamer::EmitInstToData(llvm::MCInst const&, llvm::MCSubtargetInfo const&) (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0xd26f2b)
#5 0x00000000006ec9de llvm::X86AsmPrinter::EmitInstruction(llvm::MachineInstr const*) (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0x6ec9de)
#6 0x00000000013ba90e llvm::AsmPrinter::EmitFunctionBody() (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0x13ba90e)
#7 0x00000000006e4a85 llvm::X86AsmPrinter::runOnMachineFunction(llvm::MachineFunction&) (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0x6e4a85)
#8 0x00000000009be38c llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0x9be38c)
#9 0x0000000000bc40a3 llvm::FPPassManager::runOnFunction(llvm::Function&) (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0xbc40a3)
#10 0x0000000000bc428b llvm::FPPassManager::runOnModule(llvm::Module&) (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0xbc428b)
#11 0x0000000000bc467c llvm::legacy::PassManagerImpl::run(llvm::Module&) (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0xbc467c)
#12 0x000000000101b20a clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::DataLayout const&, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> >) (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0x101b20a)
#13 0x00000000015d1918 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0x15d1918)
#14 0x00000000019440a6 clang::ParseAST(clang::Sema&, bool, bool) (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0x19440a6)
#15 0x000000000133cdac clang::FrontendAction::Execute() (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0x133cdac)
#16 0x0000000001306b18 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0x1306b18)
#17 0x00000000013b64db clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0x13b64db)
#18 0x00000000006e007d cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0x6e007d)
#19 0x00000000006df53e main (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0x6df53e)
#20 0x00007fd5d0726830 __libc_start_main /build/glibc-Cl5G7W/glibc-2.23/csu/../csu/libc-start.c:325:0
#21 0x00000000006dc4f9 _start (/media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9+0x6dc4f9)
Stack dump:
0.	Program arguments: /media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/clang-3.9 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name toy.cpp -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb -resource-dir /media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/../lib/clang/3.9.1 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/x86_64-linux-gnu/c++/5.4.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/x86_64-linux-gnu/c++/5.4.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/backward -internal-isystem /usr/local/include -internal-isystem /media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin/../lib/clang/3.9.1/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir /home/sqall/work/tests/toy/new -ferror-limit 19 -fmessage-length 134 -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/toy-521b7c.o -x c++ toy.cpp 
1.	<eof> parser at end of file
2.	Code generation
3.	Running pass 'Function Pass Manager' on module 'toy.cpp'.
4.	Running pass 'X86 Assembly / Object Emitter' on function '@_ZN1AC2Ev'
clang-3.9: error: unable to execute command: Segmentation fault (core dumped)
clang-3.9: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 3.9.1 (tags/RELEASE_391/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /media/sqall/27B98FA87615EE0A/cfixx/CFIXX/release-build/bin
clang-3.9: note: diagnostic msg: PLEASE submit a bug report to http://llvm.org/bugs/ and include the crash backtrace, preprocessed source, and associated run script.
clang-3.9: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-3.9: note: diagnostic msg: /tmp/toy-d75b6c.cpp
clang-3.9: note: diagnostic msg: /tmp/toy-d75b6c.sh
clang-3.9: note: diagnostic msg: 

********************

How do I compile a binary with your approach? Do I need a special argument for the compiler to activate your pass? Since no description is given in the README.md, I do not know if something is missing.

Cheers,
Andre

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions