12014-11-10 David Malcolm <dmalcolm@redhat.com> 2 3 * docs/_build/texinfo/libgccjit.texi: Regenerate. 4 52014-11-10 David Malcolm <dmalcolm@redhat.com> 6 7 * dummy-frontend.c: Add includes now needed since r216805 by 8 cgraph.h: hash-map.h, is-a.h, plugin-api.h, vec.h, hashtab.h, 9 hash-set.h, machmode.h, tm.h, hard-reg-set.h, function.h, 10 ipa-ref.h, dumpfile.h. 11 * jit-playback.c: Likewise. 12 132014-11-05 David Malcolm <dmalcolm@redhat.com> 14 15 * jit-playback.c (gcc::jit::playback::context::handle_locations): 16 Drop the disabled debugging code. 17 182014-11-05 David Malcolm <dmalcolm@redhat.com> 19 20 * docs/topics/expressions.rst (Type-coercion): Casts between 21 pointer types are valid. 22 * libgccjit.c: Document that gcc_jit_context et al are actually 23 subclasses of the gcc::jit::recording classes. 24 (RETURN_VAL_IF_FAIL): Add top-level descriptive comment. 25 (RETURN_IF_NOT_VALID_BLOCK): Likewise. 26 (RETURN_NULL_IF_NOT_VALID_BLOCK): Likewise. 27 (jit_error): Likewise. 28 (compatible_types): Likewise. 29 (gcc_jit_context_acquire): Likewise. 30 (gcc_jit_context_release): Likewise. 31 (gcc_jit_context_new_child_context): Likewise. 32 (gcc_jit_context_new_location): Likewise. 33 (gcc_jit_location_as_object): Likewise. 34 (gcc_jit_type_as_object): Likewise. 35 (gcc_jit_context_get_type): Likewise. 36 (gcc_jit_context_get_int_type): Likewise. 37 (gcc_jit_type_get_pointer): Likewise. 38 (gcc_jit_type_get_const): Likewise. 39 (gcc_jit_type_get_volatile): Likewise. 40 (gcc_jit_context_new_array_type): Likewise. Also document that 41 LOC can be NULL. Fail with an error on negative size. 42 (gcc_jit_context_new_field): Add top-level descriptive comment and 43 document that LOC can be NULL. 44 (gcc_jit_field_as_object): Add top-level descriptive comment. 45 (gcc_jit_context_new_struct_type): Likewise. Also document that 46 LOC can be NULL. 47 (gcc_jit_context_new_opaque_struct): Likewise. 48 (gcc_jit_struct_as_type): Add top-level descriptive comment. 49 (gcc_jit_struct_set_fields): Likewise. Also document that LOC can 50 be NULL. 51 (gcc_jit_context_new_union_type): Likewise. 52 (gcc_jit_context_new_function_ptr_type): Likewise. 53 (gcc_jit_context_new_param): Likewise. 54 (gcc_jit_param_as_object): Add top-level descriptive comment. 55 (gcc_jit_param_as_lvalue): Likewise. 56 (gcc_jit_param_as_rvalue): Likewise. 57 (gcc_jit_context_new_function): Likewise. Also document that LOC 58 can be NULL. 59 (gcc_jit_context_get_builtin_function): Add top-level descriptive 60 comment. 61 (gcc_jit_function_as_object): Likewise. 62 (gcc_jit_function_get_param): Likewise. 63 (gcc_jit_function_dump_to_dot): Likewise. 64 (gcc_jit_function_new_block): Likewise. 65 (gcc_jit_block_as_object): Likewise. 66 (gcc_jit_block_get_function): Likewise. 67 (gcc_jit_context_new_global): Likewise. Also document that LOC 68 can be NULL. 69 (gcc_jit_lvalue_as_object): Add top-level descriptive comment. 70 (gcc_jit_lvalue_as_rvalue): Likewise. 71 (gcc_jit_rvalue_as_object): Likewise. 72 (gcc_jit_rvalue_get_type): Likewise. 73 (RETURN_NULL_IF_FAIL_NONNULL_NUMERIC_TYPE): Likewise. 74 (gcc_jit_context_new_rvalue_from_int): Likewise. 75 (gcc_jit_context_zero): Likewise. 76 (gcc_jit_context_one): Likewise. 77 (gcc_jit_context_new_rvalue_from_double): Likewise. 78 (gcc_jit_context_new_rvalue_from_ptr): Likewise. 79 (gcc_jit_context_null): Likewise. 80 (gcc_jit_context_new_string_literal): Likewise. 81 (gcc_jit_context_new_unary_op): Likewise. Also document that LOC 82 can be NULL. 83 (gcc_jit_context_new_binary_op): Likewise. 84 (gcc_jit_context_new_comparison): Likewise. 85 (gcc_jit_context_new_call): Likewise. 86 (gcc_jit_context_new_call_through_ptr): Likewise. 87 (is_valid_cast): Add top-level descriptive comment. 88 (gcc_jit_context_new_cast): Likewise. Also document that LOC can 89 be NULL. 90 (gcc_jit_context_new_array_access): Likewise. 91 (gcc_jit_object_get_context): Add top-level descriptive comment. 92 (gcc_jit_object_get_debug_string): Likewise. 93 (gcc_jit_lvalue_access_field): Likewise. Also document that LOC can 94 be NULL. 95 (gcc_jit_rvalue_access_field): Likewise. 96 (gcc_jit_rvalue_dereference_field): Likewise. 97 (gcc_jit_rvalue_dereference): Likewise. 98 (gcc_jit_lvalue_get_address): Likewise. 99 (gcc_jit_function_new_local): Likewise. 100 (gcc_jit_block_add_eval): Likewise. 101 (gcc_jit_block_add_assignment): Likewise. 102 (gcc_jit_block_add_assignment_op): Likewise. 103 (is_bool): Add top-level descriptive comment. 104 (gcc_jit_block_end_with_conditional): Likewise. Also document 105 that LOC can be NULL. 106 (gcc_jit_block_add_comment): Likewise. 107 (gcc_jit_block_end_with_jump): Likewise. 108 (gcc_jit_block_end_with_return): Likewise. 109 (gcc_jit_block_end_with_void_return): Likewise. 110 (gcc_jit_context_set_str_option): Add top-level descriptive 111 comment. 112 (gcc_jit_context_set_int_option): Likewise. 113 (gcc_jit_context_set_bool_option): Likewise. 114 (gcc_jit_context_compile): Likewise. 115 (gcc_jit_context_dump_to_file): Likewise. 116 (gcc_jit_context_get_first_error): Likewise. 117 (gcc_jit_result_get_code): Likewise. 118 (gcc_jit_result_release): Likewise. 119 120 * libgccjit.h (gcc_jit_context_acquire): Remove FIXME from 121 comment. 122 (gcc_jit_context_get_int_type): Add comment. 123 (gcc_jit_context_new_field): Likewise. 124 (gcc_jit_context_new_struct_type): Likewise. 125 (gcc_jit_context_new_opaque_struct): Likewise. 126 (gcc_jit_struct_as_type): Likewise. 127 (gcc_jit_context_new_param): Likewise. 128 (gcc_jit_param_as_lvalue): Likewise. 129 (gcc_jit_param_as_rvalue): Likewise. 130 (enum gcc_jit_function_kind): Likewise. 131 (gcc_jit_context_new_function): Likewise. 132 (gcc_jit_context_get_builtin_function): Likewise. 133 (gcc_jit_function_get_param): Likewise. 134 1352014-11-05 David Malcolm <dmalcolm@redhat.com> 136 137 * libgccjit.c (gcc_jit_context_get_type): Verify that "type" 138 is valid immediately, rather than relying on called code. 139 (gcc_jit_context_new_function): Likewise for "kind". 140 (gcc_jit_context_new_unary_op): Likewise for "op". 141 (valid_binary_op_p): New. 142 (gcc_jit_context_new_binary_op): Verify that "op" is valid 143 immediately, rather than relying on called code. 144 (gcc_jit_context_new_comparison): Likewise. 145 (gcc_jit_block_add_assignment_op): Likewise. 146 1472014-11-05 David Malcolm <dmalcolm@redhat.com> 148 149 * libgccjit.c: Include safe-ctype.h from libiberty. 150 (IS_ASCII_ALPHA): Delete. 151 (IS_ASCII_DIGIT): Delete. 152 (IS_ASCII_ALNUM): Delete. 153 (gcc_jit_context_new_function): Replace use of IS_ASCII_ALPHA and 154 IS_ASCII_ALNUM with ISALPHA and ISALNUM respectively, from 155 libiberty. 156 1572014-10-30 David Malcolm <dmalcolm@redhat.com> 158 159 * dummy-frontend.c (jit_langhook_init): Remove some dead code. 160 1612014-10-27 David Malcolm <dmalcolm@redhat.com> 162 163 * dummy-frontend.c: Drop includes of tree-iterator.h, 164 tree-ssa-alias.h, gimple-expr.h, gimple.h, gimple-pretty-print.h. 165 * jit-playback.c: Drop includes of debug.h, langhooks.h, 166 langhooks-def.h, tree-iterator.h, gimple-expr.h, tree-ssa-alias.h, 167 gimple.h, gimple-pretty-print.h, diagnostic-core.h, dumpfile.h. 168 1692014-10-21 David Malcolm <dmalcolm@redhat.com> 170 171 * jit-recording.c: Include tm.h. Don't include function.h. 172 1732014-10-21 David Malcolm <dmalcolm@redhat.com> 174 175 * docs/_build/texinfo/libgccjit.texi: Regenerate. 176 1772014-10-21 David Malcolm <dmalcolm@redhat.com> 178 179 * docs/intro/index.rst: Drop install.rst. Add tutorial04.rst. 180 * docs/intro/install.rst: Rename to... 181 * docs/intro/tutorial01.rst: ...this, renaming old tutorial01.rst to... 182 * docs/intro/tutorial02.rst: ...this, renaming old tutorial02.rst to... 183 * docs/intro/tutorial03.rst: ...this, renaming old tutorial03.rst to... 184 * docs/intro/tutorial04.rst: ...this. 185 * docs/examples/install-hello-world.c: Rename to... 186 * docs/examples/tut01-hello-world.c: ...this. 187 * docs/examples/tut01-square.c: Rename to... 188 * docs/examples/tut02-square.c: ...this. 189 * docs/examples/tut02-sum-of-squares.c: Rename to... 190 * docs/examples/tut03-sum-of-squares.c: ...this. 191 * docs/examples/tut03-toyvm: Rename directory to... 192 * docs/examples/tut04-toyvm: ...this. 193 * docs/examples/tut04-toyvm/toyvm.c (PATH_TO_SCRIPTS): Update 194 for directory renaming. 195 1962014-10-21 David Malcolm <dmalcolm@redhat.com> 197 198 * docs/intro/install.rst ("Installation via packages"): Drop 199 this section. 200 ("Installation from source"): Drop this section, moving parts 201 of it to https://gcc.gnu.org/wiki/JIT and some others to 202 docs/internals/index.rst. 203 ("Hello world"): This section becomes the only remaining part 204 of this file. Eliminate references to pkg-config. 205 206 * docs/internals/index.rst 207 ("Using a working copy without installing every time"): Rewrite 208 as... 209 ("Working on the JIT library"): ...new section, aimed at 210 contributors (and myself) working from a build directory, 211 eliminating references to installation. Add description 212 of pertinent configuration options. 213 ("Running the test suite"): Add setting of LIBRARY_PATH to 214 description of how to run a built binary outside of the test 215 suite. 216 ("Environment variables"): New section, describing pertinent 217 environment variables. 218 2192014-10-20 David Malcolm <dmalcolm@redhat.com> 220 221 * jit-recording.c (gcc::jit::dump::dump): Handle fopen failures 222 by emitting an error on the context. 223 (gcc::jit::dump::~dump): Likewise for fclose failures. 224 (gcc::jit::dump::write): Don't attempt further work if the fopen 225 failed. Handle fwrite failures by emitting an error on the 226 context. 227 2282014-10-20 David Malcolm <dmalcolm@redhat.com> 229 230 * Make-lang.in (jit.install-common): Drop installation of 231 libgccjit.pc. 232 * config-lang.in (outputs): Drop jit/libgccjit.pc. 233 * libgccjit.pc.in: Delete. 234 2352014-10-17 David Malcolm <dmalcolm@redhat.com> 236 237 * Make-lang.in (jit): Add $(FULL_DRIVER_NAME) as a dependency, so 238 that the symlink is created for testing. 239 240 * jit-playback.c (gcc::jit::playback::context::compile): Add 241 "-fno-use-linker-plugin" when invoking the driver. Update error 242 messages to talk about the "gcc driver" rather than the 243 "gcc harness". To ease troubleshooting, add error messages giving 244 the driver name and PATH to the error-handling code that fires 245 when the driver can't be found. 246 2472014-10-07 David Malcolm <dmalcolm@redhat.com> 248 249 * docs/_build/texinfo/libgccjit.texi: Regenerate. 250 2512014-10-07 David Malcolm <dmalcolm@redhat.com> 252 253 * docs/internals/index.rst (Overview of code structure): Directly 254 include the comment from jit-common.h as rst, rather than as a 255 quoted C++ comment. 256 * jit-common.h: Convert the summary format to valid reStructured 257 text for inclusion by docs/internals/index.rst. 258 * notes.txt: Clarify where libgccjit.c, jit-recording.c and 259 jit-playback.c fit into the high-level diagram. 260 2612014-10-07 David Malcolm <dmalcolm@redhat.com> 262 263 * Make-lang.in (jit_OBJS): Drop jit/internal-api.o. 264 Add jit/jit-recording.o and jit/jit-playback.o. 265 266 * internal-api.c: Delete, moving content to new files jit-recording.c 267 and jit-playback.c. 268 * internal-api.h: Delete, moving content to new files 269 jit-common.h, jit-playback.h, jit-recording.h. 270 * jit-common.h: New file, containing the forward decls of classes 271 formerly in internal-api.h. 272 * jit-recording.c: New file, containing the gcc::jit::recording 273 code formerly in internal-api.c, and gcc::jit::dump. 274 * jit-recording.h: New file, containing the gcc::jit::recording 275 prototypes formerly in internal-api.h. 276 * jit-playback.c: New file, containing the gcc::jit::playback 277 code formerly in internal-api.c. 278 * jit-playback.h: New file, containing the gcc::jit::playback 279 prototypes formerly in internal-api.h. 280 281 * dummy-frontend.c: Don't include "internal-api.h". Add includes 282 of jit-common.h and jit-playback.h. 283 * jit-builtins.h: Replace include of internal-api.h with 284 jit-common.h. 285 * jit-builtins.c: Replace include of internal-api.h with 286 jit-common.h. Add include of jit-recording.h. 287 * libgccjit.c: Likewise. 288 289 * docs/internals/index.rst (Overview of code structure): Update 290 to reflect the above changes. 291 2922014-10-07 David Malcolm <dmalcolm@redhat.com> 293 294 * docs/internals/index.rst 295 (Using a working copy without installing): Rename to... 296 (Using a working copy without installing every time): ...this, and 297 update to reflect the need to have installed the driver binary 298 when running directly from a build directory. 299 (Running the test suite): Add PATH setting to the example. 300 * docs/intro/install.rst ("Hello world"): Likewise. 301 * internal-api.c: Include new autogenerated header 302 "gcc-driver-name.h". 303 (gcc::jit::playback::context::compile): Rather than looking for a 304 "gcc" on the path, look for GCC_DRIVER_NAME from gcc-driver-name.h, 305 as created by the configure script, so that we are using one for 306 the correct target. 307 3082014-10-02 David Malcolm <dmalcolm@redhat.com> 309 310 * Make-lang.in (jit.info): Implement. 311 (jit.install-info): Implement. 312 (jit.dvi): Implement. 313 (jit.pdf): Implement in terms of new target "jit.texinfo.pdf". 314 (jit.install-pdf): Likewise for new target 315 "jit.texinfo.install-pdf". 316 (jit.install-html): Implement in terms of 317 "jit.$(doc_build_sys).install-html" to redirect to new targets 318 "jit.sphinx.install-html" or "jit.texinfo.install-html". 319 (jit.html): Implement in terms of "jit.$(doc_build_sys).html" to 320 redirect to new targets "jit.sphinx.html" or "jit.texinfo.html". 321 (JIT_TEXI_FILES): New variable. 322 (jit.texinfo.html): New target. 323 (jit.texinfo.install-html): New target. 324 (jit.texinfo.pdf): New target. 325 (jit.texinfo.install-pdf): New target. 326 (SPHINX_BUILD_DIR): New variable. 327 (jit.sphinx.html): New target. 328 (jit_htmldir): New variable. 329 (jit.sphinx.install-html): New target. 330 (jit.sphinx.pdf): New target. 331 3322014-09-26 David Malcolm <dmalcolm@redhat.com> 333 334 * internal-api.h (gcc::jit::recording::context): Convert field 335 "m_first_error_str" from a fixed-size buffer to a pointer, and add 336 a field "m_owns_first_error_str" to determine if we're responsible 337 for freeing it. 338 * internal-api.c (gcc::jit::recording::context::context): Update 339 initializations in ctor for above change. 340 (gcc::jit::recording::context::~context): Free m_first_error_str 341 if we own it. 342 (gcc::jit::recording::context::add_error_va): When capturing the 343 first error message on a context, rather than copying "errmsg" to 344 a fixed-size buffer and truncating if oversize, simply store the 345 pointer to the error message, and flag whether we need to free it. 346 (gcc::jit::recording::context::get_first_error): Update for change 347 of "m_first_error_str" from an internal buffer to a pointer. 348 3492014-09-25 David Malcolm <dmalcolm@redhat.com> 350 351 * internal-api.c (gcc::jit::playback::context::compile): Use 352 pex_one rather than system when invoking "gcc" to go from a .s 353 file to a .so file. 354 3552014-09-25 David Malcolm <dmalcolm@redhat.com> 356 357 * internal-api.c (make_tempdir_path_template): New. 358 (gcc::jit::playback::context::compile): Call 359 make_tempdir_path_template to make m_path_template, rather than 360 hardcoding "/tmp/" within "/tmp/libgccjit-XXXXXX". 361 3622014-09-24 David Malcolm <dmalcolm@redhat.com> 363 364 * docs/internals/index.rst ("Overview of code structure"): Add 365 more descriptive text, including various fragments of 366 internal-api.h as appropriate. 367 * internal-api.h: Add marker comments for use by "literalinclude" 368 directives in docs/internals/index.rst. 369 3702014-09-24 David Malcolm <dmalcolm@redhat.com> 371 372 * dummy-frontend.c (my_walker): Rename to... 373 (my_ggc_walker): ...this. 374 (my_root_tab): Rename to... 375 (jit_root_tab): ...this. 376 (jit_langhook_init): Update for renaming of "my_root_tab" to 377 "jit_root_tab". 378 * internal-api.c: Add descriptive API comments to functions 379 throughout. 380 (mutex): Rename to... 381 (jit_mutex): ...this. 382 (gcc::jit::recording::context::compile): Update for renaming of 383 "mutex" to "jit_mutex". 384 * internal-api.h: Add descriptive API comments to functions 385 throughout. Add indentation to forward declarations of classes 386 to indicate inheritance. 387 * jit-builtins.c: Likewise. 388 3892014-09-24 David Malcolm <dmalcolm@redhat.com> 390 391 * internal-api.c (gcc::jit::dump::write): Eliminate fixed-size 392 buffer "buf" by replacing call to vsnprintf with one to vasprintf 393 and a free, emitting an error on the dump's context if a malloc 394 failure occurs. 395 (gcc::jit::recording::context::add_error_va): Likewise, using 396 a precanned message if the malloc inside vasprinf fails. Split 397 local "buf" into "malloced_msg" and "errmsg" to ensure that we 398 free the message iff we're using one malloc-ed by vasprintf. 399 (gcc::jit::recording::string::from_printf): Eliminate fixed-size 400 buffer "buf" by replacing call to vsnprintf with one to vasprintf 401 and a free, emitting an error on the relevant context if a malloc 402 failure occurs. 403 4042014-09-24 David Malcolm <dmalcolm@redhat.com> 405 406 * dummy-frontend.c: Update copyright year. Follow standard for 407 initial includes by removing redundant include of "ansidecl.h". 408 * internal-api.c: Follow standard for initial includes by removing 409 redundant include of "ansidecl.h". 410 * jit-builtins.c: Likewise. 411 * libgccjit.c: Likewise. 412 4132014-09-24 David Malcolm <dmalcolm@redhat.com> 414 415 * ChangeLog.jit: Add copyright footer. 416 * Make-lang.in: Update copyright. 417 * config-lang.in: Update copyright. 418 * docs/examples/install-hello-world.c: Add copyright header. 419 * docs/examples/tut01-square.c: Likewise. 420 * docs/examples/tut02-sum-of-squares.c: Likewise. 421 * docs/examples/tut03-toyvm/toyvm.c: Likewise. 422 * internal-api.c: Likewise. 423 * internal-api.h: Likewise. 424 * libgccjit++.h: Likewise. 425 * libgccjit.c: Likewise. 426 * libgccjit.h: Likewise. 427 * libgccjit.map: Likewise. 428 4292014-09-23 David Malcolm <dmalcolm@redhat.com> 430 431 * TODO.rst (API): Shift operators are done. 432 * docs/topics/expressions.rst (Binary): Add shift operators. 433 * internal-api.c (binary_op_strings): Likewise. 434 (gcc::jit::playback::context::new_binary_op): Likewise. 435 * libgccjit.h (enum gcc_jit_binary_op): Likewise. 436 4372014-09-23 David Malcolm <dmalcolm@redhat.com> 438 439 * TODO.rst: Rename "Initial Release" section to "API", and 440 remove completed items: builtins, docs, pkgconfig file, fuzz 441 testing. Move ability to name contexts and stmt_list per block 442 ideas to a new "Nice to have" section and note that it might be 443 better to go straight to gimple. 444 Move code coverage to "Test suite" section. 445 Add a "Probably not needed" section, moving some items to it. 446 Note that we're still missing shift operators. 447 Add idea that we could warn about unused objects in a context. 448 4492014-09-23 David Malcolm <dmalcolm@redhat.com> 450 451 * docs/examples/tut03-toyvm/toyvm.c: Include <dejagnu.h>. 452 Add missing typedef of compilation_state. 453 (toyvm_function_parse): Add "name param. 454 (test): New. 455 (CHECK_NON_NULL): New, from harness.h 456 (CHECK_VALUE): Likewise. 457 (test_script): New. 458 (PATH_TO_SCRIPTS): New define. 459 (test_suite): New. 460 (main): If called with no args, run the test suite. 461 4622014-09-23 David Malcolm <dmalcolm@redhat.com> 463 464 * docs/conf.py (__read_file): New helper function, for 465 extracting... 466 (gcc_BASEVER): New variable, read from "BASE-VER" in gcc src dir. 467 (gcc_DEVPHASE): Likewise, from file "DEV-PHASE". 468 (gcc_DATESTAMP): Likewise, from file "DATESTAMP". 469 (gcc_REVISION): Likewise, from file "REVISION" (if present). 470 (version): Rather than hardcoding this variable, extract from file 471 BASE-VER, via gcc_BASEVER local. 472 (release): Likewise, building it up from the files read above. 473 * docs/_build/texinfo/libgccjit.texi: Regenerate. 474 4752014-09-22 David Malcolm <dmalcolm@redhat.com> 476 477 * docs/intro/tutorial01.rst: Remove stray "FIXME". 478 * docs/_build/texinfo/libgccjit.texi: Regenerate. 479 4802014-09-22 David Malcolm <dmalcolm@redhat.com> 481 482 * docs/index.rst: Add internals/index.rst. 483 * docs/internals/index.rst: New. 484 * notes.txt: Update to reflect renaming of toplev_main to 485 toplev::main. 486 4872014-09-22 David Malcolm <dmalcolm@redhat.com> 488 489 * docs/_build/texinfo/libgccjit.texi: Regenerate. 490 * docs/intro/install.rst: Reduce width of listing. 491 * docs/intro/tutorial01.rst: Use <libgccjit.h> rather than 492 "libgccjit.h" when including the header. 493 * docs/intro/tutorial02.rst: Likewise. 494 * docs/intro/tutorial03.rst: Clarify various sections; show 495 effect of reducing optimization level down from 3 to 2. 496 ("Putting it all together"): Move to above... 497 ("Behind the curtain: optimizing away stack manipulation"): 498 ...this, and rename this to... 499 ("Behind the curtain: How does our code get optimized?"): ...and 500 add more detail, and discussion of elimination of tail recursion. 501 5022014-09-19 David Malcolm <dmalcolm@redhat.com> 503 504 * TODO.rst: Add detection of uninitialized variables, since 505 this bit me when developing "toyvm". 506 507 * docs/examples/tut03-toyvm/Makefile: New. 508 * docs/examples/tut03-toyvm/factorial.toy: New. 509 * docs/examples/tut03-toyvm/fibonacci.toy: New. 510 * docs/examples/tut03-toyvm/toyvm.c: New. 511 512 * docs/intro/index.rst: Add tutorial03.rst. 513 * docs/intro/tutorial01.rst: Fix example of how to dump 514 generated machine code. 515 * docs/intro/tutorial03.rst: New. 516 * docs/intro/factorial.png: New. 517 518 * docs/_build/texinfo/libgccjit.texi: Regenerate. 519 * docs/_build/texinfo/factorial.png: New (copied by sphinx from 520 docs/intro/factorial.png). 521 5222014-09-18 David Malcolm <dmalcolm@redhat.com> 523 524 * Make-lang.in (jit.install-common): Install libgccjit.pc to 525 "$(DESTDIR)/$(libdir)/pkgconfig". 526 * config-lang.in (outputs): Define this, adding jit/libgccjit.pc 527 so that it makes it into AC_CONFIG_FILES and is thus generated from 528 jit/libgccjit.pc.in at configure time. 529 * docs/intro/install.rst ("Hello world"): Add discussion about the 530 use of pkg-config when building against an install in 531 a non-standard location. 532 * docs/_build/texinfo/libgccjit.texi: Regenerate. 533 * libgccjit.pc.in: New. 534 5352014-09-18 David Malcolm <dmalcolm@redhat.com> 536 537 * docs/index.rst: Split index out into two new files... 538 * docs/intro/index.rst: New file. 539 * docs/topics/index.rst: New file. 540 * docs/_build/texinfo/libgccjit.texi: Regenerate. 541 5422014-09-18 David Malcolm <dmalcolm@redhat.com> 543 544 * docs/_build/texinfo/Makefile: New file, generated by Sphinx, by 545 running "make texinfo" in docs directory. 546 * docs/_build/texinfo/libgccjit.texi: Likewise. 547 * docs/_build/texinfo/sum-of-squares.png: Likewise. 548 5492014-09-18 David Malcolm <dmalcolm@redhat.com> 550 551 * docs/conf.py (Options for HTML output): Update html_theme from 552 "default" to "pyramid". 553 5542014-09-18 David Malcolm <dmalcolm@redhat.com> 555 556 * docs/intro/install.rst: Markup fixes. 557 * docs/intro/tutorial01.rst: Likewise. 558 * docs/intro/tutorial02.rst: Likewise. 559 * docs/topics/contexts.rst: Likewise. 560 * docs/topics/expressions.rst: Likewise. 561 * docs/topics/functions.rst: Likewise. 562 * docs/topics/locations.rst: Likewise. 563 * docs/topics/types.rst: Likewise. 564 5652014-09-18 David Malcolm <dmalcolm@redhat.com> 566 567 * docs/examples/install-hello-world.c (main): Fix missing 568 "return". 569 * docs/examples/tut01-square.c (main): Likewise. 570 * docs/examples/tut02-sum-of-squares.c (main): Likewise. 571 5722014-09-17 David Malcolm <dmalcolm@redhat.com> 573 574 * docs/Makefile: New file. 575 * docs/conf.py: New file. 576 * docs/examples/install-hello-world.c: New file. 577 * docs/examples/tut01-square.c: New file. 578 * docs/examples/tut02-sum-of-squares.c: New file. 579 * docs/index.rst: New file. 580 * docs/intro/install.rst: New file. 581 * docs/intro/sum-of-squares.png: New file. 582 * docs/intro/tutorial01.rst: New file. 583 * docs/intro/tutorial02.rst: New file. 584 * docs/topics/contexts.rst: New file. 585 * docs/topics/expressions.rst: New file. 586 * docs/topics/functions.rst: New file. 587 * docs/topics/locations.rst: New file. 588 * docs/topics/objects.rst: New file. 589 * docs/topics/results.rst: New file. 590 * docs/topics/types.rst: New file. 591 5922014-09-11 David Malcolm <dmalcolm@redhat.com> 593 594 * TODO.rst (Initial Release): Update for addition of myself as 595 maintainer. 596 5972014-09-10 David Malcolm <dmalcolm@redhat.com> 598 599 * TODO.rst (Test suite): Multithreaded test is done. 600 6012014-09-10 David Malcolm <dmalcolm@redhat.com> 602 603 * dummy-frontend.c: Fix up for the header file flattening on 604 trunk by adding includes of signop.h, tree-core.h, stor-layout.h, 605 tree-ssa-alias.h, gimple-expr.h. 606 (jit_langhook_write_globals): Update call to 607 finalize_compilation_unit to symtab->finalize_compilation_unit to 608 track change made on trunk in r214422. 609 610 * internal-api.c: Fix up for the header file flattening on trunk 611 by adding includes of gimple-expr.h, tree-ssa-alias.h, 612 stringpool.h, stor-layout.h, print-tree.h, gimplify.h. 613 (new_rvalue_from_int): Update call to real_from_integer. 614 (gcc::jit::playback::wrapper::operator new): Use 615 ggc_internal_cleared_alloc rather than 616 ggc_internal_cleared_alloc_stat. 617 (gcc::jit::playback::function::postprocess): Update call to 618 cgraph_finalize_function tocgraph_node::finalize_function. 619 (gcc::jit::playback::block::add_comment): Update call to 620 ggc_internal_alloc_stat to ggc_internal_alloc. 621 6222014-08-08 David Malcolm <dmalcolm@redhat.com> 623 624 * libgccjit.h (gcc_jit_context_new_union_type): New entrypoint. 625 (gcc_jit_lvalue_access_field): Rename first param from "struct_" 626 to "struct_or_union". 627 (gcc_jit_rvalue_access_field): Likewise. 628 629 * libgccjit.c (gcc_jit_context_new_union_type): New entrypoint. 630 631 * libgccjit.map (gcc_jit_context_new_union_type): New entrypoint. 632 633 * internal-api.h (gcc::jit::recording::compound_type): New class 634 (gcc::jit::recording::union): New class. 635 (gcc::jit::playback::struct_): Rename this class to... 636 (gcc::jit::playback::compound_type): ...this. 637 (gcc::jit::recording::context::new_union_type): New method. 638 (gcc::jit::recording::context): Rename field "m_structs" to 639 "m_compound_types", generalizing from a vec <struct_ *> to a 640 vec<compound_type *>. 641 (gcc::jit::recording::field): Update field m_container from 642 struct * to container_type *. 643 (gcc::jit::recording::field::get_container): Generalize from 644 struct_ * to container_type *. 645 (gcc::jit::recording::field::set_container): Likewise. 646 (gcc::jit::recording::compound_type): New subclass of type, to 647 be a superclass of existing class struct_ and new class union_. 648 (gcc::jit::recording::struct_::get_name): Move to... 649 (gcc::jit::recording::compound_type::get_name): ...here. 650 (gcc::jit::recording::struct_::get_loc): Move to... 651 (gcc::jit::recording::compound_type::get_loc): ...here. 652 (gcc::jit::recording::struct_::set_fields): Move to... 653 (gcc::jit::recording::compound_type::set_fields): ...here. 654 (gcc::jit::recording::struct_::dereference): Move to... 655 (gcc::jit::recording::compound_type::dereference): ...here. 656 (gcc::jit::recording::struct_::is_int): Move to... 657 (gcc::jit::recording::compound_type::is_int): ...here. 658 (gcc::jit::recording::struct_::is_float): Move to... 659 (gcc::jit::recording::compound_type::is_float): ...here. 660 (gcc::jit::recording::struct_::is_bool): Move to... 661 (gcc::jit::recording::compound_type::is_bool): ...here. 662 (gcc::jit::recording::struct_::is_pointer): Move to... 663 (gcc::jit::recording::compound_type::is_pointer): ...here. 664 (gcc::jit::recording::struct_::is_array): Move to... 665 (gcc::jit::recording::compound_type::is_array): ...here. 666 (gcc::jit::recording::struct_::playback_struct): Move to... 667 (gcc::jit::recording::compound_type::playback_compound_type): 668 ...here, renaming and updating return type. 669 (gcc::jit::recording::struct_): Inherit from compound_type, 670 rather than just type. 671 (gcc::jit::recording::fields): Update to work on compound_type * 672 rather than struct_ *, renaming "m_struct" to "m_struct_or_union". 673 (gcc::jit::recording::union): New subclass of compound_type. 674 (gcc::jit::playback::context::new_struct_type): Generalize by 675 renaming to... 676 (gcc::jit::playback::context::new_compound_type): ...this, and 677 and an "is_struct" bool param. 678 (gcc::jit::playback::struct_): Generalize by renaming class to... 679 (gcc::jit::playback::compound_type): ...this. 680 681 * internal-api.c (gcc::jit::recording::context::context): Rename 682 field "m_structs" to "m_compound_types". 683 (gcc::jit::recording::context::new_struct_type): Likewise. 684 (gcc::jit::recording::context::new_union_type): New method. 685 (gcc::jit::recording::context::dump_to_file): Field "m_structs" 686 is renamed "m_compound_types" and changes type from struct_ * 687 to compound_type *. 688 (gcc::jit::recording::compound_type::compound_type): New ctor, 689 built from old body of gcc::jit::recording::struct_::struct_. 690 (gcc::jit::recording::struct_::set_fields): Move class to... 691 (gcc::jit::recording::compound_type::set_fields): ... here. 692 (gcc::jit::recording::struct_::dereference): Move class to... 693 (gcc::jit::recording::compound_type::dereference): ...here. 694 (gcc::jit::recording::struct_::struct_): Reimplement by calling 695 base class ctor. 696 (gcc::jit::recording::struct_::replay_into): The playback hook 697 is now "new_compound_type" and adds a bool, with true for 698 "is_struct" (vs a union). 699 (gcc::jit::recording::struct_::make_debug_string): "m_name" is 700 now moved to base class and private, so use an accessor. 701 (gcc::jit::recording::union_::union_): New function. 702 (gcc::jit::recording::union_::replay_into): New function. 703 (gcc::jit::recording::union_::make_debug_string): New function. 704 (gcc::jit::recording::fields::fields): Update first param from 705 struct_ * to compound_type *, and rename field "m_struct" to 706 "m_struct_or_union". 707 (gcc::jit::recording::fields::replay_into): "m_struct" is now 708 "m_struct_or_union" and has a playback_compound_type rather 709 than a playback_struct. 710 (gcc::jit::recording::fields::write_to_dump): Update for 711 renaming of m_struct to m_struct_or_union. 712 (gcc::jit::playback::context::new_struct_type): Rename method 713 to... 714 (gcc::jit::playback::context::new_compound_type): this, 715 generalizing so that it can make unions as well as structs; the 716 underlying playback type is now called "compound_type". 717 (gcc::jit::playback::struct_::set_fields): This method's class has 718 changed name, so this is now... 719 (gcc::jit::playback::compound_type::set_fields): ...this method. 720 721 * TODO.rst: Unions are done. 722 7232014-08-08 David Malcolm <dmalcolm@redhat.com> 724 725 * TODO.rst: Function ptrs are done. 726 * internal-api.c 727 (gcc::jit::recording::context::new_function_ptr_type): New method. 728 (gcc::jit::recording::context::new_call_through_ptr): New method. 729 (gcc::jit::recording::memento_of_get_pointer::make_debug_string): 730 Add special-case handling of function pointer types. 731 (gcc::jit::recording::function_type::make_debug_string_with_ptr): 732 New method. 733 (gcc::jit::recording::function_type::make_debug_string): 734 Reimplement in terms of... 735 (gcc::jit::recording::function_type::make_debug_string_with): New 736 method, based on make_debug_string, but allowing for arbitrary 737 text between the return type and the parameters. 738 (gcc::jit::recording::call_through_ptr::call_through_ptr): New 739 method. 740 (gcc::jit::recording::call_through_ptr::replay_into): New method. 741 (gcc::jit::recording::call_through_ptr::make_debug_string): New 742 method. 743 (gcc::jit::playback::context::new_call): Reimplement in terms of... 744 (gcc::jit::playback::context::build_call): New method, using parts 745 of old implementation of new_call, so that we can share this 746 with... 747 (gcc::jit::playback::context::new_call_through_ptr): New method. 748 * internal-api.h 749 (gcc::jit::recording::context::new_function_ptr_type): New method. 750 (gcc::jit::recording::context::new_call_through_ptr): New method. 751 (gcc::jit::recording::type::dyn_cast_function_type): New method. 752 (gcc::jit::recording::function_type::dyn_cast_function_type): New 753 method. 754 (gcc::jit::recording::function_type::make_debug_string_with_ptr): 755 New method. 756 (gcc::jit::recording::function_type::make_debug_string_with): New 757 method. 758 (gcc::jit::recording::call_through_ptr): New subclass of rvalue. 759 (gcc::jit::playback::context::new_call_through_ptr): New method. 760 (gcc::jit::playback::context::build_call): New method. 761 * libgccjit.c (gcc_jit_context_new_function_ptr_type): New 762 function. 763 (gcc_jit_context_new_call_through_ptr): New function. 764 * libgccjit.h (gcc_jit_context_new_function_ptr_type): New 765 function. 766 (gcc_jit_context_new_call_through_ptr): New function. 767 * libgccjit.map (gcc_jit_context_new_call_through_ptr): New function. 768 (gcc_jit_context_new_function_ptr_type): New function. 769 7702014-07-25 David Malcolm <dmalcolm@redhat.com> 771 772 * TODO.rst (error-checking): Remove various items that either 773 already were implemented, or are implemented by this commit. 774 * internal-api.h (gcc::jit::recording::type::is_numeric): New. 775 * libgccjit.c (RETURN_NULL_IF_FAIL_NONNULL_NUMERIC_TYPE): New macro. 776 (gcc_jit_context_new_rvalue_from_int): Verify that numeric_type is 777 indeed numeric. 778 (gcc_jit_context_zero): Likewise. 779 (gcc_jit_context_one): Likewise. 780 (gcc_jit_context_new_rvalue_from_double): Likewise. 781 (gcc_jit_context_new_array_access): Likewise for type of "index". 782 7832014-07-14 David Malcolm <dmalcolm@redhat.com> 784 785 * internal-api.c (gcc::jit::recording::context::new_array_type): 786 Reject attempts to create an array of a struct if the fields of 787 the struct haven't yet been set. 788 * internal-api.h (gcc::jit::recording::type::dyn_cast_struct): New 789 virtual function. 790 (gcc::jit::recording::struct_::dyn_cast_struct): New, overriding 791 for this subclass. 792 (gcc::jit::recording::struct_::get_name): New. 793 7942014-05-07 David Malcolm <dmalcolm@redhat.com> 795 796 * Make-lang.in (LIBGCCJIT_LINKER_NAME): New. 797 (LIBGCCJIT_VERSION_NUM): New. 798 (LIBGCCJIT_MINOR_NUM): New. 799 (LIBGCCJIT_RELEASE_NUM): New. 800 (LIBGCCJIT_SONAME): New. 801 (LIBGCCJIT_FILENAME): New. 802 (LIBGCCJIT_LINKER_NAME_SYMLINK): New. 803 (LIBGCCJIT_SONAME_SYMLINK): New. 804 (jit): Add symlink targets. 805 (libgccjit.so): Convert to... 806 (LIBGCCJIT_FILENAME): ...and add a soname. 807 (jit.install-common): Install the library with a soname, and 808 symlinks. Install libgccjit++.h. 809 8102014-04-25 David Malcolm <dmalcolm@redhat.com> 811 812 * internal-api.c (gcc::jit::playback::context::compile): Put 813 any output of dlerror through the add_error method, rather 814 than merely printing it to stderr, so that the error is also 815 recorded on the context. 816 8172014-03-19 Tom Tromey <tromey@redhat.com> 818 819 * internal-api.c (compile): Use auto_timevar. 820 8212014-03-19 Tom Tromey <tromey@redhat.com> 822 823 * internal-api.c (compile): Use toplev, not toplev_options. 824 Simplify. 825 8262014-03-19 David Malcolm <dmalcolm@redhat.com> 827 828 * internal-api.c (gcc::jit::recording::context::add_error_va): 829 Rename local "progname" to "ctxt_progname" to avoid shadowing 830 the related global, for clarity. 831 (gcc::jit::playback::context::compile): Likewise. 832 8332014-03-19 David Malcolm <dmalcolm@redhat.com> 834 835 * internal-api.c (gcc::jit::recording::memento_of_get_pointer:: 836 accepts_writes_from): Accept writes from pointers, but not arrays. 837 838 * internal-api.h (gcc::jit::recording::type::is_pointer): New. 839 (gcc::jit::recording::type::is_array): New. 840 (gcc::jit::recording::memento_of_get_type::accepts_writes_from): 841 Allow (void *) to accept writes of pointers, but not arrays. 842 (gcc::jit::recording::memento_of_get_type::is_pointer): New. 843 (gcc::jit::recording::memento_of_get_type::is_array): New. 844 (gcc::jit::recording::memento_of_get_pointer::is_pointer): New. 845 (gcc::jit::recording::memento_of_get_pointer::is_array): New. 846 (gcc::jit::recording::memento_of_get_const::is_pointer): New. 847 (gcc::jit::recording::memento_of_get_const::is_array): New. 848 (gcc::jit::recording::memento_of_get_volatile::is_pointer): New. 849 (gcc::jit::recording::memento_of_get_volatile::is_array): New. 850 (gcc::jit::recording::array_type::is_pointer): New. 851 (gcc::jit::recording::array_type::is_array): New. 852 (gcc::jit::recording::function_type::is_pointer): New. 853 (gcc::jit::recording::function_type::is_array): New. 854 (gcc::jit::recording::struct_::is_pointer): New. 855 (gcc::jit::recording::struct_::is_array): New. 856 857 * libgccjit.c (gcc_jit_context_new_rvalue_from_ptr): Require the 858 pointer_type to be a pointer, not an array. 859 (gcc_jit_context_null): Likewise. 860 (is_valid_cast): Require pointer casts to be between pointer types, 861 not arrays. 862 (gcc_jit_context_new_array_access): Update error message from "not 863 a pointer" to "not a pointer or array". 864 (gcc_jit_rvalue_dereference_field): Require the pointer arg to be 865 of pointer type, not an array. 866 (gcc_jit_rvalue_dereference): Likewise. 867 8682014-03-14 David Malcolm <dmalcolm@redhat.com> 869 870 * libgccjit.c (is_valid_cast): Permit casts between pointer types. 871 872 * internal-api.c (convert): Report more information if this ever 873 occurs, and make the error occur on the playback context, so that 874 it makes the gcc_jit_result be NULL. 875 (gcc::jit::playback::context::build_cast): Handle pointers. Report 876 more information if an unhandlable cast reaches here. 877 8782014-03-13 David Malcolm <dmalcolm@redhat.com> 879 880 * libgccjit.c (is_valid_cast): New. 881 (gcc_jit_context_new_cast): Check for compatible types. 882 883 * internal-api.c (gcc::jit::recording::memento_of_get_type:: 884 is_int): New. 885 (gcc::jit::recording::memento_of_get_type::is_float): New. 886 (gcc::jit::recording::memento_of_get_type::is_bool): New. 887 888 * internal-api.h (gcc::jit::recording::type::is_int): New. 889 (gcc::jit::recording::type::is_float): New. 890 (gcc::jit::recording::type::is_bool): New. 891 892 (gcc::jit::recording::memento_of_get_type::is_int): New. 893 (gcc::jit::recording::memento_of_get_type::is_float): New. 894 (gcc::jit::recording::memento_of_get_type::is_bool): New. 895 896 (gcc::jit::recording::memento_of_get_pointer::is_int): New. 897 (gcc::jit::recording::memento_of_get_pointer::is_float): New. 898 (gcc::jit::recording::memento_of_get_pointer::is_bool): New. 899 900 (gcc::jit::recording::memento_of_get_const::is_int): New. 901 (gcc::jit::recording::memento_of_get_const::is_float): New. 902 (gcc::jit::recording::memento_of_get_const::is_bool): New. 903 904 (gcc::jit::recording::memento_of_get_volatile::is_int): New. 905 (gcc::jit::recording::memento_of_get_volatile::is_float): New. 906 (gcc::jit::recording::memento_of_get_volatile::is_bool): New. 907 908 (gcc::jit::recording::array_type::is_int): New. 909 (gcc::jit::recording::array_type::is_float): New. 910 (gcc::jit::recording::array_type::is_bool): New. 911 912 (gcc::jit::recording::function_type::is_int): New. 913 (gcc::jit::recording::function_type::is_float): New. 914 (gcc::jit::recording::function_type::is_bool): New. 915 916 (gcc::jit::recording::struct_::is_int): New. 917 (gcc::jit::recording::struct_::is_float): New. 918 (gcc::jit::recording::struct_::is_bool): New. 919 9202014-03-13 David Malcolm <dmalcolm@redhat.com> 921 922 * internal-api.c (gcc::jit::recording::context::set_str_option): 923 Provide NULL recording::location to add_error. 924 (gcc::jit::recording::context::set_int_option): Likewise. 925 (gcc::jit::recording::context::set_bool_option): Likewise. 926 (gcc::jit::playback::context::compile): Likewise. 927 (gcc::jit::recording::context::add_error): Add recording::location 928 param. 929 (gcc::jit::recording::context::add_error_va): Likewise; print it 930 when present; add "error: " to stderr messages. 931 (gcc::jit::recording::location::replay_into): Provide 932 recording::location to the playback::location. 933 934 (gcc::jit::recording::function::validate): Add locations to the 935 add_error invocations. 936 (gcc::jit::recording::block::validate): Likewise. 937 (gcc::jit::playback::context::get_type): Likewise. 938 (gcc::jit::playback::context::new_unary_op): Likewise. 939 (gcc::jit::playback::context::new_binary_op): Likewise. 940 (gcc::jit::playback::context::new_comparison): Likewise. 941 942 (gcc::jit::recording::block::get_loc): New. 943 (gcc::jit::recording::block::get_first_statement): New. 944 945 (gcc::jit::playback::context::build_cast): Pass in higher-level 946 arguments in the hope of eventually providing better error 947 messages when a cast isn't possible. 948 (gcc::jit::playback::context::new_cast): As above. 949 950 (gcc::jit::playback::context::add_error): Add playback::location 951 parameter, using it to provide the corresponding 952 recording::location (if any) when reporting the error to the 953 recording::context. 954 (gcc::jit::playback::context::add_error_va): Likewise. 955 (gcc::jit::playback::context::new_location): Likewise. 956 (gcc::jit::playback::source_line::get_location): Likewise. 957 (gcc::jit::playback::location::location): Likewise. 958 959 * internal-api.h (gcc::jit::recording::context::add_error): Add 960 recording::location param. 961 (gcc::jit::recording::context::add_error_va): Likewise. 962 963 (gcc::jit::recording::context::errors_occurred): Also consider 964 errors that occur on a parent or ancestor context, recursively. 965 966 (gcc::jit::recording::block::get_loc): New. 967 (gcc::jit::recording::block::get_first_statement): New. 968 (gcc::jit::recording::statement::get_loc): New. 969 970 (gcc::jit::playback::context::new_location): Add recording::location 971 parameter. 972 973 (gcc::jit::playback::context::add_error): Add playback::location 974 parameter. 975 (gcc::jit::playback::context::add_error_va): Likewise. 976 977 (gcc::jit::playback::context::build_cast): Pass in higher-level 978 arguments in the hope of eventually providing better error 979 messages when a cast isn't possible. 980 981 (gcc::jit::playback::source_line::get_location): Add 982 recording::location parameter. 983 (gcc::jit::playback::location::location): Likewise. 984 (gcc::jit::playback::location::get_recording_loc): New. 985 (gcc::jit::playback::location::m_recording_loc): New. 986 987 * jit-builtins.c (gcc::jit::builtins_manager::get_builtin_function): 988 Provide NULL recording::location to add_error. 989 (gcc::jit::builtins_manager::make_primitive_type): Likewise. 990 991 * libgccjit.c (RETURN_VAL_IF_FAIL): Add location argument. 992 (RETURN_VAL_IF_FAIL_PRINTF1): Likewise. 993 (RETURN_VAL_IF_FAIL_PRINTF2): Likewise. 994 (RETURN_VAL_IF_FAIL_PRINTF3): Likewise. 995 (RETURN_VAL_IF_FAIL_PRINTF4): Likewise. 996 (RETURN_VAL_IF_FAIL_PRINTF6): Likewise. 997 (RETURN_NULL_IF_FAIL): Likewise. 998 (RETURN_NULL_IF_FAIL_PRINTF1): Likewise. 999 (RETURN_NULL_IF_FAIL_PRINTF2): Likewise. 1000 (RETURN_NULL_IF_FAIL_PRINTF3): Likewise. 1001 (RETURN_NULL_IF_FAIL_PRINTF4): Likewise. 1002 (RETURN_NULL_IF_FAIL_PRINTF6): Likewise. 1003 (RETURN_IF_FAIL): Likewise. 1004 (RETURN_IF_FAIL_PRINTF1): Likewise. 1005 (RETURN_IF_FAIL_PRINTF2): Likewise. 1006 (RETURN_IF_FAIL_PRINTF4): Likewise. 1007 (RETURN_IF_NOT_VALID_BLOCK): Likewise. 1008 (RETURN_NULL_IF_NOT_VALID_BLOCK): Likewise. 1009 1010 (jit_error): Likewise. 1011 1012 (gcc_jit_location_as_object): Provided location argument to 1013 error-handling macros. 1014 (gcc_jit_type_as_object): Likewise. 1015 (gcc_jit_context_get_type): Likewise. 1016 (gcc_jit_context_get_int_type): Likewise. 1017 (gcc_jit_type_get_pointer): Likewise. 1018 (gcc_jit_type_get_const): Likewise. 1019 (gcc_jit_type_get_volatile): Likewise. 1020 (gcc_jit_context_new_array_type): Likewise. 1021 (gcc_jit_context_new_field): Likewise. 1022 (gcc_jit_context_new_struct_type): Likewise. 1023 (gcc_jit_context_new_opaque_struct): Likewise. 1024 (gcc_jit_struct_as_type): Likewise. 1025 (gcc_jit_struct_set_fields): Likewise. 1026 (gcc_jit_context_new_param): Likewise. 1027 (gcc_jit_param_as_object): Likewise. 1028 (gcc_jit_param_as_lvalue): Likewise. 1029 (gcc_jit_param_as_rvalue): Likewise. 1030 (gcc_jit_context_new_function): Likewise. 1031 (gcc_jit_context_get_builtin_function): Likewise. 1032 (gcc_jit_function_as_object): Likewise. 1033 (gcc_jit_function_get_param): Likewise. 1034 (gcc_jit_function_dump_to_dot): Likewise. 1035 (gcc_jit_function_new_block): Likewise. 1036 (gcc_jit_block_as_object): Likewise. 1037 (gcc_jit_block_get_function): Likewise. 1038 (gcc_jit_context_new_global): Likewise. 1039 (gcc_jit_lvalue_as_object): Likewise. 1040 (gcc_jit_lvalue_as_rvalue): Likewise. 1041 (gcc_jit_rvalue_as_object): Likewise. 1042 (gcc_jit_rvalue_get_type): Likewise. 1043 (gcc_jit_context_new_rvalue_from_int): Likewise. 1044 (gcc_jit_context_zero): Likewise. 1045 (gcc_jit_context_one): Likewise. 1046 (gcc_jit_context_new_rvalue_from_double): Likewise. 1047 (gcc_jit_context_new_rvalue_from_ptr): Likewise. 1048 (gcc_jit_context_null): Likewise. 1049 (gcc_jit_context_new_string_literal): Likewise. 1050 (gcc_jit_context_new_unary_op): Likewise. 1051 (gcc_jit_context_new_binary_op): Likewise. 1052 (gcc_jit_context_new_comparison): Likewise. 1053 (gcc_jit_context_new_call): Likewise. 1054 (gcc_jit_context_new_cast): Likewise. 1055 (gcc_jit_context_new_array_access): Likewise. 1056 (gcc_jit_object_get_context): Likewise. 1057 (gcc_jit_object_get_debug_string): Likewise. 1058 (gcc_jit_lvalue_access_field): Likewise. 1059 (gcc_jit_rvalue_access_field): Likewise. 1060 (gcc_jit_rvalue_dereference_field): Likewise. 1061 (gcc_jit_rvalue_dereference_field): Likewise. 1062 (gcc_jit_rvalue_dereference): Likewise. 1063 (gcc_jit_lvalue_get_address): Likewise. 1064 (gcc_jit_function_new_local): Likewise. 1065 (gcc_jit_block_add_eval): Likewise. 1066 (gcc_jit_block_add_assignment): Likewise. 1067 (gcc_jit_block_add_assignment_op): Likewise. 1068 (gcc_jit_block_end_with_conditional): Likewise. 1069 (gcc_jit_block_add_comment): Likewise. 1070 (gcc_jit_block_end_with_jump): Likewise. 1071 (gcc_jit_block_end_with_return): Likewise. 1072 (gcc_jit_block_end_with_void_return): Likewise. 1073 (gcc_jit_context_set_str_option): Likewise. 1074 (gcc_jit_context_set_int_option): Likewise. 1075 (gcc_jit_context_set_bool_option): Likewise. 1076 (gcc_jit_context_compile): Likewise. 1077 (gcc_jit_context_dump_to_file): Likewise. 1078 (gcc_jit_context_get_first_error): Likewise. 1079 (gcc_jit_result_get_code): Likewise. 1080 (gcc_jit_result_get_code): Likewise. 1081 (gcc_jit_result_release): Likewise. 1082 10832014-03-10 David Malcolm <dmalcolm@redhat.com> 1084 1085 * libgccjit++.h (gccjit::context::new_rvalue): Make these 1086 methods const. 1087 (gccjit::context::zero): Likewise. 1088 (gccjit::context::one): Likewise. 1089 (gccjit::function::get_param): Likewise. 1090 10912014-03-10 David Malcolm <dmalcolm@redhat.com> 1092 1093 * libgccjit++.h (gccjit::error): New class, for exceptions. 1094 (gccjit::context::get_inner_context): New accessor, so that we 1095 can... 1096 (gccjit::context::m_inner_ctxt): Make private. 1097 (gccjit::context::context): Throw a gccjit::error if a NULL 1098 context is passed in. 1099 (gccjit::context::compile): Throw a gccjit::error if a NULL 1100 result is returned from the C API, which indicates an error. 1101 (gccjit::object::object): Throw a gccjit::error if a NULL 1102 object is passed in, since that indicates that an error has 1103 occurred. 1104 (gccjit::location::location): In the default ctor, call the 1105 base class default ctor rather than passing in a NULL to the 1106 single-argument ctor, since the latter now indicates an error 1107 has occurred at the C API level. 1108 (gccjit::field::field): Likewise. 1109 (gccjit::type::type): Likewise. 1110 (gccjit::function::function): Likewise. 1111 (gccjit::block::block): Likewise. 1112 (gccjit::rvalue::rvalue): Likewise. 1113 11142014-03-07 David Malcolm <dmalcolm@redhat.com> 1115 1116 * libgccjit.h (enum gcc_jit_function_kind): Add 1117 GCC_JIT_FUNCTION_ALWAYS_INLINE. 1118 * internal-api.c (gcc::jit::recording::function::write_to_dump): 1119 Handle GCC_JIT_FUNCTION_ALWAYS_INLINE. 1120 (gcc::jit::playback::context::new_function): Likewise. 1121 (gcc::jit::playback::context::postprocess): Handle 1122 GCC_JIT_FUNCTION_INTERNAL and GCC_JIT_FUNCTION_ALWAYS_INLINE by 1123 clearing DECL_EXTERNAL and TREE_PUBLIC. Doing so fixes the 1124 "undefined symbol" bug seen with GCC_JIT_FUNCTION_INTERNAL. 1125 * TODO.rst: Update. 1126 11272014-03-07 David Malcolm <dmalcolm@redhat.com> 1128 1129 * libgccjit++.h (gccjit::context::new_global): New. 1130 11312014-03-07 David Malcolm <dmalcolm@redhat.com> 1132 1133 * internal-api.c (gcc::jit::playback::context::handle_locations): 1134 Add a disabled call to line_table_dump, in case it's handy for 1135 debugging in the future. 1136 (gcc::jit::playback::context::set_tree_location): Assert that 1137 the location is non-NULL. 1138 (gcc::jit::playback::location::location): Initialize m_src_loc 1139 to UNKNOWN_LOCATION. This field should always be overwritten by 1140 handle_locations before use, but given recent issues with bogus 1141 locations it seems safer to initialize it. 1142 11432014-03-06 David Malcolm <dmalcolm@redhat.com> 1144 1145 * internal-api.c (gcc::jit::recording::context:: 1146 disassociate_from_playback): Recursively visit parent contexts. 1147 11482014-03-05 David Malcolm <dmalcolm@redhat.com> 1149 1150 * libgccjit.h (gcc_jit_function_dump_to_dot): New. 1151 * libgccjit.map (gcc_jit_function_dump_to_dot): New. 1152 * libgccjit++.h (gccjit::function::dump_to_dot): New. 1153 * libgccjit.c (gcc_jit_function_dump_to_dot): New. 1154 * internal-api.h (gcc::jit::recording::function::dump_to_dot): New. 1155 (gcc::jit::recording::block::block): Add m_index member. 1156 (gcc::jit::recording::block::dump_to_dot): New. 1157 (gcc::jit::recording::block::dump_edges_to_dot): New. 1158 * internal-api.c (gcc::jit::recording::function::new_block): Give 1159 each block an index. 1160 (gcc::jit::recording::function::dump_to_dot): New. 1161 (gcc::jit::recording::block::dump_to_dot): New. 1162 (gcc::jit::recording::block::dump_edges_to_dot): New. 1163 11642014-03-04 David Malcolm <dmalcolm@redhat.com> 1165 1166 * internal-api.c (gcc::jit::recording::memento_of_get_pointer:: 1167 accepts_writes_from): Avoid segfaulting when the argument is not 1168 of pointer type. 1169 * internal-api.h (gcc::jit::recording::accepts_writes_from): Add 1170 an assertion. 1171 * libgccjit.c (gcc_jit_context_new_comparison): Strip away const 1172 and volatile when comparing input types. 1173 11742014-03-04 David Malcolm <dmalcolm@redhat.com> 1175 1176 * libgccjit.h (gcc_jit_type_get_volatile): New. 1177 * libgccjit.map (gcc_jit_type_get_volatile): New. 1178 * libgccjit.c (gcc_jit_type_get_volatile): New. 1179 * libgccjit++.h (gccjit::type::get_volatile): New. 1180 * internal-api.c (gcc::jit::recording::type::get_volatile): New. 1181 (gcc::jit::recording::memento_of_get_volatile::replay_into): New. 1182 (gcc::jit::recording::memento_of_get_volatile::make_debug_string): New. 1183 * internal-api.h (gcc::jit::recording::type::get_volatile): New. 1184 (gcc::jit::recording::type::accepts_writes_from): Strip off 1185 qualifiers such as "const" and "volatile" from the source type. 1186 (gcc::jit::recording::memento_of_get_volatile): New class. 1187 (gcc::jit::playback::type::get_volatile): New. 1188 * TODO.rst: Update. 1189 11902014-03-03 David Malcolm <dmalcolm@redhat.com> 1191 1192 * libgccjit++.h (gccjit::function::operator()): Add overload for 1193 a call with 3 arguments. 1194 (gccjit::block::add_call): Likewise for 4 arguments. 1195 (gccjit::rvalue::cast_to): New method. 1196 (gccjit::rvalue::operator[]): New methods. 1197 11982014-02-28 David Malcolm <dmalcolm@redhat.com> 1199 1200 * libgccjit.c (gcc_jit_context_new_binary_op): Check that the 1201 operands have the same type. 1202 (gcc_jit_context_new_comparison): Likewise. 1203 12042014-02-28 David Malcolm <dmalcolm@redhat.com> 1205 1206 * libgccjit.h (gcc_jit_context_new_cast): New. 1207 * libgccjit.map (gcc_jit_context_new_cast): New. 1208 * libgccjit++.h (gccjit::context::new_cast): New method. 1209 * libgccjit.c (gcc_jit_context_new_cast): New. 1210 1211 * internal-api.h (gcc::jit::recording::context::new_cast): New method. 1212 (gcc::jit::recording::cast): New subclass of rvalue. 1213 (gcc::jit::playback::context::new_cast): New method. 1214 (gcc::jit::playback::context::build_cast): New method. 1215 1216 * internal-api.c (convert): New. 1217 (gcc::jit::recording::context::new_cast): New. 1218 (gcc::jit::recording::cast::replay_into): New. 1219 (gcc::jit::recording::cast::make_debug_string): New. 1220 (gcc::jit::playback::context::build_cast): New. 1221 (gcc::jit::playback::context::new_cast): New. 1222 1223 * TODO.rst: Update. 1224 12252014-02-28 David Malcolm <dmalcolm@redhat.com> 1226 1227 * libgccjit.h (gcc_jit_block_get_function): New. 1228 * libgccjit.map (gcc_jit_block_get_function): New. 1229 * libgccjit++.h (gccjit::block::get_function): New method. 1230 * libgccjit.c (gcc_jit_block_get_function): New. 1231 12322014-02-27 David Malcolm <dmalcolm@redhat.com> 1233 1234 * libgccjit.h (gcc_jit_label): Delete in favor of... 1235 (gcc_jit_block): New type. 1236 (gcc_jit_loop): Delete. 1237 1238 (gcc_jit_function_new_forward_label): Delete in favor of... 1239 (gcc_jit_function_new_block): New. 1240 1241 (gcc_jit_label_as_object): Delete in favor of... 1242 (gcc_jit_block_as_object): New. 1243 1244 (gcc_jit_function_add_eval): Delete in favor of... 1245 (gcc_jit_block_add_eval): New. 1246 1247 (gcc_jit_function_add_assignment): Delete in favor of... 1248 (gcc_jit_block_add_assignment): New. 1249 1250 (gcc_jit_function_add_assignment_op): Delete in favor of... 1251 (gcc_jit_block_add_assignment_op): New. 1252 1253 (gcc_jit_function_add_comment): Delete in favor of... 1254 (gcc_jit_block_add_comment): New. 1255 1256 (gcc_jit_label_as_object): Delete in favor of... 1257 (gcc_jit_block_as_object): New. 1258 1259 (gcc_jit_function_add_conditional): Delete in favor of... 1260 (gcc_jit_block_end_with_conditional): New. 1261 1262 (gcc_jit_function_add_jump): Delete in favor of... 1263 (gcc_jit_block_end_with_jump): New. 1264 1265 (gcc_jit_function_add_return): Delete in favor of... 1266 (gcc_jit_block_end_with_return): New. 1267 1268 (gcc_jit_function_add_void_return): Delete in favor of... 1269 (gcc_jit_block_end_with_void_return): New. 1270 1271 (gcc_jit_function_new_loop): Delete. 1272 (gcc_jit_function_new_loop_over_range): Delete. 1273 (gcc_jit_loop_as_object): Delete. 1274 (gcc_jit_loop_end): Delete. 1275 1276 * libgccjit.map (gcc_jit_function_add_assignment): Delete in favor of... 1277 (gcc_jit_block_add_assignment): New. 1278 1279 (gcc_jit_function_add_assignment_op): Delete in favor of... 1280 (gcc_jit_block_add_assignment_op): New. 1281 1282 (gcc_jit_function_add_comment): Delete in favor of... 1283 (gcc_jit_block_add_comment): New. 1284 1285 (gcc_jit_function_add_eval): Delete in favor of... 1286 (gcc_jit_block_add_eval): New. 1287 1288 (gcc_jit_label_as_object): Delete in favor of... 1289 (gcc_jit_block_as_object): New. 1290 1291 (gcc_jit_function_add_conditional): Delete in favor of... 1292 (gcc_jit_block_end_with_conditional): New. 1293 1294 (gcc_jit_function_add_jump): Delete in favor of... 1295 (gcc_jit_block_end_with_jump): New. 1296 1297 (gcc_jit_function_add_return): Delete in favor of... 1298 (gcc_jit_block_end_with_return): New. 1299 1300 (gcc_jit_function_add_void_return): Delete in favor of... 1301 (gcc_jit_block_end_with_void_return): New. 1302 1303 (gcc_jit_function_add_label): Delete in favor of... 1304 (gcc_jit_function_new_block): New. 1305 (gcc_jit_function_new_forward_label): Delete. 1306 (gcc_jit_function_place_forward_label): Delete. 1307 1308 (gcc_jit_function_new_loop): Delete. 1309 (gcc_jit_function_new_loop_over_range): Delete. 1310 (gcc_jit_loop_as_object): Delete. 1311 (gcc_jit_loop_end): Delete. 1312 1313 * libgccjit.c (gcc_jit_label): Delete in favor of... 1314 (gcc_jit_block): New type. 1315 (gcc_jit_loop): Delete. 1316 1317 (RETURN_IF_NOT_FUNC_DEFINITION): Delete in favor of... 1318 (RETURN_IF_NOT_VALID_BLOCK): New macro. 1319 (RETURN_NULL_IF_NOT_FUNC_DEFINITION): Delete in favor of... 1320 (RETURN_NULL_IF_NOT_VALID_BLOCK): New macro. 1321 1322 (gcc_jit_function_new_forward_label): Delete in favor of... 1323 (gcc_jit_function_new_block): New. 1324 1325 (gcc_jit_label_as_object): Delete in favor of... 1326 (gcc_jit_block_as_object): New. 1327 1328 (gcc_jit_rvalue_dereference_field): Ensure that field has been 1329 placed. 1330 1331 (gcc_jit_function_add_label): Delete 1332 (gcc_jit_function_place_forward_label): Delete. 1333 1334 (gcc_jit_function_add_eval): Delete in favor of... 1335 (gcc_jit_block_add_eval): New. 1336 1337 (gcc_jit_function_add_assignment): Delete in favor of... 1338 (gcc_jit_block_add_assignment): New. 1339 1340 (gcc_jit_function_add_assignment_op): Delete in favor of... 1341 (gcc_jit_block_add_assignment_op): New. 1342 1343 (gcc_jit_function_add_conditional): Delete in favor of... 1344 (gcc_jit_block_end_with_conditional): New. 1345 1346 (gcc_jit_function_add_comment): Delete in favor of... 1347 (gcc_jit_block_add_comment): New. 1348 1349 (gcc_jit_function_add_jump): Delete in favor of... 1350 (gcc_jit_block_end_with_jump): New. 1351 1352 (gcc_jit_function_add_return): Delete in favor of... 1353 (gcc_jit_block_end_with_return): New. 1354 1355 (gcc_jit_function_add_void_return): Delete in favor of... 1356 (gcc_jit_block_end_with_void_return): New. 1357 1358 (gcc_jit_function_new_loop): Delete. 1359 (gcc_jit_function_new_loop_over_range): Delete. 1360 (gcc_jit_loop_as_object): Delete. 1361 (gcc_jit_loop_end): Delete. 1362 1363 * internal-api.h (gcc::jit::recording::label): Delete class in 1364 favor of... 1365 (gcc::jit::recording::block): New class. 1366 (gcc::jit::recording::loop): Delete class. 1367 (gcc::jit::recording::loop_end): Delete class. 1368 1369 (gcc::jit::playback::label): Delete class in favor of... 1370 (gcc::jit::playback::block): New class. 1371 1372 (gcc::jit::playback::loop): Delete class. 1373 1374 (gcc::jit::recording::playback_label): Delete function in favor of... 1375 (gcc::jit::recording::playback_block): New function. 1376 1377 (gcc::jit::recording::context::validate): New. 1378 1379 (gcc::jit::recording::function::new_forward_label): Delete method. 1380 (gcc::jit::recording::function::add_eval): Delete method in favor 1381 of method of new gcc::jit::recording::block class. 1382 (gcc::jit::recording::function::add_assignment): Likewise. 1383 (gcc::jit::recording::function::add_assignment_op): Likewise. 1384 (gcc::jit::recording::function::add_comment): Likewise. 1385 (gcc::jit::recording::function::add_conditional): Likewise. 1386 (gcc::jit::recording::function::place_forward_label): Likewise. 1387 (gcc::jit::recording::function::add_jump): Likewise. 1388 (gcc::jit::recording::function::add_return): Likewise. 1389 1390 (gcc::jit::recording::function::add_label): Delete method in favor of... 1391 (gcc::jit::recording::function::new_block): New method. 1392 1393 (gcc::jit::recording::function::new_loop): Delete method. 1394 1395 (gcc::jit::recording::function::validate): New method. 1396 (gcc::jit::recording::function::m_activity): Delete field in favor of... 1397 (gcc::jit::recording::function::m_blocks): New field. 1398 1399 (gcc::jit::recording::statement::get_successor_blocks): New method. 1400 (gcc::jit::recording::statement::write_to_dump): Make public. 1401 (gcc::jit::recording::statement::statement): Accept a block rather 1402 than a function. 1403 (gcc::jit::recording::statement::playback_function): Delete. 1404 (gcc::jit::recording::statement::get_block): New. 1405 (gcc::jit::recording::statement::m_func): Delete in favor of... 1406 (gcc::jit::recording::statement::m_block): ...this. 1407 1408 (gcc::jit::recording::eval::eval): Accept a block rather than a 1409 function. 1410 (gcc::jit::recording::assignment::assignment): Likewise. 1411 (gcc::jit::recording::assignment_op::assignment_op): Likewise. 1412 (gcc::jit::recording::comment::comment): Likewise. 1413 (gcc::jit::recording::return::return): Likewise. 1414 (gcc::jit::recording::conditional::conditional): Likewise; accept 1415 blocks rather than labels. 1416 (gcc::jit::recording::jump::jump): Likewise. 1417 (gcc::jit::recording::conditional::get_successor_blocks): New. 1418 (gcc::jit::recording::jump::get_successor_blocks): New. 1419 1420 (gcc::jit::playback::function::new_forward_label): Delete method 1421 in favor of... 1422 (gcc::jit::playback::function::new_block): New method. 1423 (gcc::jit::playback::function::build_stmt_list): New method. 1424 (gcc::jit::playback::function::m_blocks): New field. 1425 1426 * libgccjit++.h (gccjit::label): Delete class in favor of... 1427 (gccjit::block): New class. 1428 (gccjit::function::new_forward_label): Delete methods in favor of... 1429 (gccjit::function::new_block): New methods. 1430 (gccjit::function::add_comment): Delete methods in favor of methods 1431 of new class gccjit::block. 1432 (gccjit::function::add_conditional): Likewise. 1433 (gccjit::function::add_label): Likewise. 1434 (gccjit::function::place_forward_label): Likewise. 1435 (gccjit::function::add_jump): Likewise. 1436 (gccjit::function::add_return): Likewise. 1437 (gccjit::function::add_call): Likewise. 1438 1439 * internal-api.c (gcc::jit::recording::playback_label): Delete in 1440 favor of... 1441 (gcc::jit::recording::playback_block): New. 1442 (gcc::jit::recording::context::compile): Validate. 1443 (gcc::jit::recording::context::validate): New. 1444 (gcc::jit::recording::function::function): Update. 1445 (gcc::jit::recording::function::new_forward_label): Delete. 1446 (gcc::jit::recording::function::add_eval): Delete. 1447 (gcc::jit::recording::function::add_assignment): Delete. 1448 (gcc::jit::recording::function::add_assignment_op): Delete. 1449 (gcc::jit::recording::function::new_block): New. 1450 (gcc::jit::recording::function::add_comment): Delete. 1451 (gcc::jit::ecording::function::add_conditional): Delete. 1452 (gcc::jit::recording::function::add_label): Delete. 1453 (gcc::jit::recording::function::place_forward_label): Delete. 1454 (gcc::jit::recording::function::add_jump): Delete. 1455 (gcc::jit::recording::function::add_return): Delete. 1456 (gcc::jit::recording::function::new_loop): Delete. 1457 (gcc::jit::recording::function::write_to_dump): Port to block-based 1458 representation. 1459 (gcc::jit::recording::function::validate): New. 1460 (gcc::jit::recording::block::add_eval): New. 1461 (gcc::jit::recording::block::add_assignment): New. 1462 (gcc::jit::recording::label::replay_into): Delete. 1463 (gcc::jit::recording::block::add_assignment_op): New. 1464 (gcc::jit::recording::block::add_comment): New. 1465 (gcc::jit::recording::block::end_with_conditional): New. 1466 (gcc::jit::recording::block::end_with_jump): New. 1467 (gcc::jit::recording::block::end_with_return): New. 1468 (gcc::jit::recording::block::write_to_dump): New. 1469 (gcc::jit::recording::block::validate): New. 1470 (gcc::jit::recording::block::get_last_statement): New. 1471 (gcc::jit::recording::block::get_successor_blocks): New. 1472 (gcc::jit::recording::block::replay_into): New. 1473 (gcc::jit::recording::label::make_debug_string): Delete. 1474 (gcc::jit::recording::block::make_debug_string): New. 1475 (gcc::jit::recording::statement::get_successor_blocks): New. 1476 (gcc::jit::recording::eval::replay_into): Port to block-based 1477 representation. 1478 (gcc::jit::recording::assignment::replay_into): Likewise. 1479 (gcc::jit::recording::assignment_op::replay_into): Likewise. 1480 (gcc::jit::recording::comment::replay_into): Likewise. 1481 (gcc::jit::recording::conditional::replay_into): Likewise. 1482 (gcc::jit::recording::jump::replay_into): Likewise. 1483 (gcc::jit::recording::return_::replay_into): Likewise. 1484 1485 (gcc::jit::recording::conditional::get_successor_blocks): New. 1486 (gcc::jit::recording::place_label::place_label): Delete. 1487 (gcc::jit::recording::place_label::replay_into): Delete. 1488 (gcc::jit::recording::place_label::make_debug_string): Delete. 1489 (gcc::jit::recording::place_label::write_to_dump): Delete. 1490 1491 (gcc::jit::recording::jump::get_successor_blocks): New. 1492 (gcc::jit::recording::return_::get_successor_blocks): New. 1493 1494 (gcc::jit::recording::loop::replay_into): Delete. 1495 (gcc::jit::recording::loop::make_debug_string): Delete. 1496 (gcc::jit::recording::loop::end): Delete. 1497 (gcc::jit::recording::loop_end::replay_into): Delete. 1498 (gcc::jit::recording::loop_end::make_debug_string): Delete. 1499 1500 (gcc::jit::playback::function::new_forward_label): Delete. 1501 (gcc::jit::playback::function::new_block): New. 1502 (gcc::jit::playback::function::build_stmt_list): New. 1503 (gcc::jit::playback::function::add_eval): Replace with... 1504 (gcc::jit::playback::block::add_eval): New. 1505 (gcc::jit::playback::function::add_assignment): Replace with... 1506 (gcc::jit::playback::block::add_assignment): New. 1507 (gcc::jit::playback::function::add_comment): Replace with... 1508 (gcc::jit::playback::block::add_comment): New, reimplementing, 1509 given that we no longer have labels. 1510 (gcc::jit::playback::function::add_conditional): Replace with... 1511 (gcc::jit::playback::block::add_conditional): New, reworking, 1512 given that on_false can no longer be NULL. 1513 (gcc::jit::playback::function::add_label): Delete. 1514 (gcc::jit::playback::function::place_forward_label): Delete. 1515 (gcc::jit::playback::function::add_jump): Replace with... 1516 (gcc::jit::playback::block::add_jump): New. 1517 (gcc::jit::playback::function::add_return): Replace with... 1518 (gcc::jit::playback::block::add_return): New. 1519 (gcc::jit::playback::function::new_loop): Delete. 1520 (gcc::jit::playback::label::label): Replace with... 1521 (gcc::jit::playback::block::block): ...this. 1522 1523 (gcc::jit::playback::loop::loop): Delete. 1524 (gcc::jit::playback::loop::end): Delete. 1525 1526 (gcc::jit::playback::context::replay): Call each function's 1527 build_stmt_list. 1528 1529 * TODO.rst: Update 1530 15312014-02-25 David Malcolm <dmalcolm@redhat.com> 1532 1533 * libgccjit.h (gcc_jit_function_add_void_return): New. 1534 * libgccjit.map (gcc_jit_function_add_void_return): New. 1535 * libgccjit.c (gcc_jit_function_add_void_return): New. 1536 * libgccjit++.h (add_return): Add overloaded variant with no 1537 rvalue, calling gcc_jit_function_add_void_return. 1538 1539 * internal-api.c (gcc::jit::recording::function::add_return): Add 1540 comment that rvalue could be NULL. 1541 (gcc::jit::playback::function::add_return): Support rvalue being 1542 NULL. 1543 15442014-02-25 David Malcolm <dmalcolm@redhat.com> 1545 1546 * internal-api.h (gcc::jit::playback::function): Add field 1547 m_inner_block. 1548 1549 * internal-api.c (gcc::jit::playback::function::function): 1550 Create BLOCK here and link it to the BIND_EXPR. 1551 (gcc::jit::playback::function::gt_ggc_mx): Walk m_inner_block. 1552 (gcc::jit::playback::function::postprocess): Set up BLOCK_VARS on 1553 the block, so that the local variables make it into the debuginfo. 1554 15552014-02-24 Philip Herron <redbrain@gcc.gnu.org> 1556 1557 * Make-lang.in (jit.install-common): Implement. 1558 15592014-02-21 David Malcolm <dmalcolm@redhat.com> 1560 1561 * libgccjit.h (gcc_jit_context_dump_to_file): New. 1562 * libgccjit.map (gcc_jit_context_dump_to_file): New. 1563 * libgccjit.c (gcc_jit_context_dump_to_file): New. 1564 * libgccjit++.h (gccjit::context::dump_to_file): New. 1565 1566 * internal-api.h (gcc::jit::dump): New class. 1567 (gcc::jit::recording::playback_location): Add a replayer argument, 1568 so that playback locations can be created before playback statements. 1569 (gcc::jit::recording::location::playback_location): Likewise. 1570 (gcc::jit::recording::statement::playback_location): Likewise. 1571 (gcc::jit::recording::context::dump_to_file): New. 1572 (gcc::jit::recording::context::m_structs): New field, for use by 1573 dump_to_file. 1574 (gcc::jit::recording::context::m_functions): Likewise. 1575 (gcc::jit::recording::memento::write_to_dump): New virtual function. 1576 (gcc::jit::recording::field::write_to_dump): New. 1577 (gcc::jit::recording::fields::write_to_dump): New. 1578 (gcc::jit::recording::function::write_to_dump): New. 1579 (gcc::jit::recording::function::m_locals): New field for use by 1580 write_to_dump. 1581 (gcc::jit::recording::function::m_activity): Likewise. 1582 (gcc::jit::recording::local::write_to_dump): New. 1583 (gcc::jit::recording::statement::write_to_dump): New. 1584 (gcc::jit::recording::place_label::write_to_dump): New. 1585 1586 * internal-api.c (gcc::jit::dump::dump): New. 1587 (gcc::jit::dump::~dump): New. 1588 (gcc::jit::dump::write): New. 1589 (gcc::jit::dump::make_location): New. 1590 (gcc::jit::recording::playback_location): Add a replayer argument, 1591 so that playback locations can be created before playback statements. 1592 1593 (gcc::jit::recording::context::context): Initialize new fields. 1594 (gcc::jit::recording::function::function): Likewise. 1595 1596 (gcc::jit::recording::context::new_struct_type): Add struct to the 1597 context's m_structs vector. 1598 (gcc::jit::recording::context::new_function): Add function to the 1599 context's m_functions vector. 1600 (gcc::jit::recording::context::dump_to_file): New. 1601 (gcc::jit::recording::memento::write_to_dump): New. 1602 (gcc::jit::recording::field::write_to_dump): New. 1603 (gcc::jit::recording::fields::write_to_dump): New. 1604 (gcc::jit::recording::function::write_to_dump): New. 1605 (gcc::jit::recording::local::write_to_dump): New. 1606 (gcc::jit::recording::statement::write_to_dump): New. 1607 (gcc::jit::recording::place_label::write_to_dump): New. 1608 1609 (gcc::jit::recording::array_type::replay_into): Pass on replayer 1610 to call to playback_location. 1611 (gcc::jit::recording::field::replay_into): Likewise. 1612 (gcc::jit::recording::struct_::replay_into): Likewise. 1613 (gcc::jit::recording::param::replay_into): Likewise. 1614 (gcc::jit::recording::function::replay_into): Likewise. 1615 (gcc::jit::recording::global::replay_into): Likewise. 1616 (gcc::jit::recording::unary_op::replay_into): Likewise. 1617 (gcc::jit::recording::binary_op::replay_into): Likewise. 1618 (gcc::jit::recording::comparison::replay_into): Likewise. 1619 (gcc::jit::recording::call::replay_into): Likewise. 1620 (gcc::jit::recording::array_access::replay_into): Likewise. 1621 (gcc::jit::recording::access_field_of_lvalue::replay_into): Likewise. 1622 (gcc::jit::recording::access_field_rvalue::replay_into): Likewise. 1623 (gcc::jit::recording::dereference_field_rvalue::replay_into): Likewise. 1624 (gcc::jit::recording::dereference_rvalue::replay_into): Likewise. 1625 (gcc::jit::recording::get_address_of_lvalue::replay_into): Likewise. 1626 (gcc::jit::recording::local::replay_into): Likewise. 1627 (gcc::jit::recording::eval::replay_into): Likewise. 1628 (gcc::jit::recording::assignment::replay_into): Likewise. 1629 (gcc::jit::recording::assignment_op::replay_into): Likewise. 1630 (gcc::jit::recording::comment::replay_into): Likewise. 1631 (gcc::jit::recording::conditional::replay_into): Likewise. 1632 (gcc::jit::recording::place_label::replay_into): Likewise. 1633 (gcc::jit::recording::jump::replay_into): Likewise. 1634 (gcc::jit::recording::return_::replay_into): Likewise. 1635 (gcc::jit::recording::loop::replay_into): Likewise. 1636 (gcc::jit::recording::loop_end::replay_into): Likewise. 1637 1638 (gcc::jit::recording::function::new_local): Add to the function's 1639 vector of locals. 1640 (gcc::jit::recording::function::add_eval): Add to the function's 1641 m_activity field. 1642 (gcc::jit::recording::function::add_assignment): Likewise. 1643 (gcc::jit::recording::function::add_assignment_op): Likewise. 1644 (gcc::jit::recording::function::add_comment): Likewise. 1645 (gcc::jit::recording::function::add_conditional): Likewise. 1646 (gcc::jit::recording::function::place_forward_label): Likewise. 1647 (gcc::jit::recording::function::add_jump): Likewise. 1648 (gcc::jit::recording::function::add_return): Likewise. 1649 (gcc::jit::recording::function::new_loop): Likewise. 1650 1651 (gcc::jit::recording::conditional::make_debug_string): Add missing 1652 semicolon. 1653 16542014-02-19 David Malcolm <dmalcolm@redhat.com> 1655 1656 * libgccjit.c (gcc_jit_context_new_rvalue_from_ptr): Verify that 1657 pointer_type is indeed a pointer type. 1658 (gcc_jit_context_null): Likewise. 1659 (gcc_jit_context_new_array_access): Verify that ptr is indeed a 1660 pointer. 1661 1662 * TODO.rst: Update 1663 16642014-02-18 David Malcolm <dmalcolm@redhat.com> 1665 1666 * libgccjit.h (gcc_jit_struct): New. 1667 (gcc_jit_context_new_struct_type): Change return type from gcc_jit_type 1668 to gcc_jit_struct. 1669 (gcc_jit_context_new_opaque_struct): New. 1670 (gcc_jit_struct_as_type): New. 1671 (gcc_jit_struct_set_fields): New. 1672 (gcc_jit_context_null): New. 1673 1674 * libgccjit.map (gcc_jit_context_new_opaque_struct): New. 1675 (gcc_jit_context_null): New. 1676 (gcc_jit_struct_as_type): New. 1677 (gcc_jit_struct_set_fields): New. 1678 1679 * libgccjit++.h (gccjit::context::new_struct_type): Return a 1680 struct_ rather than a type. 1681 (gccjit::context::new_opaque_struct_type): New. 1682 (gccjit::struct_): New subclass of type. 1683 1684 * libgccjit.c (gcc_jit_struct): New. 1685 (RETURN_VAL_IF_FAIL_PRINTF1): New. 1686 (RETURN_VAL_IF_FAIL_PRINTF2): New. 1687 (RETURN_NULL_IF_FAIL_PRINTF1): New. 1688 (RETURN_IF_FAIL_PRINTF1): New. 1689 (RETURN_IF_FAIL_PRINTF2): New. 1690 (gcc_jit_context_new_struct_type): Return a gcc_jit_struct rather 1691 than a gcc_jit_type; implement by creating the struct, then 1692 setting the fields in it. 1693 (gcc_jit_context_new_opaque_struct): New. 1694 (gcc_jit_struct_as_type): New. 1695 (gcc_jit_struct_set_fields): New. 1696 (gcc_jit_context_null): New. 1697 (gcc_jit_lvalue_access_field): Use the struct's context when 1698 reporting on a NULL field; verify that the field has been placed 1699 in a struct. 1700 (gcc_jit_rvalue_access_field): Likewise. 1701 (is_bool): New. 1702 (gcc_jit_function_add_conditional): Use the function's context 1703 when reporting errors; verify that boolval's type is indeed 1704 boolean. 1705 (gcc_jit_function_new_loop): Likewise. 1706 1707 * internal-api.h (gcc::jit::recording::context::new_struct_type): 1708 Don't accept fields, and return a struct_ rather than a type_, so 1709 that fields can be set later. 1710 (gcc::jit::recording::struct_::struct_): Store a (fields *) rather 1711 than a vec of fields. 1712 (gcc::jit::recording::struct_::as_type): New. 1713 (gcc::jit::recording::struct_::get_fields): New. 1714 (gcc::jit::recording::struct_::set_fields): New. 1715 (gcc::jit::recording::struct_::playback_struct): New. 1716 (gcc::jit::recording::fields): New class. 1717 (gcc::jit::playback::context::new_struct_type): Don't accept 1718 fields, and return a struct_ rather than a type_, so that fields 1719 can be set later. 1720 (gcc::jit::playback::struct_): New subclass of type. 1721 1722 * internal-api.c (gcc::jit::recording::context::get_type): With 1723 nested contexts, create basic types within the ultimate parent 1724 context, allowing for a fast check for the boolean type using 1725 pointer equality. 1726 (gcc::jit::recording::context::new_struct_type): Don't accept 1727 fields, and return a struct_ rather than a type_, so that fields 1728 can be set later. 1729 (gcc::jit::recording::context::get_opaque_FILE_type): Update for 1730 struct-creation changes. 1731 (gcc::jit::recording::struct_::struct_): Store a (fields *) rather 1732 than a vec of fields. 1733 (gcc::jit::recording::struct_::set_fields): New. 1734 (gcc::jit::recording::struct_::replay_into): Don't playback the 1735 fields, as this is now done by a fields instance. 1736 (gcc::jit::recording::fields::fields): New. 1737 (gcc::jit::recording::fields::replay_into): New. 1738 (gcc::jit::recording::fields::make_debug_string): New. 1739 (gcc::jit:: playback::context::new_struct_type): Don't accept 1740 fields, and return a struct_ rather than a type_, so that fields 1741 can be set later. 1742 (gcc::jit::playback::struct_::set_fields): New. 1743 1744 * TODO.rst: Update. 1745 17462014-02-18 David Malcolm <dmalcolm@redhat.com> 1747 1748 * libgccjit.c (gcc_jit_function_new_local): Use the context of the 1749 function when reporting errors. 1750 (gcc_jit_function_place_forward_label): Likewise. 1751 (gcc_jit_function_add_eval): Likewise. 1752 (gcc_jit_function_add_assignment_op): Likewise. 1753 (gcc_jit_function_add_comment): Likewise. 1754 (gcc_jit_function_add_jump): Likewise. 1755 17562014-02-14 David Malcolm <dmalcolm@redhat.com> 1757 1758 * libgccjit++.h (gccjit::type::zero): New method. 1759 (gccjit::type::one): New method. 1760 (gccjit::function::add_call): New family of overloaded methods. 1761 17622014-02-13 David Malcolm <dmalcolm@redhat.com> 1763 1764 * libgccjit.h (gcc_jit_context_get_builtin_function): New. 1765 * libgccjit.map (gcc_jit_context_get_builtin_function): New. 1766 * libgccjit++.h (gccjit::context::get_builtin_function): New method. 1767 1768 * Make-lang.in (jit_OBJS): Add jit/jit-builtins.o 1769 * jit-builtins.c: New source file, for managing builtin functions 1770 and their types. 1771 * jit-builtins.h: Likewise. 1772 1773 * libgccjit.c (gcc_jit_context_new_function): Pass BUILT_IN_NONE for 1774 the new argument of new_function 1775 (gcc_jit_context_get_builtin_function): New. 1776 1777 * internal-api.h: Add idempotency guards. 1778 (gcc::jit::recording::context::new_function): Add parameter 1779 for builtin functions. 1780 (gcc::jit::recording::context::get_builtin_function): New method. 1781 (gcc::jit::recording::context::m_builtins_manager): New field. 1782 (gcc::jit::recording::type::as_a_function_type): New virtual function. 1783 (gcc::jit::recording::function_type): New subclass of type. 1784 (gcc::jit::recording::function::function): Add parameter for 1785 builtin functions. 1786 (gcc::jit::recording::function::m_builtin_id): New field. 1787 (gcc::jit::recording::function::new_function_type): New method. 1788 (gcc::jit::playback::function::function): Add parameter for 1789 builtin functions. 1790 * internal-api.c (gcc::jit::recording::context::context): 1791 NULL-initialize new field m_builtins_manager. 1792 (gcc::jit::recording::context::~context): Clean up the builtins 1793 manager, if one has been created. 1794 (gcc::jit::recording::context::new_function): Add parameter 1795 (gcc::jit::recording::context::get_builtin_function): New method. 1796 (gcc::jit::recording::function_type::function_type): Implement 1797 constructor for new subclass. 1798 (gcc::jit::recording::function_type::dereference): Implement 1799 method for new subclass. 1800 (gcc::jit::recording::function_type::replay_into): Likewise. 1801 (gcc::jit::recording::function_type::make_debug_string): Likewise. 1802 (gcc::jit::recording::function::function): Add parameter for 1803 builtin functions. 1804 (gcc::jit::recording::function::replay_into): Likewise for 1805 creation of playback object. 1806 (gcc::jit::recording::function::new_function_type): New method. 1807 (gcc::jit::playback::function::new_function): Add parameter for 1808 builtin functions, using it to set up the fndecl accordingly. 1809 18102014-02-11 David Malcolm <dmalcolm@redhat.com> 1811 1812 * libgccjit.c (IS_ASCII_ALPHA): New macro. 1813 (IS_ASCII_DIGIT): New macro. 1814 (IS_ASCII_ALNUM): New macro. 1815 (gcc_jit_context_new_function): Require that function names be valid 1816 C identifiers for now, to avoid later problems in the assembler. 1817 18182014-02-11 David Malcolm <dmalcolm@redhat.com> 1819 1820 * libgccjit.h (enum gcc_jit_types): Add GCC_JIT_TYPE_BOOL. 1821 1822 * internal-api.h (gcc::jit::recording::comparison::comparison): Use 1823 GCC_JIT_TYPE_BOOL as the types of comparisons, rather than 1824 GCC_JIT_TYPE_INT. 1825 1826 * internal-api.c (gcc::jit::recording::memento_of_get_type:: 1827 dereference): Handle GCC_JIT_TYPE_BOOL (with an error). 1828 (get_type_strings): Add GCC_JIT_TYPE_BOOL. 1829 (get_tree_node_for_type): Handle GCC_JIT_TYPE_BOOL. 1830 18312014-02-11 David Malcolm <dmalcolm@redhat.com> 1832 1833 * internal-api.c (gcc::jit::recording::context::add_error_va): If 1834 GCC_JIT_STR_OPTION_PROGNAME is NULL, use "libgccjit.so", as per 1835 the comment in libgccjit.h 1836 (gcc::jit::recording::label::replay_into): When reporting on an 1837 unplaced label, include the name of the containing function in 1838 the error message. 1839 * libgccjit.c: Remove comment about "Functions for use within the 1840 code factory", as this distinction went away in commit 1841 96b218c9a1d5f39fb649e02c0e77586b180e8516. 1842 (RETURN_VAL_IF_FAIL_PRINTF4): New. 1843 (RETURN_NULL_IF_FAIL_PRINTF4): New. 1844 (jit_error): Invoke vfprintf with the correct format string in 1845 the NULL context case. 1846 (gcc_jit_context_new_call): Check for NULL entries within the 1847 array of arguments. 1848 18492014-02-10 David Malcolm <dmalcolm@redhat.com> 1850 1851 * libgccjit.h (gcc_jit_context_get_int_type): New. 1852 * libgccjit.map (gcc_jit_context_get_int_type): New. 1853 * libgccjit.c (gcc_jit_context_get_int_type): New. 1854 1855 * internal-api.h (gcc::jit::recording::context::get_int_type): New. 1856 (gcc::jit::recording::context::get_int_type<T>): New template. 1857 * internal-api.c (gcc::jit::recording::context::get_int_type): New. 1858 1859 * libgccjit++.h: Include <limits> so we can use std::numeric_limits. 1860 (gccjit::context::get_int_type): New. 1861 (gccjit::context::get_int_type<T>): New. 1862 18632014-02-10 David Malcolm <dmalcolm@redhat.com> 1864 1865 * libgccjit.h (gcc_jit_function_get_param): New. 1866 * libgccjit.map (gcc_jit_function_get_param): New. 1867 * libgccjit.c (gcc_jit_function_get_param): New. 1868 * libgccjit++.h (gccjit::function::get_param): New. 1869 18702014-02-10 David Malcolm <dmalcolm@redhat.com> 1871 1872 * libgccjit++.h (gccjit::object::get_inner_object): Make const. 1873 (gccjit::location::get_inner_location): Likewise. 1874 (gccjit::field::get_inner_field): Likewise. 1875 (gccjit::type::get_inner_type): Likewise. 1876 (gccjit::function::get_inner_function): Likewise. 1877 (gccjit::label::get_inner_label): Likewise. 1878 (gccjit::rvalue::get_inner_rvalue): Likewise. 1879 (gccjit::lvalue::get_inner_lvalue): Likewise. 1880 (gccjit::param::get_inner_param): Likewise. 1881 18822014-02-10 David Malcolm <dmalcolm@redhat.com> 1883 1884 * libgccjit++.h (gccjit::object::get_context): New method. 1885 (gccjit::function): Add overloaded operator () for various 1886 numbers of arguments as a very terse way of creating function calls. 1887 (gccjit::rvalue::get_type): New method. 1888 1889 (operator-): New overloaded unary op for rvalues. 1890 (operator~): Likewise. 1891 (operator!): Likewise. 1892 1893 (operator+): New overloaded binary op for rvalues. 1894 (operator-): Likewise. 1895 (operator*): Likewise. 1896 (operator/): Likewise. 1897 (operator%): Likewise. 1898 (operator&): Likewise. 1899 (operator^): Likewise. 1900 (operator|): Likewise. 1901 (operator&&): Likewise. 1902 (operator||): Likewise. 1903 1904 (operator==): New overloaded comparison for rvalues. 1905 (operator!=): Likewise. 1906 (operator<): Likewise. 1907 (operator<=): Likewise. 1908 (operator>): Likewise. 1909 (operator>=): Likewise. 1910 1911 (operator*): New overloaded operator for dereferencing an 1912 rvalue representing a pointer. 1913 1914 * libgccjit.c (gcc_jit_rvalue_get_type): New. 1915 * libgccjit.h (gcc_jit_rvalue_get_type): New. 1916 * libgccjit.map (gcc_jit_rvalue_get_type): New. 1917 19182014-02-10 David Malcolm <dmalcolm@redhat.com> 1919 1920 * libgccjit++.h (gccjit::context::new_minus): New method, 1921 providing a way to do a specific unary op with less typing. 1922 (gccjit::context::new_bitwise_negate): Likewise. 1923 (gccjit::context::new_logical_negate): Likewise. 1924 1925 (gccjit::context::new_plus): Likewise, for binary op. 1926 (gccjit::context::new_minus): Likewise. 1927 (gccjit::context::new_mult): Likewise. 1928 (gccjit::context::new_divide): Likewise. 1929 (gccjit::context::new_modulo): Likewise. 1930 (gccjit::context::new_bitwise_and): Likewise. 1931 (gccjit::context::new_bitwise_xor): Likewise. 1932 (gccjit::context::new_bitwise_or): Likewise. 1933 (gccjit::context::new_logical_and): Likewise. 1934 (gccjit::context::new_logical_or): Likewise. 1935 1936 (gccjit::context::new_eq): Likewise, for comparison. 1937 (gccjit::context::new_ne): Likewise. 1938 (gccjit::context::new_lt): Likewise. 1939 (gccjit::context::new_le): Likewise. 1940 (gccjit::context::gccjit::context::new_gt): Likewise. 1941 (gccjit::context::gccjit::context::new_ge): Likewise. 1942 1943 (gccjit::context::new_call): Add a series of overloaded methods 1944 for specific numbers of args (from 0 - 6), to avoid the need for 1945 client code to manually build a std::vector (or requiring C++11). 1946 19472014-02-10 David Malcolm <dmalcolm@redhat.com> 1948 1949 * libgccjit++.h (gccjit::context::new_struct_type): Pass std::vector 1950 "fields" argument by reference rather than by value. 1951 (gccjit::context::new_function): Likewise, for "params" arg. 1952 (gccjit::context::new_call): Likewise, for "args" arg. 1953 19542014-02-10 David Malcolm <dmalcolm@redhat.com> 1955 1956 * libgccjit++.h (gccjit::context::new_location): Update filename 1957 arg from a const char * to a const std::string &. 1958 (gccjit::context::new_field): Likewise for "name" arg. 1959 (gccjit::context::new_struct_type): Likewise. 1960 (gccjit::context::new_param): Likewise. 1961 (gccjit::context::new_function): Likewise. 1962 (gccjit::function::new_local): Likewise. 1963 (gccjit::context::new_rvalue): Likewise for "value" arg. 1964 (gccjit::function::add_comment): Likewise for "text" arg. 1965 (gccjit::function::new_forward_label): Likewise for "name" arg; add 1966 variant taking no args for anonymous labels. 1967 (gccjit::function::add_label): Likewise. 1968 19692014-02-10 David Malcolm <dmalcolm@redhat.com> 1970 1971 * libgccjit++.h (gccjit::object, gccjit::location): Move 1972 these declarations to before that of gccjit::context so that 1973 the various methods of context taking a location can have a 1974 default location value. 1975 (gccjit::context::new_array_type): Consolidate two methods, 1976 one accepting a gccjit::location, the other without, by 1977 providing a default argument (which thus has to be moved to the 1978 end of the argument list). 1979 (gccjit::context::new_field): Likewise. 1980 (gccjit::context::new_struct_type): Likewise. 1981 (gccjit::context::new_param): Likewise. 1982 (gccjit::context::new_function): Likewise. 1983 (gccjit::context::new_unary_op): Likewise. 1984 (gccjit::context::new_binary_op): Likewise. 1985 (gccjit::context::new_comparison): Likewise. 1986 (gccjit::context::new_call): Likewise. 1987 (gccjit::context::new_array_access): Likewise. 1988 (gccjit::function::new_local): Likewise. 1989 (gccjit::function::add_eval): Likewise. 1990 (gccjit::function::add_assignment): Likewise. 1991 (gccjit::function::add_assignment_op): Likewise. 1992 (gccjit::function::add_comment): Likewise. 1993 (gccjit::function::add_conditional): Likewise. 1994 (gccjit::function::add_label): Likewise. 1995 (gccjit::function::place_forward_label): Likewise. 1996 (gccjit::function::add_jump): Likewise. 1997 (gccjit::function::add_return): Likewise. 1998 (gccjit::rvalue::access_field): Likewise. 1999 (gccjit::rvalue::dereference_field): Likewise. 2000 (gccjit::rvalue::dereference): Likewise. 2001 (gccjit::lvalue::access_field): Likewise. 2002 (gccjit::lvalue::get_address): Likewise. 2003 20042014-02-10 David Malcolm <dmalcolm@redhat.com> 2005 2006 * TODO.rst: Update. 2007 20082014-02-06 David Malcolm <dmalcolm@redhat.com> 2009 2010 * libgccjit++.h: Include <ostream> rather than <iostream>, since 2011 the former gets us std::ostream, and the latter may introduce 2012 startup-time overhead for constructing std::cout et al. 2013 (gccjit::context::new_child_context): New. 2014 (gccjit::context::release): New. 2015 (gccjit::context::compile): New. 2016 (gccjit::context::set_int_option): New. 2017 (gccjit::context::set_bool_option): New. 2018 20192014-02-03 David Malcolm <dmalcolm@redhat.com> 2020 2021 * libgccjit.h (struct gcc_jit_object): New. 2022 (gcc_jit_object_get_context): New. 2023 (gcc_jit_object_get_debug_string): New. 2024 (gcc_jit_location_as_object): New. 2025 (gcc_jit_type_as_object): New. 2026 (gcc_jit_field_as_object): New. 2027 (gcc_jit_param_as_object): New. 2028 (gcc_jit_function_as_object): New. 2029 (gcc_jit_label_as_object): New. 2030 (gcc_jit_lvalue_as_object): New. 2031 (gcc_jit_rvalue_as_object): New. 2032 (gcc_jit_loop_as_object): New. 2033 2034 * libgccjit.map (gcc_jit_field_as_object): New. 2035 (gcc_jit_function_as_object): New. 2036 (gcc_jit_label_as_object): New. 2037 (gcc_jit_location_as_object): New. 2038 (gcc_jit_loop_as_object): New. 2039 (gcc_jit_lvalue_as_object): New. 2040 (gcc_jit_object_get_context): New. 2041 (gcc_jit_object_get_debug_string): New. 2042 (gcc_jit_param_as_object): New. 2043 (gcc_jit_rvalue_as_object): New. 2044 (gcc_jit_type_as_object): New. 2045 2046 * libgccjit.c (struct gcc_jit_object): New. 2047 (gcc_jit_location_as_object): New. 2048 (gcc_jit_type_as_object): New. 2049 (gcc_jit_field_as_object): New. 2050 (gcc_jit_param_as_object): New. 2051 (gcc_jit_function_as_object): New. 2052 (gcc_jit_label_as_object): New. 2053 (gcc_jit_lvalue_as_object): New. 2054 (gcc_jit_rvalue_as_object): New. 2055 (gcc_jit_object_get_context): New. 2056 (gcc_jit_object_get_debug_string): New. 2057 (gcc_jit_loop_as_object): New. 2058 * internal-api.h (gcc::jit::recording::memento::get_context): New. 2059 (gcc::jit::recording::memento::as_object): New. 2060 2061 * libgccjit++.h: Require iostream, for std::ostream. 2062 (class object): New base class. 2063 (operator << (std::ostream& stream, const object &obj)): New. 2064 (location): Inherit from the new "object" base class. 2065 (location::m_inner_loc): Remove, in favor of... 2066 (location::get_inner_location): ...new method. 2067 (field): Inherit from the new "object" base class. 2068 (field::m_inner_field): Remove, in favor of... 2069 (field::get_inner_field): ...new method. 2070 (type): Inherit from the new "object" base class. 2071 (type::m_inner_type): Remove, in favor of... 2072 (type::get_inner_type): ...new method. 2073 (function): Inherit from the new "object" base class. 2074 (function::m_inner_func): Remove, in favor of... 2075 (function::get_inner_function): ...new method. 2076 (label): Inherit from the new "object" base class. 2077 (label::m_inner_label): Remove, in favor of... 2078 (label::get_inner_label): ...new method. 2079 (rvalue) Inherit from the new "object" base class. 2080 (rvalue::m_inner_rvalue): Remove, in favor of... 2081 (rvalue::get_inner_rvalue): ...new method. 2082 2083 (context::new_field): Update for move of inner pointer to the 2084 "object" base class. 2085 (context::new_struct_type): Likewise. 2086 (context::new_param): Likewise. 2087 (context::new_function): Likewise. 2088 (context::new_rvalue): Likewise. 2089 (context::zero): Likewise. 2090 (context::one): Likewise. 2091 (context::new_rvalue): Likewise. 2092 (context::new_rvalue): Likewise. 2093 (context::new_unary_op): Likewise. 2094 (context::new_binary_op): Likewise. 2095 (context::new_comparison): Likewise. 2096 (context::new_call): Likewise. 2097 2098 (object::get_debug_string): New. 2099 (object::object): New. 2100 (object::get_inner_object): New. 2101 (operator << (std::ostream&, const object &)): New. 2102 2103 (location::location): Update for move of inner pointer to the 2104 "object" base class. 2105 (location::get_inner_location): New. 2106 2107 (field::field): Update for move of inner pointer to the 2108 "object" base class. 2109 (field::get_inner_field): New. 2110 2111 (type::type): Update for move of inner pointer to the 2112 "object" base class. 2113 (type::get_pointer): Likewise. 2114 (type::get_inner_type): New. 2115 2116 (function::function): Update for move of inner pointer to the 2117 "object" base class. 2118 (function::new_forward_label): Likewise. 2119 (function::new_local): Likewise. 2120 (function::add_eval): Likewise. 2121 (function::add_assignment): Likewise. 2122 (function::add_assignment_op): Likewise. 2123 (function::add_comment): Likewise. 2124 (function::add_conditional): Likewise. 2125 (function::add_label): Likewise. 2126 (function::place_forward_label): Likewise. 2127 (function::add_jump): Likewise. 2128 (function::add_return): Likewise. 2129 (function::get_inner_function): New. 2130 2131 (label::label): Update for move of inner pointer to the "object" 2132 base class. 2133 (label::get_inner_label): New 2134 2135 (rvalue::rvalue): Update for move of inner pointer to the "object" 2136 base class. 2137 (rvalue::get_inner_rvalue): New. 2138 (rvalue::access_field): Likewise. 2139 (rvalue::dereference_field): Likewise. 2140 (rvalue::dereference): Likewise. 2141 2142 (lvalue::get_inner_lvalue): Update for move of inner pointer to 2143 the "object" base class. 2144 (lvalue::access_field): Likewise. 2145 (lvalue::get_address): Likewise. 2146 21472014-01-31 David Malcolm <dmalcolm@redhat.com> 2148 2149 * libgccjit++.h: New file - a C++ wrapper for the libgccjit.h API. 2150 2151 * TODO.rst ("Test Suite"): New section, adding note about C++ 2152 tests. 2153 21542014-01-31 David Malcolm <dmalcolm@redhat.com> 2155 2156 * libgccjit.h (gcc_jit_context_new_rvalue_from_int): Give the type 2157 parameter a more descriptive name. 2158 (gcc_jit_context_zero): Likewise. 2159 (gcc_jit_context_one): Likewise. 2160 (gcc_jit_context_new_rvalue_from_double): Likewise. 2161 (gcc_jit_context_new_rvalue_from_ptr): Likewise. 2162 2163 * libgccjit.c (gcc_jit_context_new_rvalue_from_int): Likewise. 2164 (gcc_jit_context_zero): Likewise. 2165 (gcc_jit_context_one): Likewise. 2166 (gcc_jit_context_new_rvalue_from_double): Likewise. 2167 (gcc_jit_context_new_rvalue_from_ptr): Likewise. 2168 2169 * internal-api.h (gcc::jit::recording::context:: 2170 new_rvalue_from_int): Likewise. 2171 (gcc::jit::recording::context:: 2172 new_rvalue_from_double): Likewise. 2173 (gcc::jit::recording::memento_of_new_rvalue_from_int:: 2174 memento_of_new_rvalue_from_int): Likewise. 2175 (gcc::jit::recording::memento_of_new_rvalue_from_double:: 2176 memento_of_new_rvalue_from_double): Likewise. 2177 (gcc::jit::recording::memento_of_new_rvalue_from_ptr:: 2178 memento_of_new_rvalue_from_ptr): Likewise. 2179 21802014-01-30 David Malcolm <dmalcolm@redhat.com> 2181 2182 * TODO.rst: Label-placement is now checked. 2183 2184 * internal-api.c (gcc::jit::recording::context::replay_into): Give 2185 up if any errors occur during the playback. 2186 (gcc::jit::recording::label::replay_into): Issue an error if the 2187 label has not yet been placed (at playback time). 2188 (gcc::jit::recording::place_label::place_label): Move this here 2189 from internal-api.h. Issue an error if the label has already 2190 been placed (at recording time). 2191 2192 * internal-api.h (gcc::jit::recording::label): Add an 2193 m_has_been_placed field, and make class place_label a friend so 2194 it can set it. 2195 (gcc::jit::recording::label::has_been_placed): New accessor. 2196 (gcc::jit::recording::place_label::place_label): Move to 2197 internal-api.c. 2198 2199 (gcc::jit::playback::context::errors_occurred): Make public, for 2200 use by gcc::jit::recording::context::replay_into. 2201 22022014-01-30 David Malcolm <dmalcolm@redhat.com> 2203 2204 * internal-api.c (gcc::jit::recording::type::get_pointer): 2205 Ensure that repeated calls yield the same type. 2206 (gcc::jit::recording::memento_of_get_pointer:: 2207 accepts_writes_from): New. 2208 (gcc::jit::recording::context::new_call): Move 2209 the existing argument checking to... 2210 2211 * libgccjit.c (gcc_jit_context_new_call): ...here, and add 2212 checking of the types of the arguments against the function. 2213 (RETURN_VAL_IF_FAIL_PRINTF6): New. 2214 (RETURN_NULL_IF_FAIL_PRINTF6): New. 2215 2216 * internal-api.h (gcc::jit::recording::type): New field 2217 m_pointer_to_this_type, for use by get_pointer method. 2218 (gcc::jit::recording::memento_of_get_pointer:: 2219 accepts_writes_from): New. 2220 (gcc::jit::recording::function::get_param): New. 2221 2222 * TODO.rst (argument checking of gcc_jit_context_new_call): Done. 2223 22242014-01-30 David Malcolm <dmalcolm@redhat.com> 2225 2226 * TODO.rst: begin a list of error-checking we could do that this 2227 commit *doesn't* cover. 2228 2229 * libgccjit.h (gcc_jit_field): Add note that fields can't be 2230 shared between structs. 2231 (GCC_JIT_BINARY_OP_MODULO): Fix typo in comment. 2232 2233 * libgccjit.c: (RETURN_VAL_IF_FAIL_PRINTF2): New. 2234 (RETURN_VAL_IF_FAIL_PRINTF3): New. 2235 (RETURN_NULL_IF_FAIL_PRINTF2): New. 2236 (RETURN_NULL_IF_FAIL_PRINTF3): New. 2237 (RETURN_IF_FAIL_PRINTF4): New. 2238 2239 (jit_error): Take a gcc::jit::recording::context rather than 2240 a gcc_jit_context so that we pass in contexts from the inner 2241 layer. 2242 2243 (compatible_types): New, for use in type-checking. 2244 2245 (gcc_jit_context_new_struct_type): Check each field to ensure that 2246 it isn't already in use by another struct. 2247 2248 (gcc_jit_rvalue_dereference_field): Check that ptr is of a pointer 2249 type and that the field is within the correct struct, using new 2250 get_debug_string hooks to generate error messages. 2251 2252 (gcc_jit_rvalue_dereference): Check that rvalue is of a pointer 2253 type. 2254 2255 (gcc_jit_function_add_assignment): Use the function's context when 2256 reporting on NULL lvalue or rvalue. Verify that the lvalue and 2257 rvalue have compatible types. 2258 2259 (gcc_jit_function_add_return): Use the function's context when 2260 reporting on NULL rvalue. Verify that the rvalue is of an 2261 appropriate type given the function's return type. 2262 2263 * internal-api.h (NUM_GCC_JIT_TYPES): New. 2264 (gcc::jit::recording::context::record): Move from here to 2265 internal-api.c. 2266 (gcc::jit::recording::context::get_opaque_FILE_type): New. 2267 (gcc::jit::recording::context::m_basic_types): New field. 2268 (gcc::jit::recording::context::m_FILE_type): New field. 2269 2270 (gcc::jit::recording::memento::get_debug_string): New method. 2271 (gcc::jit::recording::memento::memento): Initialize new field 2272 m_debug_string, and verify context is non-NULL. 2273 (gcc::jit::recording::memento::make_debug_string): New 2274 pure-virtual function lazily used by get_debug_string. 2275 (gcc::jit::recording::memento::m_debug_string): New field, for 2276 get_debug_string to use as a cache. 2277 2278 (gcc::jit::recording::string): Rename field m_copy to m_buffer. 2279 (gcc::jit::recording::from_printf): New factory function. 2280 (gcc::jit::recording::make_debug_string): New. 2281 2282 (gcc::jit::recording::location::make_debug_string): New. 2283 2284 (gcc::jit::recording::type::dereference): New pure-virtual 2285 function. 2286 (gcc::jit::recording::type::accepts_writes_from): New virtual 2287 function. 2288 (gcc::jit::recording::type::unqualified): New virtual function. 2289 2290 (gcc::jit::recording::memento_of_get_type::dereference): New. 2291 (gcc::jit::recording::memento_of_get_type:: 2292 accepts_writes_from): New. 2293 (gcc::jit::recording::memento_of_get_type::make_debug_string): 2294 New. 2295 2296 (gcc::jit::recording::memento_of_get_pointer::make_debug_string): 2297 New. 2298 (gcc::jit::recording::memento_of_get_pointer::dereference): New. 2299 New. 2300 2301 (gcc::jit::recording::memento_of_get_const::make_debug_string): 2302 New. 2303 (gcc::jit::recording::memento_of_get_const::dereference): New. 2304 New. 2305 (gcc::jit::recording::memento_of_get_const::accepts_writes_from): 2306 New. 2307 (gcc::jit::recording::memento_of_get_const::unqualified): New. 2308 2309 (gcc::jit::recording::field): New field m_container, for the 2310 containing struct (or union, if we implement that). 2311 (gcc::jit::recording::field::get_type): New. 2312 (gcc::jit::recording::field::get_container): New. 2313 (gcc::jit::recording::field:set_container): New. 2314 (gcc::jit::recording::field::make_debug_string): New. 2315 2316 (gcc::jit::recording::struct_::struct_): Move ctor implementation 2317 from here into internal-api.c. 2318 (gcc::jit::recording::struct_::dereference): New. 2319 (gcc::jit::recording::struct_::make_debug_string): New. 2320 2321 (gcc::jit::recording::rvalue::m_type): New field. 2322 (gcc::jit::recording::rvalue::rvalue): Require a non-NULL type for 2323 new rvalue instances. 2324 (gcc::jit::recording::rvalue::get_type): New accessor. 2325 2326 (gcc::jit::recording::lvalue): Eliminate field m_type in favor of 2327 that within the rvalue base class. 2328 2329 (gcc::jit::recording::param::make_debug_string): New. 2330 2331 (gcc::jit::recording::function::get_return_type): New accessor. 2332 (gcc::jit::recording::function::make_debug_string): New. 2333 2334 (gcc::jit::recording::label::make_debug_string): New. 2335 2336 (gcc::jit::recording::global): Eliminate field m_type in favor of 2337 that within the rvalue ultimate base class (via lvalue). 2338 (gcc::jit::recording::make_debug_string): New. 2339 2340 (gcc::jit::recording::memento_of_new_rvalue_from_int): Eliminate 2341 field m_type in favor of that within the rvalue base class. 2342 (gcc::jit::recording::memento_of_new_rvalue_from_int:: 2343 make_debug_string): New. 2344 2345 (gcc::jit::recording::memento_of_new_rvalue_from_double): Eliminate 2346 field m_type in favor of that within the rvalue base class. 2347 (gcc::jit::recording::memento_of_new_rvalue_from_double:: 2348 make_debug_string): New. 2349 2350 (gcc::jit::recording::memento_of_new_rvalue_from_ptr): Eliminate 2351 field m_type in favor of that within the rvalue base class. 2352 (gcc::jit::recording::memento_of_new_rvalue_from_ptr:: 2353 make_debug_string): New. 2354 2355 (gcc::jit::recording::memento_of_new_string_literal:: 2356 memento_of_new_string_literal): Initialize type. 2357 (gcc::jit::recording::memento_of_new_string_literal:: 2358 make_debug_string): New. 2359 2360 (gcc::jit::recording::unary_op): Eliminate field m_result_type in 2361 favor of m_type within the rvalue base class. 2362 (gcc::jit::recording::unary_op::make_debug_string): New. 2363 2364 (gcc::jit::recording::binary_op): Eliminate field m_result_type in 2365 favor of m_type within the rvalue base class. 2366 (gcc::jit::recording::binary_op::make_debug_string): New. 2367 2368 (gcc::jit::recording::comparison): Eliminate field m_result_type 2369 in favor of m_type within the rvalue base class. 2370 (gcc::jit::recording::comparison::make_debug_string): New. 2371 2372 (gcc::jit::recording::make_debug_string): New. 2373 2374 (gcc::jit::recording::array_lookup::array_lookup): Initialize type 2375 by dereferencing the type of the pointer. 2376 (gcc::jit::recording::array_lookup::make_debug_string): New. 2377 2378 (gcc::jit::recording::access_field_of_lvalue:: 2379 access_field_of_lvalue): Initialize type from that of the field. 2380 (gcc::jit::recording::access_field_of_lvalue:: 2381 make_debug_string): New. 2382 2383 (gcc::jit::recording::access_field_rvalue:: 2384 access_field_of_rvalue): Initialize type from that of the field. 2385 (gcc::jit::recording::access_field_rvalue::make_debug_string): 2386 New. 2387 2388 (gcc::jit::recording::dereference_field_rvalue:: 2389 dereference_field_rvalue): Initialize type from that of the field. 2390 (gcc::jit::recording::dereference_field_rvalue:: 2391 make_debug_string): New. 2392 2393 (gcc::jit::recording::dereference_rvalue::dereference_rvalue): 2394 Initialize type by dereferencing the type of the pointer. 2395 (gcc::jit::recording::dereference_rvalue::make_debug_string): New. 2396 2397 (gcc::jit::recording::get_address_of_lvalue:: 2398 get_address_of_lvalue): Initialize type by dereferencing the type 2399 of the pointer. 2400 (gcc::jit::recording::get_address_of_lvalue::make_debug_string): 2401 New. 2402 2403 (gcc::jit::recording::local): Eliminate field m_type in favor of 2404 that within the rvalue ultimate base class (via lvalue). 2405 (gcc::jit::recording::make_debug_string): New. 2406 2407 (gcc::jit::recording::eval::make_debug_string): New. 2408 (gcc::jit::recording::assignment::make_debug_string): New. 2409 (gcc::jit::recording::assignment_op::make_debug_string): New. 2410 (gcc::jit::recording::comment::make_debug_string): New. 2411 (gcc::jit::recording::conditional::make_debug_string): New. 2412 (gcc::jit::recording::place_label::make_debug_string): New. 2413 (gcc::jit::recording::jump::make_debug_string): New. 2414 (gcc::jit::recording::return_::make_debug_string): New. 2415 (gcc::jit::recording::loop::make_debug_string): New. 2416 (gcc::jit::recording::loop_end::make_debug_string): New. 2417 2418 * internal-api.c (gcc::jit::recording::context::context): 2419 Initialize m_FILE_type and m_basic_types. 2420 (gcc::jit::recording::context::record): Move here from 2421 internal-api.h. 2422 (gcc::jit::recording::context::replay_into): Add a disabled way to 2423 log everything during a replay, exercising the stringification 2424 machinery. 2425 (gcc::jit::recording::context::get_type): Cache and reuse the 2426 types, so that repeated calls on the context give the same object. 2427 (gcc::jit::recording::context::get_opaque_FILE_type): New, for 2428 the result of dereferencing (FILE*), mostly so that fuzz-testing 2429 that tries this gets something sane back. 2430 (gcc::jit::recording::memento::get_debug_string): New method, 2431 giving a way to easily get a descriptive (const char *) for 2432 an API entity. Internally, it lazily calls the make_debug_string 2433 virtual function, storing the result in m_debug_string. 2434 2435 (gcc::jit::recording::string::string): Rename field m_copy to m_buffer. 2436 (gcc::jit::recording::string::~string): Likewise. 2437 (gcc::jit::recording::string::from_printf): New factory function, 2438 to make it easy to implement the make_debug_string hooks. 2439 2440 (gcc::jit::recording::string::make_debug_string): New. 2441 2442 (gcc::jit::recording::location::make_debug_string): New. 2443 2444 (gcc::jit::recording::memento_of_get_type::dereference): New. 2445 2446 (get_type_strings): New table of strings, for use by... 2447 (gcc::jit::recording::memento_of_get_type::make_debug_string): New. 2448 2449 (gcc::jit::recording::memento_of_get_pointer::make_debug_string): New. 2450 2451 (gcc::jit::recording::memento_of_get_const::make_debug_string): New. 2452 2453 (gcc::jit::recording::field::make_debug_string): New. 2454 2455 (gcc::jit::recording::struct_::struct_): Move here from 2456 internal-api.h. Mark all fields as belonging to the new struct. 2457 2458 (gcc::jit::recording::struct_::dereference): New. 2459 (gcc::jit::recording::struct_::make_debug_string): New. 2460 2461 (gcc::jit::recording::function::make_debug_string): New. 2462 2463 (gcc::jit::recording::label::make_debug_string): New. 2464 2465 (gcc::jit::recording::memento_of_new_rvalue_from_int:: 2466 make_debug_string): New. 2467 (gcc::jit::recording::memento_of_new_rvalue_from_double:: 2468 make_debug_string): New. 2469 (gcc::jit::recording::memento_of_new_rvalue_from_ptr:: 2470 make_debug_string): New. 2471 (gcc::jit::recording::memento_of_new_string_literal:: 2472 make_debug_string): New. 2473 2474 (gcc::jit::recording::unary_op::replay_into): Use get_type () 2475 rather than the now-defunct m_result_type. 2476 (gcc::jit::recording::binary_op::replay_into): Likewise. 2477 2478 (unary_op_strings): New table of strings for use by... 2479 (gcc::jit::recording::unary_op::make_debug_string): New. 2480 2481 (binary_op_strings): New table of strings for use by... 2482 (gcc::jit::recording::binary_op::make_debug_string): New. 2483 2484 (comparison_strings): New table of strings for use by... 2485 (gcc::jit::recording::comparison::make_debug_string): New. 2486 2487 (gcc::jit::recording::call::call): Initialize the type. 2488 (gcc::jit::recording::call::make_debug_string): New. 2489 2490 (gcc::jit::recording::array_lookup::make_debug_string): New. 2491 (gcc::jit::recording::access_field_of_lvalue:: 2492 make_debug_string): New. 2493 (gcc::jit::recording::access_field_rvalue:: 2494 make_debug_string): New. 2495 (gcc::jit::recording::dereference_field_rvalue:: 2496 make_debug_string): New. 2497 (gcc::jit::recording::dereference_rvalue::make_debug_string): New. 2498 (gcc::jit::recording::get_address_of_lvalue:: 2499 make_debug_string): New. 2500 (gcc::jit::recording::eval::make_debug_string): New. 2501 (gcc::jit::recording::assignment::make_debug_string): New. 2502 (gcc::jit::recording::assignment_op::make_debug_string): New. 2503 (gcc::jit::recording::comment::make_debug_string): New. 2504 (gcc::jit::recording::conditional::make_debug_string): New. 2505 (gcc::jit::recording::place_label::make_debug_string): New. 2506 (gcc::jit::recording::jump::make_debug_string): New. 2507 (gcc::jit::recording::return_::make_debug_string): New. 2508 (gcc::jit::recording::loop::make_debug_string): New. 2509 (gcc::jit::recording::loop_end::make_debug_string): New. 2510 25112014-01-29 David Malcolm <dmalcolm@redhat.com> 2512 2513 * libgccjit.h (gcc_jit_lvalue_access_field): Require 2514 a (gcc_jit_field *) rather than a field name. 2515 (gcc_jit_rvalue_access_field): Likewise. 2516 (gcc_jit_rvalue_dereference_field): Likewise. 2517 2518 * libgccjit.c (gcc_jit_lvalue_access_field): Require 2519 a (gcc_jit_field *) rather than a field name. 2520 (gcc_jit_rvalue_access_field): Likewise. 2521 (gcc_jit_rvalue_dereference_field): Likewise. 2522 2523 * internal-api.c (gcc::jit::recording::rvalue::access_field): 2524 Require a field rather than a fieldname string. 2525 (gcc::jit::recording::rvalue::dereference_field): Likewise. 2526 (gcc::jit::recording::lvalue::access_field): Likewise. 2527 2528 (gcc::jit::recording::access_field_of_lvalue::replay_into): Update 2529 given that this now has a field, rather than a fieldname. 2530 (gcc::jit::recording::access_field_rvalue::replay_into): Likewise. 2531 (gcc::jit::recording::dereference_field_rvalue::replay_into): Likewise. 2532 2533 (get_field): Delete, as we no longer need to convert 2534 from (struct, identifier) pairs to fields, instead directly using 2535 fields. 2536 2537 (gcc::jit::playback::context::new_field_access): Require a field 2538 rather than a fieldname, removing the need to look up the field by 2539 name within the struct. 2540 2541 (gcc::jit::playback::lvalue::access_field): Likewise. 2542 (gcc::jit::playback::rvalue::access_field): Likewise. 2543 (gcc::jit::playback::rvalue::dereference_field): Likewise. 2544 2545 * internal-api.h (gcc::jit::recording::rvalue::access_field): 2546 Require a field rather than a fieldname string. 2547 (gcc::jit::recording::rvalue::dereference_field): Likewise. 2548 (gcc::jit::recording::lvalue::access_field): Likewise. 2549 2550 (gcc::jit::recording::access_field_of_lvalue::access_field_of_lvalue): 2551 Likewise. 2552 (gcc::jit::recording::access_field_of_lvalue::m_fieldname): Drop 2553 string field in favor of... 2554 (gcc::jit::recording::access_field_of_lvalue::m_field): 2555 ..."field" field, as it were. 2556 2557 (gcc::jit::recording::access_field_of_rvalue::access_field_of_rvalue): 2558 Likewise. 2559 (gcc::jit::recording::access_field_of_rvalue::m_fieldname): Drop 2560 string field in favor of... 2561 (gcc::jit::recording::access_field_of_rvalue::m_field): 2562 ..."field" field. 2563 2564 (gcc::jit::recording::dereference_field_rvalue:: 2565 dereference_field_rvalue): Likewise. 2566 (gcc::jit::recording::dereference_field_rvalue::m_fieldname): Drop 2567 string field in favor of... 2568 (gcc::jit::recording::dereference_field_rvalue::m_field): 2569 ..."field" field. 2570 2571 (gcc::jit::playback::context::new_field_access): Require a field 2572 rather than a fieldname string. 2573 (gcc::jit::playback::context::access_field): Likewise. 2574 (gcc::jit::playback::context::dereference_field): Likewise. 2575 (gcc::jit::playback::rvalue::access_field): 2576 25772014-01-28 David Malcolm <dmalcolm@redhat.com> 2578 2579 * libgccjit.h (gcc_jit_context_new_child_context): New function. 2580 2581 * libgccjit.map (gcc_jit_context_new_child_context): New function. 2582 2583 * libgccjit.c (gcc_jit_context): Make the constructor explicit, 2584 with a parent context as a parameter. 2585 (gcc_jit_context_acquire): Create context with a NULL parent. 2586 (gcc_jit_context_new_child_context): New function, creating a 2587 context with the given parent. 2588 2589 * internal-api.h (gcc::jit::recording::context::context): New 2590 explicit constructor, taking a parent context as a parameter. 2591 (gcc::jit::recording::context::m_parent_ctxt): New field. 2592 2593 * internal-api.c (gcc::jit::recording::context::context): New 2594 explicit constructor, taking a parent context as a parameter. 2595 (gcc::jit::recording::context::replay_into): Replay parent contexts 2596 before replaying the context itself. 2597 25982014-01-27 David Malcolm <dmalcolm@redhat.com> 2599 2600 * internal-api.c (gcc::jit::playback::context::compile): Removal 2601 of the code-creation callback (96b218c9a1d5f39fb649e02c0e77586b180e8516) 2602 accidentally removed the implementation of 2603 GCC_JIT_BOOL_OPTION_DUMP_GENERATED_CODE; reinstate it. 2604 26052014-01-27 David Malcolm <dmalcolm@redhat.com> 2606 2607 * internal-api (gcc::jit::recording::context::new_call): Verify 2608 the argument count of the call against the parameter count of the 2609 function, issuing an error if there's a mismatch. 2610 2611 * internal-api.h (gcc::jit::recording::function::get_name): New. 2612 * (gcc::jit::recording::function::get_params): New. 2613 * (gcc::jit::recording::function::is_variadic): New. 2614 26152014-01-27 David Malcolm <dmalcolm@redhat.com> 2616 2617 * libgccjit.h (enum gcc_jit_binary_op): Remove 2618 GCC_JIT_BINARY_OP_FLOATING_DIVIDE, which I accidentally added 2619 as part of a880c0d9c642730550f39d328f29a1d9935cb07e. 2620 26212014-01-24 David Malcolm <dmalcolm@redhat.com> 2622 2623 * libgccjit.h: Update comments to eliminate the code-creation 2624 callback. All "contextual" objects change from merely being 2625 "alive" during the callback to having a lifetime equal to that 2626 of the context they are created within, with automatic cleanup 2627 when the context is released. 2628 (gcc_jit_code_callback): Delete. 2629 (gcc_jit_context_set_code_factory): Delete. 2630 2631 * libgccjit.map (gcc_jit_context_set_code_factory): Delete. 2632 2633 * dummy-frontend.c (my_walker): Update for rename of the singleton 2634 reference-owning context. 2635 (jit_langhook_parse_file): Rather than run a client-provided 2636 callback, we now replay a recording of the client activity. 2637 2638 * internal-api.h (gcc::jit): Split the existing API into two 2639 copies... 2640 (gcc::jit::recording): ...a class hierarchy used to implement 2641 the client-facing API, which records the API calls made to it 2642 and... 2643 (gcc::jit::playback): ...a class hierarchy used within the 2644 dummy GCC frontend, which plays back the recorded API calls once 2645 GCC is initialized. 2646 2647 * internal-api.c (gcc::jit::recording::playback_location): New 2648 API, in which client API calls are recorded as a list of "memento" 2649 objects, to be played back into GCC when the dummy frontend runs. 2650 (gcc::jit::recording::playback_string): Likewise. 2651 (gcc::jit::recording::playback_label): Likewise. 2652 (gcc::jit::recording::context::~context): Likewise. 2653 (gcc::jit::recording::context::replay_into): Likewise. 2654 (gcc::jit::recording::context::disassociate_from_playback): Likewise. 2655 (gcc::jit::recording::context::new_string): Likewise. 2656 (gcc::jit::recording::context::new_location): Likewise. 2657 (gcc::jit::recording::context::get_type): Likewise. 2658 (gcc::jit::recording::context::new_field): Likewise. 2659 (gcc::jit::recording::context::new_struct_type): Likewise. 2660 (gcc::jit::recording::context::new_param): Likewise. 2661 (gcc::jit::recording::context::new_function): Likewise. 2662 (gcc::jit::recording::context::new_global): Likewise. 2663 (gcc::jit::recording::context::new_rvalue_from_int): Likewise. 2664 (gcc::jit::recording::context::new_rvalue_from_double): Likewise. 2665 (gcc::jit::recording::context::new_rvalue_from_ptr): Likewise. 2666 (gcc::jit::recording::context::new_string_literal): Likewise. 2667 (gcc::jit::recording::context::new_unary_op): Likewise. 2668 (gcc::jit::recording::context::new_binary_op): Likewise. 2669 (gcc::jit::recording::context::new_comparison): Likewise. 2670 (gcc::jit::recording::context::new_call): Likewise. 2671 (gcc::jit::recording::context::new_array_lookup): Likewise. 2672 (gcc::jit::recording::string::string): Likewise. 2673 (gcc::jit::recording::string::~string): Likewise. 2674 (gcc::jit::recording::location::replay_into): Likewise. 2675 (gcc::jit::recording::type::get_pointer): Likewise. 2676 (gcc::jit::recording::type::get_const): Likewise. 2677 (gcc::jit::recording::memento_of_get_type::replay_into): Likewise. 2678 (gcc::jit::recording::memento_of_get_pointer::replay_into): Likewise. 2679 (gcc::jit::recording::memento_of_get_const::replay_into): Likewise. 2680 (gcc::jit::recording::field::replay_into): Likewise. 2681 (gcc::jit::recording::struct_::replay_into): Likewise. 2682 (gcc::jit::recording::rvalue::access_field): Likewise. 2683 (gcc::jit::recording::rvalue::dereference_field): Likewise. 2684 (gcc::jit::recording::rvalue::dereference): Likewise. 2685 (gcc::jit::recording::lvalue::access_field): Likewise. 2686 (gcc::jit::recording::lvalue::get_address): Likewise. 2687 (gcc::jit::recording::param::replay_into): Likewise. 2688 (gcc::jit::recording::function::function): Likewise. 2689 (gcc::jit::recording::function::replay_into): Likewise. 2690 (gcc::jit::recording::function::new_local): Likewise. 2691 (gcc::jit::recording::function::new_forward_label): Likewise. 2692 (gcc::jit::recording::function::add_eval): Likewise. 2693 (gcc::jit::recording::function::add_assignment): Likewise. 2694 (gcc::jit::recording::function::add_assignment_op): Likewise. 2695 (gcc::jit::recording::function::add_comment): Likewise. 2696 (gcc::jit::recording::function::add_conditional): Likewise. 2697 (gcc::jit::recording::function::add_label): Likewise. 2698 (gcc::jit::recording::function::place_forward_label): Likewise. 2699 (gcc::jit::recording::function::add_jump): Likewise. 2700 (gcc::jit::recording::function::add_return): Likewise. 2701 (gcc::jit::recording::function::new_loop): Likewise. 2702 (gcc::jit::recording::label::replay_into): Likewise. 2703 (gcc::jit::recording::global::replay_into): Likewise. 2704 (gcc::jit::recording::memento_of_new_rvalue_from_int::replay_into): 2705 Likewise. 2706 (gcc::jit::recording::memento_of_new_rvalue_from_double::replay_into): 2707 Likewise. 2708 (gcc::jit::recording::memento_of_new_rvalue_from_ptr::replay_into): 2709 Likewise. 2710 (gcc::jit::recording::memento_of_new_string_literal::replay_into): 2711 Likewise. 2712 (gcc::jit::recording::unary_op::replay_into): Likewise. 2713 (gcc::jit::recording::binary_op::replay_into): Likewise. 2714 (gcc::jit::recording::comparison::replay_into): Likewise. 2715 (gcc::jit::recording::call::call): Likewise. 2716 (gcc::jit::recording::call::replay_into): Likewise. 2717 (gcc::jit::recording::array_lookup::replay_into): Likewise. 2718 (gcc::jit::recording::access_field_of_lvalue::replay_into): Likewise. 2719 (gcc::jit::recording::access_field_rvalue::replay_into): Likewise. 2720 (gcc::jit::recording::dereference_field_rvalue::replay_into): Likewise. 2721 (gcc::jit::recording::dereference_rvalue::replay_into): Likewise. 2722 (gcc::jit::recording::get_address_of_lvalue::replay_into): Likewise. 2723 (gcc::jit::recording::local::replay_into): Likewise. 2724 (gcc::jit::recording::eval::replay_into): Likewise. 2725 (gcc::jit::recording::assignment::replay_into): Likewise. 2726 (gcc::jit::recording::assignment_op::replay_into): Likewise. 2727 (gcc::jit::recording::comment::replay_into): Likewise. 2728 (gcc::jit::recording::conditional::replay_into): Likewise. 2729 (gcc::jit::recording::place_label::replay_into): Likewise. 2730 (gcc::jit::recording::jump::replay_into): Likewise. 2731 (gcc::jit::recording::return_::replay_into): Likewise. 2732 (gcc::jit::recording::loop::replay_into): Likewise. 2733 (gcc::jit::recording::loop::end): Likewise. 2734 (gcc::jit::recording::loop_end::replay_into): Likewise. 2735 2736 (gcc::jit::recording::context::set_str_option): Likewise. 2737 Option setting and error-handling is now "owned" by the recording 2738 context; the playback context delegates to the recording context 2739 for these aspects. 2740 (gcc::jit::recording::context::set_int_option): Likewise. 2741 (gcc::jit::recording::context::set_bool_option): Likewise. 2742 (gcc::jit::recording::context::compile): Likewise. 2743 (gcc::jit::recording::context::add_error): Likewise. 2744 (gcc::jit::recording::context::add_error_va): Likewise. 2745 (gcc::jit::recording::context::get_first_error): Likewise. 2746 2747 (gcc::jit::context::context): Rename to... 2748 (gcc::jit::playback::context::context): ...this. 2749 (gcc::jit::context::~context): Rename to... 2750 (gcc::jit::playback::context::~context): ...this. 2751 (gcc::jit::context::gt_ggc_mx): Rename to... 2752 (gcc::jit::playback::context::gt_ggc_mx): ...this. 2753 2754 (gcc::jit::context::set_code_factory): Eliminate. 2755 2756 (gcc::jit::context::get_type): Rename to... 2757 (gcc::jit::playback::context::get_type): ...this. 2758 (gcc::jit::context::new_field): Rename to... 2759 (gcc::jit::playback::context::new_field): ...this. 2760 (gcc::jit::context::new_struct_type): Rename to... 2761 (gcc::jit::playback::context::new_struct_type): ...this, and 2762 update to require a vec<field *>. 2763 (gcc::jit::context::new_param): Rename to... 2764 (gcc::jit::playback::context::new_param): ...this. 2765 (gcc::jit::context::new_function): Rename to... 2766 (gcc::jit::playback::context::new_function): ...this, and update 2767 to require a vec<param *>. 2768 (gcc::jit::context::new_global): Rename to... 2769 (gcc::jit::playback::context::new_global): ...this. 2770 (gcc::jit::context::new_rvalue_from_int): Rename to... 2771 (gcc::jit::playback::context::new_rvalue_from_int): ...this. 2772 (gcc::jit::context::new_rvalue_from_double): Rename to... 2773 (gcc::jit::playback::context::new_rvalue_from_double): ...this. 2774 (gcc::jit::context::new_rvalue_from_ptr): Rename to... 2775 (gcc::jit::playback::context::new_rvalue_from_ptr): ...this. 2776 (gcc::jit::context::new_string_literal): Rename to... 2777 (gcc::jit::playback::context::new_string_literal): ...this. 2778 (gcc::jit::context::as_truth_value): Rename to... 2779 (gcc::jit::playback::context::as_truth_value): ...this. 2780 (gcc::jit::context::new_unary_op): Rename to... 2781 (gcc::jit::playback::context::new_unary_op): ...this. 2782 (gcc::jit::context::new_binary_op): Rename to... 2783 (gcc::jit::playback::context::new_binary_op): ...this. 2784 (gcc::jit::context::new_comparison): Rename to... 2785 (gcc::jit::playback::context::new_comparison): ...this. 2786 (gcc::jit::context::new_call): Rename to... 2787 (gcc::jit::playback::context::new_call): ...this, and update 2788 to require a vec<rvalue *>. 2789 (gcc::jit::context::new_array_lookup): Rename to... 2790 (gcc::jit::playback::context::new_array_lookup): ...this. 2791 (gcc::jit::context::new_field_access): Rename to... 2792 (gcc::jit::playback::context::new_field_access): ...this. 2793 (gcc::jit::context::new_dereference): Rename to... 2794 (gcc::jit::playback::context::new_dereference): ...this. 2795 2796 (gcc::jit::lvalue::access_field): Rename to... 2797 (gcc::jit::playback::lvalue::access_field): ...this. 2798 (gcc::jit::lvalue::get_address): Rename to... 2799 (gcc::jit::playback::lvalue::get_address): ...this. 2800 2801 (gcc::jit::rvalue::dereference_field): Rename to... 2802 (gcc::jit::playback::rvalue::dereference_field): ...this. 2803 2804 (gcc::jit::rvalue::dereference): Rename to... 2805 (gcc::jit::playback::rvalue::dereference): ...this. 2806 2807 (gcc::jit::wrapper::operator new): Rename to... 2808 (gcc::jit::playback::wrapper::operator new): ...this. 2809 2810 (gcc::jit::function::function): Rename to... 2811 (gcc::jit::playback::function::function): ...this. 2812 (gcc::jit::function::gt_ggc_mx): Rename to... 2813 (gcc::jit::playback::function::gt_ggc_mx): ...this. 2814 (gcc::jit::function::get_return_type_as_tree): Rename to... 2815 (gcc::jit::playback::function::get_return_type_as_tree): ...this. 2816 (gcc::jit::function::new_local): Rename to... 2817 (gcc::jit::playback::function::new_local): ...this. 2818 (gcc::jit::function::new_forward_label): Rename to... 2819 (gcc::jit::playback::function::new_forward_label): ...this. 2820 (gcc::jit::function::postprocess): Rename to... 2821 (gcc::jit::playback::function::postprocess): ...this. 2822 (gcc::jit::function::add_eval): Rename to... 2823 (gcc::jit::playback::function::add_eval): ...this. 2824 (gcc::jit::function::add_assignment): Rename to... 2825 (gcc::jit::playback::function::add_assignment): ...this. 2826 (gcc::jit::function::add_comment): Rename to... 2827 (gcc::jit::playback::function::add_comment): ...this. 2828 (gcc::jit::function::add_conditional): Rename to... 2829 (gcc::jit::playback::function::add_conditional): ...this. 2830 (gcc::jit::function::add_label): Rename to... 2831 (gcc::jit::playback::function::add_label): ...this. 2832 (gcc::jit::function::place_forward_label): Rename to... 2833 (gcc::jit::playback::function::place_forward_label): ...this. 2834 (gcc::jit::function::add_jump): Rename to... 2835 (gcc::jit::playback::function::add_jump): ...this. 2836 (gcc::jit::function::add_return): Rename to... 2837 (gcc::jit::playback::function::add_return): ...this. 2838 (gcc::jit::function::new_loop): Rename to... 2839 (gcc::jit::playback::function::new_loop): ...this. 2840 2841 (gcc::jit::label::label): Rename to... 2842 (gcc::jit::playback::label::label): ...this. 2843 2844 (gcc::jit::loop::loop): Rename to... 2845 (gc::jit::playback::loop::loop): ...this. 2846 (gcc::jit::loop::end): Rename to... 2847 (gcc::jit::playback::loop): ...this. 2848 2849 (gcc::jit::active_jit_ctxt): Eliminate in favor of... 2850 (gcc::jit::active_playback_ctxt): ...this. 2851 2852 (gcc::jit::context::compile): Rename to... 2853 (gcc::jit::playback::context::compile): ...this, and eliminate the 2854 mutex handling; this is done for us by the caller. 2855 2856 (gcc::jit::context::invoke_code_factory): Rename to... 2857 (gcc::jit::playback::context::replay): this. Rather than call 2858 a client-provided callback, instead replay the recorded API 2859 calls. 2860 2861 (gcc::jit::context::dump_generated_code): Rename to... 2862 (gcc::jit::playback::context::dump_generated_code): ...this. 2863 2864 (location_comparator): Update for renamed types. 2865 2866 (gcc::jit::context::handle_locations): Rename to... 2867 (gcc::jit::playback::context::handle_locations): ...this. 2868 2869 (gcc::jit::context::add_error): Rename to... 2870 (gcc::jit::playback::context::add_error): this, and delegate to 2871 the recording context's add_error_va. 2872 2873 (gcc::jit::context::add_error_va): Rename to... 2874 (gcc::jit::playback::context::add_error_va): this, and delegate 2875 to the recording context. 2876 2877 (gcc::jit::context::new_location): Rename to... 2878 (gcc::jit::playback::context::new_location): ...this. 2879 (gcc::jit::context::set_tree_location): Rename to... 2880 (gcc::jit::playback::context::set_tree_location): ...this. 2881 (gcc::jit::context::get_source_file): Rename to... 2882 (gcc::jit::playback::context::get_source_file): ...this. 2883 (gcc::jit::source_file::source_file): Rename to... 2884 (gcc::jit::playback::source_file::source_file): ...this. 2885 (gcc::jit::source_file::get_source_line): Rename to... 2886 (gcc::jit::playback::source_file::get_source_line): ...this. 2887 (gcc::jit::source_line::source_line): Rename to... 2888 (gcc::jit::playback::source_line::source_line): ...this. 2889 (gcc::jit::source_line::get_location): Rename to... 2890 (gcc::jit::playback::source_line::get_location): ...this. 2891 2892 (gcc::jit::location::location): Rename to... 2893 (gcc::jit::playback::location::location): ...this. 2894 2895 * libgccjit.c: Update classes to derive from the "jit::recording" 2896 class hierarchy. 2897 (RETURN_IF_NOT_INITIAL_CTXT): Eliminate, as it relates to 2898 code-creation callbacks. 2899 (RETURN_NULL_IF_NOT_INITIAL_CTXT): Likewise. 2900 (RETURN_NULL_IF_NOT_CALLBACK_CTXT): Likewise. 2901 (jit_error): There isn't an "active jit context" anymore, except 2902 during actual compilation, so simplify the logic here. 2903 (gcc_jit_context_set_code_factory): Delete. 2904 2905 (gcc_jit_context_new_location): Update preconditions now that we 2906 don't have code-creation callbacks. 2907 (gcc_jit_context_get_type): Likewise. 2908 (gcc_jit_type_get_pointer): Likewise. 2909 (gcc_jit_type_get_const): Likewise. 2910 (gcc_jit_context_new_field): Likewise. 2911 (gcc_jit_context_new_struct_type): Likewise. 2912 (gcc_jit_context_new_param): Likewise. 2913 (gcc_jit_param_as_lvalue): Likewise. 2914 (gcc_jit_param_as_rvalue): Likewise. 2915 (gcc_jit_context_new_function): Likewise. 2916 (gcc_jit_context_new_function): Likewise. 2917 (gcc_jit_function_new_forward_label): Likewise. 2918 (gcc_jit_context_new_global): Likewise. 2919 (gcc_jit_lvalue_as_rvalue): Likewise. 2920 (gcc_jit_context_new_rvalue_from_int): Likewise. 2921 (gcc_jit_context_zero): Likewise. 2922 (gcc_jit_context_one): Likewise. 2923 (gcc_jit_context_new_rvalue_from_double): Likewise. 2924 (gcc_jit_context_new_rvalue_from_ptr): Likewise. 2925 (gcc_jit_context_new_string_literal): Likewise. 2926 (gcc_jit_context_new_unary_op): Likewise. 2927 (gcc_jit_context_new_binary_op): Likewise. 2928 (gcc_jit_context_new_comparison): Likewise. 2929 (gcc_jit_context_new_call): Likewise. 2930 (gcc_jit_context_new_call): Likewise. 2931 (gcc_jit_context_new_array_lookup): Likewise. 2932 (gcc_jit_context_set_str_option): Likewise. 2933 (gcc_jit_context_set_int_option): Likewise. 2934 (gcc_jit_context_set_bool_option): Likewise. 2935 (gcc_jit_context_compile): Likewise. 2936 (gcc_jit_function_add_assignment_op): Likewise. Also, 2937 reimplement as a separate kind of recording, since we can't know 2938 the type of the lvalue at recording-time. 2939 2940 * notes.txt: Update diagram to reflect the new implementation. 2941 29422014-01-24 David Malcolm <dmalcolm@redhat.com> 2943 2944 * libgccjit.h (enum gcc_jit_binary_op): We will use the result 2945 type to determine if GCC_JIT_BINARY_OP_DIVIDE should 2946 truncate towards zero, or be floating-point division. 2947 2948 * internal-api.c (gcc::jit::context::new_binary_op): Likewise. 2949 29502014-01-24 David Malcolm <dmalcolm@redhat.com> 2951 2952 * internal-api.h (gcc::jit::context::get_str_option): New access 2953 method. 2954 (gcc::jit::context::get_int_option): Likewise. 2955 2956 * internal-api.c (gcc::jit::context::~context): Use access methods 2957 for options, rather than direct field access. 2958 (gcc::jit::context::compile): Likewise. 2959 29602014-01-23 David Malcolm <dmalcolm@redhat.com> 2961 2962 * libgccjit.h (enum gcc_jit_bool_option): New value: 2963 GCC_JIT_BOOL_OPTION_DUMP_GENERATED_CODE. 2964 2965 * internal-api.c (gcc::jit::context::compile): Call 2966 dump_generated_code if the user has requested it. 2967 (gcc::jit::context::dump_generated_code): New, copying 2968 from the .s file to stderr. 2969 2970 * internal-api.h (gcc::jit::context::dump_generated_code): New. 2971 29722014-01-23 David Malcolm <dmalcolm@redhat.com> 2973 2974 * internal-api.h (gcc::jit::function): Add field 2975 "m_inner_bind_expr". 2976 * internal-api.c (gcc::jit::function::function): Create a BIND_EXPR 2977 for all non-imported functions, and put the statement list within 2978 it. 2979 (gcc::jit::function::gt_ggc_mx): Visit m_inner_bind_expr. 2980 (gcc::jit::function::new_local): Set the DECL_CONTEXT of the new 2981 local to be the function's BIND_EXPR, and prepend the new local 2982 to said BIND_EXPR's BIND_EXPR_VARS chain. 2983 (gcc::jit::function::postprocess): Set the DECL_SAVED_TREE of the 2984 FUNCTION_DECL to be the BIND_EXPR, rather than the statement list. 2985 The latter is now contained within the former. 2986 29872014-01-23 David Malcolm <dmalcolm@redhat.com> 2988 2989 * internal-api.h (gcc::jit::function::add_stmt): New. 2990 2991 * internal-api.c (gcc::jit::function::add_eval): Replace use of 2992 tsi_link_stmt with call to add_stmt. 2993 (gcc::jit::function::add_assignment): Likewise. 2994 (gcc::jit::function::add_conditional): Likewise. 2995 (gcc::jit::function::place_forward_label): Likewise. 2996 (gcc::jit::function::add_jump): Likewise. 2997 (gcc::jit::function::add_return): Likewise. 2998 29992014-01-21 David Malcolm <dmalcolm@redhat.com> 3000 3001 * internal-api.c (gcc::jit::function::add_comment): New. 3002 * internal-api.h (gcc::jit::function::add_comment): New. 3003 * libgccjit.c (gcc_jit_function_add_comment): New. 3004 * libgccjit.h (gcc_jit_function_add_comment): New. 3005 * libgccjit.map: Add gcc_jit_function_add_comment. 3006 30072013-10-24 David Malcolm <dmalcolm@redhat.com> 3008 3009 * internal-api.c (gcc::jit::function::add_eval): Handle non-NULL 3010 locations. 3011 (gcc::jit::context::handle_locations): Fix test for the various 3012 kinds of declarations, replacing use of DECL_MINIMAL_CHECK, 3013 which aborts on failure (such as if we saw a type). 3014 * libgccjit.h (GCC_JIT_BOOL_OPTION_DEBUGINFO): Fix out-of-date 3015 comment. 3016 30172013-10-23 David Malcolm <dmalcolm@redhat.com> 3018 3019 * internal-api.c: Update for rename of tree-flow.h to tree-cfg.h 3020 in r203320, for declaration of dump_function_to_file. 3021 * TODO.rst ("segfault seen in libbacktrace"): Remove - this was 3022 fixed by Ian in r203810. 3023 30242013-10-23 David Malcolm <dmalcolm@redhat.com> 3025 3026 * internal-api.c: Add missing include of diagnostic-core.h 3027 30282013-10-22 David Malcolm <dmalcolm@redhat.com> 3029 3030 * internal-api.c (gcc::jit::context::add_error_va): Record the 3031 first error that occurs on a context. 3032 (gcc::jit::context::get_first_error): New. 3033 * internal-api.h (gcc::jit::context::get_first_error): New. 3034 (gcc::jit::context::m_first_error_str): New. 3035 * libgccjit.c (gcc_jit_context_get_first_error): New. 3036 * libgccjit.h (gcc_jit_context_get_first_error): New. 3037 * libgccjit.map (gcc_jit_context_get_first_error): New. 3038 30392013-10-21 David Malcolm <dmalcolm@redhat.com> 3040 3041 * internal-api.c (gcc::jit::context::compile): Correctly cleanup 3042 timevars in error-handling, preventing an issue where an error 3043 on a context left timevar.c in an unstopped state, leading to an 3044 assertion failure when restarting timevars in the next compile. 3045 Found via fuzz-testing. 3046 30472013-10-21 David Malcolm <dmalcolm@redhat.com> 3048 3049 * internal-api.c (gcc::jit::context::postprocess): Show source 3050 line numbers (if any) in gimple dump. 3051 30522013-10-21 David Malcolm <dmalcolm@redhat.com> 3053 3054 * libgccjit.c (gcc_jit_function_new_local): Use a more clear 3055 error message for the case where someone tries to add a local 3056 to a function imported from elsewhere. 3057 30582013-10-21 David Malcolm <dmalcolm@redhat.com> 3059 3060 * TODO.rst ("the C unary prefix "&" operator"): Remove completed item. 3061 * internal-api.c (gcc::jit::lvalue::get_address): New. 3062 * internal-api.h (gcc::jit::lvalue::get_address): New. 3063 * libgccjit.c (gcc_jit_lvalue_get_address): New. 3064 * libgccjit.h (gcc_jit_lvalue_get_address): New. 3065 * libgccjit.map (gcc_jit_lvalue_get_address): New. 3066 30672013-10-18 David Malcolm <dmalcolm@redhat.com> 3068 3069 * internal-api.c (gcc::jit::context::new_param): Add context 3070 argument to ctor for rvalue and its subclasses. 3071 (gcc::jit::context::new_global): Likewise. 3072 (gcc::jit::context::new_rvalue_from_int): Likewise. 3073 (gcc::jit::context::new_rvalue_from_double): Likewise. 3074 (gcc::jit::context::new_rvalue_from_ptr): Likewise. 3075 (gcc::jit::context::new_string_literal): Likewise. 3076 (gcc::jit::context::new_call): Likewise. 3077 (gcc::jit::context::new_array_lookup): Likewise. 3078 (gcc::jit::function::new_local): Likewise. 3079 (gcc::jit::context::new_binary_op): Likewise; add new 3080 operations. 3081 (gcc::jit::context::new_comparison): Likewise; add new 3082 comparisons. 3083 (gcc::jit::context::as_truth_value): New. 3084 (gcc::jit::context::new_unary_op): New. 3085 (gcc::jit::context::new_field_access): Convert to a helper 3086 method for use by the access_fields methods. 3087 (gcc::jit::context::new_dereference): New. 3088 (gcc::jit::lvalue::access_field): New. 3089 (gcc::jit::rvalue::access_field): New. 3090 (gcc::jit::rvalue::dereference_field): New. 3091 (gcc::jit::rvalue::dereference): New. 3092 * internal-api.h (gcc::jit::context::new_unary_op): New. 3093 (gcc::jit::context::new_field_access): Work 3094 (gcc::jit::context::new_dereference): New. 3095 (gcc::jit::context::as_truth_value): New. 3096 (gcc::jit::rvalue): Add a context field. 3097 (gcc::jit::rvalue::access_field): New. 3098 (gcc::jit::rvalue::dereference_field): New. 3099 (gcc::jit::rvalue::dereference): New. 3100 (gcc::jit::lvalue::lvalue): Add context to ctor. 3101 (gcc::jit::lvalue::access_field): New. 3102 (gcc::jit::param::param): Add context to ctor. 3103 * libgccjit.c (gcc_jit_context_new_unary_op): New. 3104 (gcc_jit_context_new_field_access): Remove. 3105 (gcc_jit_lvalue_access_field): New. 3106 (gcc_jit_rvalue_access_field): New. 3107 (gcc_jit_rvalue_dereference_field): New. 3108 (gcc_jit_rvalue_dereference): New. 3109 *libgccjit.h (enum gcc_jit_unary_op): New. 3110 (gcc_jit_context_new_unary_op): New. 3111 (enum gcc_jit_binary_op): Document values, and add... 3112 (GCC_JIT_BINARY_OP_DIVIDE): New. 3113 (GCC_JIT_BINARY_OP_MODULO): New. 3114 (GCC_JIT_BINARY_OP_BITWISE_AND): New. 3115 (GCC_JIT_BINARY_OP_BITWISE_XOR): New. 3116 (GCC_JIT_BINARY_OP_BITWISE_OR): New. 3117 (GCC_JIT_BINARY_OP_LOGICAL_AND): New. 3118 (GCC_JIT_BINARY_OP_LOGICAL_OR): New. 3119 (enum gcc_jit_comparison): Document values, and add... 3120 (GCC_JIT_COMPARISON_EQ): New. 3121 (GCC_JIT_COMPARISON_NE): New. 3122 (GCC_JIT_COMPARISON_LE): New. 3123 (GCC_JIT_COMPARISON_GT): New. 3124 (GCC_JIT_COMPARISON_GE): New. 3125 (gcc_jit_context_new_field_access): Remove. 3126 (gcc_jit_lvalue_access_field): New. 3127 (gcc_jit_rvalue_access_field): New. 3128 (gcc_jit_rvalue_dereference_field): New. 3129 (gcc_jit_rvalue_dereference): New. 3130 * libgccjit.map (gcc_jit_context_new_field_access): Remove. 3131 (gcc_jit_lvalue_access_field): New. 3132 (gcc_jit_rvalue_access_field): New. 3133 (gcc_jit_rvalue_dereference_field): New. 3134 (gcc_jit_rvalue_dereference): New. 3135 * TODO.rst: Update 3136 31372013-10-18 David Malcolm <dmalcolm@redhat.com> 3138 3139 * internal-api.c (gcc::jit::context::get_type): Improve error 3140 message, and report the bogus value. 3141 (gcc::jit::context::new_binary_op): Likewise. 3142 (gcc::jit::context::new_comparison): Likewise. 3143 (gcc::jit::context::set_str_option): Likewise. 3144 (gcc::jit::context::set_int_option): Likewise. 3145 (gcc::jit::context::set_bool_option): Likewise. 3146 (gcc::jit::context::compile): Likewise, and make the errors 3147 block the creation of result, rather than just the return 3148 value of the client callback. 3149 (gcc::jit::context::add_error): Add varargs and provide 3150 implementation, calling into... 3151 (gcc::jit::context::add_error_va): New. 3152 * internal-api.h (GNU_PRINTF): New. 3153 (gcc::jit::context::add_error): Add varargs and GNU_PRINTF 3154 attribute macro. 3155 (gcc::jit::context::add_error_va): New. 3156 (gcc::jit::context::errors_occurred): New. 3157 (gcc::jit::context::m_error_count): New. 3158 (gcc::jit::function::get_kind): New. 3159 * libgccjit.c (JIT_BEGIN_STMT): New. 3160 (JIT_END_STMT): New. 3161 (RETURN_VAL_IF_FAIL): New. 3162 (RETURN_NULL_IF_FAIL): New. 3163 (RETURN_IF_FAIL): New. 3164 (RETURN_IF_NOT_INITIAL_CTXT): New. 3165 (RETURN_NULL_IF_NOT_INITIAL_CTXT): New. 3166 (RETURN_NULL_IF_NOT_CALLBACK_CTXT): New. 3167 (RETURN_IF_NOT_FUNC_DEFINITION): New. 3168 (RETURN_NULL_IF_NOT_FUNC_DEFINITION): New. 3169 (jit_error): New. 3170 (gcc_jit_context_set_code_factory): Use new error-checking 3171 macros. 3172 (ASSERT_WITHIN_CALLBACK): Remove. 3173 (ASSERT_NOT_WITHIN_CALLBACK): Remove. 3174 (gcc_jit_context_new_location): Use new error-checking macros. 3175 (gcc_jit_context_get_type): Likewise. 3176 (gcc_jit_type_get_pointer): Likewise. 3177 (gcc_jit_type_get_const): Likewise. 3178 (gcc_jit_context_new_field): Likewise. 3179 (gcc_jit_context_new_struct_type): Likewise. 3180 (gcc_jit_context_new_param): Likewise. 3181 (gcc_jit_param_as_lvalue): Likewise. 3182 (gcc_jit_param_as_rvalue): Likewise. 3183 (gcc_jit_context_new_function): Likewise. 3184 (gcc_jit_function_new_forward_label): Likewise. 3185 (gcc_jit_context_new_global): Likewise. 3186 (gcc_jit_lvalue_as_rvalue): Likewise. 3187 (gcc_jit_context_new_rvalue_from_int): Likewise. 3188 (gcc_jit_context_zero): Likewise. 3189 (gcc_jit_context_one): Likewise. 3190 (gcc_jit_context_new_rvalue_from_double): Likewise. 3191 (gcc_jit_context_new_rvalue_from_ptr): Likewise. 3192 (gcc_jit_context_new_string_literal): Likewise. 3193 (gcc_jit_context_new_binary_op): Likewise. 3194 (gcc_jit_context_new_comparison): Likewise. 3195 (gcc_jit_context_new_call): Likewise. 3196 (gcc_jit_context_new_array_lookup): Likewise. 3197 (gcc_jit_context_new_field_access): Likewise. 3198 (gcc_jit_function_new_local): Likewise. 3199 (gcc_jit_function_add_label): Likewise. 3200 (gcc_jit_function_place_forward_label): Likewise. 3201 (gcc_jit_function_add_eval): Likewise. 3202 (gcc_jit_function_add_assignment): Likewise. 3203 (gcc_jit_function_add_assignment_op): Likewise. 3204 (gcc_jit_function_add_conditional): Likewise. 3205 (gcc_jit_function_add_jump): Likewise. 3206 (gcc_jit_function_add_return): Likewise. 3207 (gcc_jit_function_new_loop): Likewise. 3208 (gcc_jit_loop_end): Likewise. 3209 (gcc_jit_context_set_str_option): Likewise. 3210 (gcc_jit_context_set_int_option): Likewise. 3211 (gcc_jit_context_set_bool_option): Likewise. 3212 (gcc_jit_context_compile): Likewise. 3213 (gcc_jit_result_get_code): Likewise. 3214 (gcc_jit_result_release): Likewise. 3215 * libgccjit.h (gcc_jit_function_new_forward_label): Clarify 3216 behavior. 3217 (gcc_jit_function_add_label): Likewise. 3218 32192013-10-17 David Malcolm <dmalcolm@redhat.com> 3220 3221 * internal-api.c (gcc::jit::context::get_void_type): Remove. 3222 (gcc::jit::context::get_char_type): Remove. 3223 (gcc::jit::context::get_int_type): Remove. 3224 (gcc::jit::context::get_float_type): Remove. 3225 (gcc::jit::context::get_double_type): Remove. 3226 (get_tree_node_for_type): New. 3227 (gcc::jit::context::get_type): New. 3228 (gcc::jit::context::new_rvalue_from_double): New. 3229 (gcc::jit::context::new_rvalue_from_ptr): New. 3230 * internal-api.h (gcc::jit::context::get_void_type): Remove. 3231 (gcc::jit::context::get_char_type): Remove. 3232 (gcc::jit::context::get_int_type): Remove. 3233 (gcc::jit::context::get_float_type): Remove. 3234 (gcc::jit::context::get_double_type): Remove. 3235 (gcc::jit::context::get_type): New. 3236 (gcc::jit::context::new_rvalue_from_double): New. 3237 (gcc::jit::context::new_rvalue_from_ptr): New. 3238 * libgccjit.c (gcc_jit_context_get_void_type): Remove. 3239 (gcc_jit_context_get_char_type): Remove. 3240 (gcc_jit_context_get_int_type): Remove. 3241 (gcc_jit_context_get_float_type): Remove. 3242 (gcc_jit_context_get_double_type): Remove. 3243 (gcc_jit_context_get_type): New. 3244 (gcc_jit_context_new_rvalue_from_double): New. 3245 (gcc_jit_context_new_rvalue_from_ptr): New. 3246 * libgccjit.h (gcc_jit_context_get_void_type): Remove. 3247 (gcc_jit_context_get_char_type): Remove. 3248 (gcc_jit_context_get_int_type): Remove. 3249 (gcc_jit_context_get_float_type): Remove. 3250 (gcc_jit_context_get_double_type): Remove. 3251 (enum gcc_jit_types): New. 3252 (gcc_jit_context_get_type): New. 3253 (gcc_jit_context_new_rvalue_from_double): New. 3254 (gcc_jit_context_new_rvalue_from_ptr): New. 3255 * libgccjit.map (gcc_jit_context_get_void_type): Remove. 3256 (gcc_jit_context_get_char_type): Remove. 3257 (gcc_jit_context_get_int_type): Remove. 3258 (gcc_jit_context_get_float_type): Remove. 3259 (gcc_jit_context_get_double_type): Remove. 3260 (enum gcc_jit_types): New. 3261 (gcc_jit_context_get_type): New. 3262 (gcc_jit_context_new_rvalue_from_double): New. 3263 (gcc_jit_context_new_rvalue_from_ptr): New. 3264 * TODO.rst ("access to more primitive types"): Remove 3265 completed item. 3266 32672013-10-17 David Malcolm <dmalcolm@redhat.com> 3268 3269 * libgccjit.h: Add and reword comments throughout. 3270 32712013-10-17 David Malcolm <dmalcolm@redhat.com> 3272 3273 * TODO.rst: Update. 3274 32752013-10-16 David Malcolm <dmalcolm@redhat.com> 3276 3277 * TODO.rst (gcc_jit_context_new_local): Remove completed item. 3278 * internal-api.c (gcc::jit::context::new_local): Replace with... 3279 (gcc::jit::function::new_local): ...this, and change return type 3280 from (local*) to (lvalue*). 3281 * internal-api.h (gcc::jit::local): Eliminate. 3282 (gcc::jit::context::new_local): Replace with... 3283 (gcc::jit::function::new_local): ...this, and change return type 3284 from (local*) to (lvalue*). 3285 * libgccjit.c (gcc_jit_local): Eliminate. 3286 (gcc_jit_context_new_local): Replace with... 3287 (gcc_jit_function_new_local): ...this, and change return type 3288 from (gcc_jit_local*) to (gcc_jit_lvalue*). 3289 (gcc_jit_local_as_lvalue): Remove. 3290 (gcc_jit_local_as_rvalue): Remove. 3291 * libgccjit.h (gcc_jit_local): Remove. 3292 (gcc_jit_context_new_local): Replace with... 3293 (gcc_jit_function_new_local): ...this, and change return type 3294 from (gcc_jit_local*) to (gcc_jit_lvalue*). 3295 (gcc_jit_local_as_lvalue): Remove. 3296 (gcc_jit_local_as_rvalue): Remove. 3297 * libgccjit.map (gcc_jit_context_new_local): Replace with... 3298 (gcc_jit_function_new_local): ...this. 3299 (gcc_jit_local_as_lvalue): Remove. 3300 (gcc_jit_local_as_rvalue): Remove. 3301 33022013-10-15 David Malcolm <dmalcolm@redhat.com> 3303 3304 * libgccjit.h (gcc_jit_location): Rewrite comment to reflect 3305 that this part of the API is now implemented. 3306 ("Functions for use within the code factory."): Add notes on 3307 memory-management and lifetimes. 3308 * notes.txt: Update diagram to show handle_locations. 3309 33102013-10-15 David Malcolm <dmalcolm@redhat.com> 3311 3312 * TODO.rst: Update. 3313 33142013-10-14 David Malcolm <dmalcolm@redhat.com> 3315 3316 * libgccjit.map: Alphabetize the exported symbols. 3317 33182013-10-14 David Malcolm <dmalcolm@redhat.com> 3319 3320 * internal-api.c (gcc::jit::context::new_field): Implement 3321 location support, by calling set_tree_location. 3322 (gcc::jit::context::new_struct_type): Likewise. 3323 (gcc::jit::context::new_param): Likewise. 3324 (gcc::jit::context::new_function): Likewise. 3325 (gcc::jit::context::new_global): Likewise. 3326 (gcc::jit::context::new_local): Likewise. 3327 (gcc::jit::context::new_binary_op): Likewise. 3328 (gcc::jit::context::new_comparison): Likewise. 3329 (gcc::jit::context::new_call): Likewise. 3330 (gcc::jit::context::new_array_lookup): Likewise. 3331 (gcc::jit::context::new_field_access): Likewise. 3332 (gcc::jit::context::add_assignment): Likewise. 3333 (gcc::jit::context::add_conditional): Likewise. 3334 (gcc::jit::function::add_label): Likewise. 3335 (gcc::jit::function::add_jump): Likewise. 3336 (gcc::jit::function::add_return): Likewise. 3337 (gcc::jit::function::place_forward_label): Likewise, adding 3338 location parameter. 3339 (gcc::jit::loop::loop): Add loc arg to place_forward_label. 3340 (gcc::jit::loop::end): Likewise. 3341 (gcc::jit::context::invoke_code_factory): Call handle_locations 3342 after the client callback is done, before any GC can run. 3343 (line_comparator): New. 3344 (location_comparator): New. 3345 (gcc::jit::context::handle_locations): New. 3346 (gcc::jit::context::new_location): New. 3347 (gcc::jit::context::set_tree_location): New. 3348 (gcc::jit::context::get_source_file): New. 3349 (gcc::jit::source_file::source_file): New. 3350 (gcc::jit::source_file::get_source_line): New. 3351 (gcc::jit::source_line::source_line): New. 3352 (gcc::jit::source_line::get_location): New. 3353 (gcc::jit::location::location): New. 3354 * internal-api.h (gcc::jit::context::new_location): New. 3355 (gcc::jit::context::set_tree_location): New. 3356 (gcc::jit::context::handle_locations): New. 3357 (gcc::jit::context::get_source_file): New. 3358 (gcc::jit::context::m_source_files): New field. 3359 (gcc::jit::context::m_cached_locations: New field. 3360 (gcc::jit::function::place_forward_label): Add location 3361 parameter. 3362 (gcc::jit::function::set_tree_location): New. 3363 (gcc::jit::source_file): New class. 3364 (gcc::jit::source_line): New class. 3365 (gcc::jit::location): New class. 3366 * libgccjit.c (gcc_jit_context_new_location): New. 3367 (gcc_jit_function_place_forward_label): Add location parameter, 3368 changing public API. 3369 * libgccjit.h (gcc_jit_context_new_location): New. 3370 (gcc_jit_function_place_forward_label): Add location parameter, 3371 changing public API. 3372 * libgccjit.map (gcc_jit_context_new_location): New. 3373 (main): Remove obsolete export. 3374 (called_function): Likewise. 3375 33762013-10-11 David Malcolm <dmalcolm@redhat.com> 3377 3378 * internal-api.c: Update includes to reflect move of decl of 3379 dump_function_to_file from tree-dump.h to tree-flow.h in 3380 r203320. 3381 33822013-10-10 David Malcolm <dmalcolm@redhat.com> 3383 3384 * libgccjit.h (GCC_JIT_BOOL_OPTION_DUMP_SUMMARY): New. 3385 * internal-api.c ((gcc::jit::context::compile): Implement 3386 GCC_JIT_BOOL_OPTION_DUMP_SUMMARY. 3387 33882013-10-10 David Malcolm <dmalcolm@redhat.com> 3389 3390 * libgccjit.h (GCC_JIT_BOOL_OPTION_SELFCHECK_GC): Improve 3391 documentation. 3392 (GCC_JIT_BOOL_OPTION_DUMP_INITIAL_GIMPLE): Likewise. 3393 33942013-10-10 David Malcolm <dmalcolm@redhat.com> 3395 3396 * libgccjit.h: Clarify the separation of the API into "outside 3397 the callback" and "within the callback" entrypoints, moving the 3398 latter to the bottom of the header. 3399 34002013-10-10 David Malcolm <dmalcolm@redhat.com> 3401 3402 * libgccjit.h: Add comments throughout. 3403 34042013-10-09 David Malcolm <dmalcolm@redhat.com> 3405 3406 * internal-api.c (gcc::jit::context::~context): Fix indentation; 3407 clean up memory allocations when using 3408 GCC_JIT_BOOL_OPTION_KEEP_INTERMEDIATES. 3409 34102013-10-09 David Malcolm <dmalcolm@redhat.com> 3411 3412 * libgccjit.h (enum gcc_jit_bool_option): Add 3413 GCC_JIT_BOOL_OPTION_DUMP_EVERYTHING. 3414 * internal-api.c (gcc::jit::context::compile): Implement 3415 GCC_JIT_BOOL_OPTION_DUMP_EVERYTHING. 3416 34172013-10-09 David Malcolm <dmalcolm@redhat.com> 3418 3419 * libgccjit.h (enum gcc_jit_bool_option): Add 3420 GCC_JIT_BOOL_OPTION_KEEP_INTERMEDIATES. 3421 * internal-api.c (gcc::jit::context::~context): Implement 3422 GCC_JIT_BOOL_OPTION_KEEP_INTERMEDIATES. 3423 34242013-10-08 David Malcolm <dmalcolm@redhat.com> 3425 3426 * internal-api.c (gcc::jit::context::compile): Use mkdtemp to 3427 create a temporary directory and create the .s and .so files 3428 there, rather than writing to "fake.s" and then reading it to 3429 make "fake.so", then using it, fixing various possible race 3430 attacks by processes that can write to the process' current 3431 working directory. 3432 (gcc::jit::context::~context): Clean up tempfiles and path 3433 buffers. 3434 * internal-api.h (gcc::jit::context): Add fields 3435 m_path_template, m_path_tempdir, m_path_c_file, m_path_s_file, 3436 m_path_so_file. 3437 34382013-10-08 David Malcolm <dmalcolm@redhat.com> 3439 3440 * internal-api.c (gcc::jit::context::new_function): Fix leak of 3441 arg_types. 3442 34432013-10-08 David Malcolm <dmalcolm@redhat.com> 3444 3445 * internal-api.c (gcc::jit::context::~context): New. 3446 * internal-api.h (gcc::jit::context::~context): New. 3447 34482013-10-07 David Malcolm <dmalcolm@redhat.com> 3449 3450 * internal-api.c (gcc::jit::context::compile): Implement 3451 GCC_JIT_BOOL_OPTION_SELFCHECK_GC. 3452 3453 * libgccjit.h (enum gcc_jit_bool_option): Add 3454 GCC_JIT_BOOL_OPTION_SELFCHECK_GC. 3455 34562013-10-07 David Malcolm <dmalcolm@redhat.com> 3457 3458 * Make-lang.in: Rename JIT_OBJS to jit_OBJS. Delete manual 3459 dependencies. 3460 34612013-10-04 David Malcolm <dmalcolm@redhat.com> 3462 3463 * internal-api.c (gcc::jit::context::new_global): New. 3464 * internal-api.h (gcc::jit::context::new_global): New. 3465 * libgccjit.c (gcc_jit_context_new_global) New. 3466 * libgccjit.h (gcc_jit_context_new_global) New. 3467 * libgccjit.map: Add gcc_jit_context_new_global. 3468 34692013-10-03 David Malcolm <dmalcolm@redhat.com> 3470 3471 * libgccjit.c (gcc_jit_param_as_lvalue): New. 3472 * libgccjit.h (gcc_jit_param_as_lvalue): New. 3473 * libgccjit.map: Add gcc_jit_param_as_lvalue. 3474 34752013-10-03 David Malcolm <dmalcolm@redhat.com> 3476 3477 * internal-api.c (gcc::jit::function::postprocess): Dump gimple 3478 using dump_function_to_file rather than debug_gimple_seq so that 3479 we also get the declaration. 3480 34812013-10-03 David Malcolm <dmalcolm@redhat.com> 3482 3483 * Make-lang.in: New. 3484 * TODO.rst: New. 3485 * config-lang.in: New. 3486 * dummy-frontend.c: New. 3487 * internal-api.c: New. 3488 * internal-api.h: New. 3489 * libgccjit.c: New. 3490 * libgccjit.h: New. 3491 * libgccjit.map: New. 3492 * notes.txt: New. 3493 3494Copyright (C) 2013-2014 Free Software Foundation, Inc. 3495 3496Copying and distribution of this file, with or without modification, 3497are permitted in any medium without royalty provided the copyright 3498notice and this notice are preserved. 3499