Closed 4ntoine closed 8 years ago
invocation with -S -emit-llvm
succeed:
MBA-Anton:bin asmirnov$ ./clang -S -emit-llvm -g -Os -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-I/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino" "-I/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/standard" "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Stream.cpp" -o "/tmp/arduino_test1/Stream.cpp.ll" -I/Applications/Arduino.app/Contents/Java/hardware/tools/avr/avr/include --target=avr
generated Stream.cpp.ll is here: https://gist.github.com/4ntoine/34a9dca57e775d6309d6
Stream-e25064.cpp is here: https://gist.github.com/4ntoine/043f1924c784ba93919d
Stream-e25064.sh:
# Crash reproducer for clang version 3.9.0 (https://github.com/avr-llvm/clang.git 82a9a3e4b5a70a76621c9a06926e68baae9765c9) (llvm/llvm.git cfc3f431c02364847df4c9b09b4cea54a0669e43)
# Driver args: "-c" "-g" "-Os" "-std=gnu++11" "-fno-exceptions" "-ffunction-sections" "-fdata-sections" "-fno-threadsafe-statics" "-MMD" "-mmcu=atmega328p" "-D" "F_CPU=16000000L" "-D" "ARDUINO=10607" "-D" "ARDUINO_AVR_UNO" "-D" "ARDUINO_ARCH_AVR" "-I" "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino" "-I" "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/standard" "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Stream.cpp" "-o" "/tmp/arduino_test1/Stream.cpp.o" "-I" "/Applications/Arduino.app/Contents/Java/hardware/tools/avr/avr/include" "--target=avr"
# Original command: "/Users/asmirnov/Documents/dev/src/avr-llvm/build/bin/clang-3.9" "-cc1" "-triple" "avr" "-emit-obj" "-disable-free" "-main-file-name" "Stream.cpp" "-mrelocation-model" "static" "-mthread-model" "posix" "-mdisable-fp-elim" "-fmath-errno" "-masm-verbose" "-mconstructor-aliases" "-target-cpu" "atmega328p" "-target-linker-version" "253.9" "-dwarf-column-info" "-debug-info-kind=limited" "-dwarf-version=4" "-debugger-tuning=gdb" "-ffunction-sections" "-fdata-sections" "-coverage-file" "/tmp/arduino_test1/Stream.cpp.o" "-resource-dir" "/Users/asmirnov/Documents/dev/src/avr-llvm/build/bin/../lib/clang/3.9.0" "-dependency-file" "/tmp/arduino_test1/Stream.cpp.d" "-MT" "/tmp/arduino_test1/Stream.cpp.o" "-D" "F_CPU=16000000L" "-D" "ARDUINO=10607" "-D" "ARDUINO_AVR_UNO" "-D" "ARDUINO_ARCH_AVR" "-I" "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino" "-I" "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/standard" "-I" "/Applications/Arduino.app/Contents/Java/hardware/tools/avr/avr/include" "-Os" "-std=gnu++11" "-fdeprecated-macro" "-fdebug-compilation-dir" "/Users/asmirnov/Documents/dev/src/avr-llvm/build/bin" "-ferror-limit" "19" "-fmessage-length" "138" "-fno-threadsafe-statics" "-fobjc-runtime=gcc" "-fdiagnostics-show-option" "-fcolor-diagnostics" "-vectorize-loops" "-vectorize-slp" "-o" "/tmp/arduino_test1/Stream.cpp.o" "-x" "c++" "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Stream.cpp"
"/Users/asmirnov/Documents/dev/src/avr-llvm/build/bin/clang-3.9" "-cc1" "-triple" "avr" "-emit-obj" "-disable-free" "-main-file-name" "Stream.cpp" "-mrelocation-model" "static" "-mthread-model" "posix" "-mdisable-fp-elim" "-fmath-errno" "-masm-verbose" "-mconstructor-aliases" "-target-cpu" "atmega328p" "-target-linker-version" "253.9" "-dwarf-column-info" "-debug-info-kind=limited" "-dwarf-version=4" "-debugger-tuning=gdb" "-ffunction-sections" "-fdata-sections" "-D" "F_CPU=16000000L" "-D" "ARDUINO=10607" "-D" "ARDUINO_AVR_UNO" "-D" "ARDUINO_ARCH_AVR" "-Os" "-std=gnu++11" "-fdeprecated-macro" "-ferror-limit" "19" "-fmessage-length" "138" "-fno-threadsafe-statics" "-fobjc-runtime=gcc" "-fdiagnostics-show-option" "-fcolor-diagnostics" "-vectorize-loops" "-vectorize-slp" "-x" "c++" "Stream-e25064.cpp"
Reduced:
%class.Stream.1 = type { %class.Print.0, i32, i32 }
%class.Print.0 = type { i32 (...)**, i16 }
%Stream.MultiTarget.2 = type { i8*, i16, i16 }
define i16 @findMulti(%class.Stream.1* %this, %Stream.MultiTarget.2* %targets) align 2 {
entry:
%sub.ptr.rhs.cast = ptrtoint %Stream.MultiTarget.2* %targets to i16
%sub.ptr.sub = sub i16 0, %sub.ptr.rhs.cast
%sub.ptr.div = sdiv exact i16 %sub.ptr.sub, 6
ret i16 %sub.ptr.div
}
@shepmaster's test case now is successfully lowered to assembly, and assembled into machine code.