on master help sign in
Add flags for gcc to treat signed ints in a predictable way
e940e39Andreas Bogk
src/IRTS/CodegenC.hs+6−1
@@ -47,7 +47,8 @@ codegenC defs out exec incs objs libs dbg
47 libFlags <- getLibFlags
47 libFlags <- getLibFlags
48 incFlags <- getIncFlags
48 incFlags <- getIncFlags
49 let gcc = comp ++ " " ++
49 let gcc = comp ++ " " ++
50− gccDbg dbg ++
50+ gccDbg dbg ++ " " ++
51+ gccFlags ++
51 " -I. " ++ objs ++ " -x c " ++
52 " -I. " ++ objs ++ " -x c " ++
52 (if (exec == Executable) then "" else " -c ") ++
53 (if (exec == Executable) then "" else " -c ") ++
53 " " ++ tmpn ++
54 " " ++ tmpn ++
@@ -68,6 +69,10 @@ headers xs =
68debug TRACE = "#define IDRIS_TRACE\n\n"
69debug TRACE = "#define IDRIS_TRACE\n\n"
69debug _ = ""
70debug _ = ""
70
71
72+-- We're using signed integers now. Make sure we get consistent semantics
73+-- out of them from gcc. See e.g. http://thiemonagel.de/2010/01/signed-integer-overflow/
74+gccFlags = " -fwrapv -fno-strict-overflow"
75+
71gccDbg DEBUG = "-g"
76gccDbg DEBUG = "-g"
72gccDbg TRACE = "-O2"
77gccDbg TRACE = "-O2"
73gccDbg _ = "-O2"
78gccDbg _ = "-O2"