David Neto [Tue, 29 Mar 2016 18:49:05 +0000 (14:49 -0400)]
OpExecutionMode only takes a single ExecutionMode
Previously, the grammar allowed many execution modes for a single
OpExecutionMode instruction.
Removes the variable- and optional- execution mode operand type
enum values.
Issue found by antiagainst@
Lei Zhang [Tue, 29 Mar 2016 13:47:23 +0000 (09:47 -0400)]
Capability fix: ImageReadWrite & ImageMipmap require ImageBasic.
Andrew Woloszyn [Fri, 18 Mar 2016 18:13:16 +0000 (14:13 -0400)]
Make everything compile cleanly with -Wpedantic.
This makes SPIRV_WARN_EVERYTHING compile cleanly.
David Neto [Thu, 17 Mar 2016 18:04:32 +0000 (14:04 -0400)]
Support both -h, --help on spirv-as, spirv-val
The spirv-dis command already supports both.
Lei Zhang [Thu, 17 Mar 2016 19:20:22 +0000 (15:20 -0400)]
Travis CI: update test binary location and return correct status.
Lei Zhang [Thu, 17 Mar 2016 02:43:31 +0000 (22:43 -0400)]
Split CMakeLists.txt into smaller ones.
Lei Zhang [Wed, 16 Mar 2016 18:05:37 +0000 (14:05 -0400)]
Travis CI: add configuration for testing on Mac OS X.
David Neto [Mon, 29 Feb 2016 06:01:04 +0000 (01:01 -0500)]
Support Linux-to-Windows cross comiple via MinGW
For MinGW compile, statically link the C++ runtime
Change-Id: Ic58d1e47a814a265fd91edd7082e938ffc87f0c9
Lei Zhang [Tue, 15 Mar 2016 20:52:40 +0000 (16:52 -0400)]
Change the interface for getWord().
* It's redundant to provide two mutable spv_position to getWord().
* getWord() should take string pointer by the style guide.
Lei Zhang [Wed, 16 Mar 2016 18:54:47 +0000 (14:54 -0400)]
Travis CI: use Ubuntu 14.04 (Trusty) as the Linux environment.
Dejan Mircevski [Tue, 15 Mar 2016 19:16:40 +0000 (15:16 -0400)]
Remove AssemblyContext::getWord().
Fixes #152.
Daniel Robertson [Mon, 14 Mar 2016 12:41:32 +0000 (08:41 -0400)]
Add patchlevel to CMake requirement
Lei Zhang [Fri, 11 Mar 2016 20:24:41 +0000 (15:24 -0500)]
Return str in describe() as said by the blurb.
Lei Zhang [Fri, 11 Mar 2016 20:03:04 +0000 (15:03 -0500)]
Fix the corner case in version generation script.
When the given directory is not inside the SPIRV-Tools project,
describe() returns a str instance instead of bytes instance
in Python3, which will case problem when calling decode() on it.
Andrew Woloszyn [Mon, 7 Mar 2016 20:55:44 +0000 (15:55 -0500)]
Fixed float->int16 conversion warnings in VS2013.
Lei Zhang [Mon, 7 Mar 2016 18:44:09 +0000 (13:44 -0500)]
Add comments to explain why calling decode().
Lei Zhang [Sun, 6 Mar 2016 18:00:58 +0000 (13:00 -0500)]
Run pyformat with -s 4 --force_quote_type=single.
Lei Zhang [Sun, 6 Mar 2016 16:44:21 +0000 (11:44 -0500)]
Imporve compatibility with Python3.
* Use print_function from __future__ to tackle the print syntax
change.
* In Python3 str and bytes are no longer the same thing. Need
proper decode.
Florian Ziesche [Tue, 1 Mar 2016 18:56:14 +0000 (19:56 +0100)]
Don't check kernel entry-point signatures.
Recognize SpvOpInBoundsPtrAccessChain and SpvOpPtrAccessChain as opcodes
returning a pointer.
* spvOpcodeIsPointer: recognize SpvOpInBoundsPtrAccessChain and SpvOpPtrAccessChain as opcodes returning a pointer
* isValid<SpvOpEntryPoint>: don't check kernel function signatures (these don't have to be 'void main(void)')
* added tests for kernel OpEntryPoint, OpInBoundsPtrAccessChain and OpPtrAccessChain, as well as facilities to actually test kernel/OpenCL SPIR-V
* fixed pow and pown specification (both should take 2 parameters), spec bug reported at https://www.khronos.org/bugzilla/show_bug.cgi?id=1469
* use ASSERT_TRUE instead of ASSERT_EQ
* added pow and pown test (pow(val, 2.0f) and pown(val, 3))
Revert " * fixed pow and pown specification (both should take 2 parameters), spec bug reported at https://www.khronos.org/bugzilla/show_bug.cgi?id=1469"
This reverts commit
c3d5a87e73334b25aa4278964eea6d1c7625cd81.
Revert " * added pow and pown test (pow(val, 2.0f) and pown(val, 3))"
This reverts commit
7624aec720a51dc212704dc92eff6ae3634d2d6c.
Dejan Mircevski [Tue, 1 Mar 2016 15:17:18 +0000 (10:17 -0500)]
Make libspirv.h more C friendly.
In C, `#include <stdbool.h>` so `bool` is recognized.
Add a `typedef` for `spv_context_t`.
Lei Zhang [Fri, 26 Feb 2016 20:38:42 +0000 (15:38 -0500)]
Remove stale code.
Lei Zhang [Thu, 25 Feb 2016 21:11:16 +0000 (16:11 -0500)]
Fix issues reported by cppcheck.
Remove code not being used, add explicit to constructors, and
add missing fields in constructors.
Andrew Woloszyn [Wed, 24 Feb 2016 20:26:05 +0000 (15:26 -0500)]
Added missing <cstdint> in bitutils.
This was breaking MSVC2013.
David Neto [Wed, 24 Feb 2016 17:41:29 +0000 (12:41 -0500)]
If no tag in the repo, then show the commit hash
Andrew Woloszyn [Wed, 24 Feb 2016 15:11:07 +0000 (10:11 -0500)]
Actually find the python executable before use.
Also change PYTHON_EXE to PYTHON_EXECUTABLE to match what
the cmake documentation says.
David Neto [Tue, 23 Feb 2016 22:58:31 +0000 (17:58 -0500)]
Use subprocess.Popen, hoping for Windows portability
Replaces use of subprocess.check_output
Lei Zhang [Mon, 22 Feb 2016 20:25:50 +0000 (15:25 -0500)]
Remove spv_validate_options_t and change tests accrodingly.
Users always want to run all the checks. The spv_validate_options_t
mechanism, which provides little benefits to users, complicates the
internal implementation and also makes the tests exercise different
paths as users do.
Right now the tests are more like integration tests instead of
unit tests, which should be our next refactoring aim.
qining [Mon, 22 Feb 2016 21:07:19 +0000 (16:07 -0500)]
Implement --version for spirv-tools
'spirv-as --version', 'spirv-dis --version' and 'spirv-val --version'
will display version information.
Lei Zhang [Mon, 22 Feb 2016 22:17:25 +0000 (17:17 -0500)]
getWord() should not go beyond the end of the source text.
This addresses Bug #126 where EOL is missing at the end of
source file.
David Neto [Mon, 22 Feb 2016 21:43:53 +0000 (16:43 -0500)]
spirv-val help says it's a work in progress.
Lei Zhang [Fri, 19 Feb 2016 15:15:17 +0000 (10:15 -0500)]
Avoid closing stdin and stdout.
Lei Zhang [Thu, 18 Feb 2016 23:04:11 +0000 (18:04 -0500)]
Fix command line option errors in val.
* There is no -capability.
* -rules is missing.
* -id by default is turned off.
* Add -all.
Lei Zhang [Thu, 18 Feb 2016 22:43:23 +0000 (17:43 -0500)]
Support outputting to stdout in the as tool.
Eric Engestrom [Thu, 18 Feb 2016 23:41:16 +0000 (23:41 +0000)]
Remove unnecessary null pointer checks
Fixes #110
Lei Zhang [Thu, 18 Feb 2016 20:51:04 +0000 (15:51 -0500)]
Document SPIR-V binary and assembly file naming convention.
Lei Zhang [Thu, 18 Feb 2016 19:38:12 +0000 (14:38 -0500)]
Use unordered_map to store defs in UseDefTracker for fast lookup.
Lei Zhang [Thu, 18 Feb 2016 18:40:56 +0000 (13:40 -0500)]
Support using stdin to supply input in the val tool.
This allows getting output from other utilities using pipe.
Lei Zhang [Thu, 18 Feb 2016 17:21:10 +0000 (12:21 -0500)]
Support using stdin to supply input in the as tool.
This allows getting output from other utilities using pipe.
Lei Zhang [Thu, 18 Feb 2016 15:50:42 +0000 (10:50 -0500)]
Reject unknown long-named command line options in dis.
David Neto [Thu, 18 Feb 2016 03:27:46 +0000 (22:27 -0500)]
Fix the source organization section in README.md
It now reflects the new header file organization.
It also tells API clients what to add to the search
include path.
David Neto [Tue, 16 Feb 2016 17:02:05 +0000 (12:02 -0500)]
SPIR-V Tools fully supports SPIR-V 1.0 Rev3
- Update version numbers in libspirv.h.
Add a test for the relevant macros.
- Update the README
David Neto [Wed, 17 Feb 2016 17:12:45 +0000 (12:12 -0500)]
Add MultiViewport capability, new in 1.0.3
Fix typos in previous tests with MultiViewport.
David Neto [Wed, 17 Feb 2016 19:44:00 +0000 (14:44 -0500)]
Rearrange headers
Now we have public headers arranged as follows:
$SPIRV_TOOLS_ROOT/include/spirv-tools/libspirv.h
$SPIRV_TOOLS_ROOT/include/spirv/spirv.h
$SPIRV_TOOLS_ROOT/include/spirv/GLSL.std.450.h
$SPIRV_TOOLS_ROOT/include/spirv/OpenCL.std.h
A project should use -I$SPIRV_TOOLS_ROOT/include
and then #include "spirv-tools/libspirv.h"
The headers from the SPIR-V Registry can be accessed as "spirv/spirv."
for example.
The install target should also install the headers from the SPIR-V
Registry. The libspirv.h header is broken otherwise.
The SPIRV-Tools library depends on the headers from the SPIR-V Registry.
The util/bitutils.h and util/hex_float.h are pulled into the internal
source tree. Those are not part of the public API to SPIRV-Tools.
David Neto [Wed, 17 Feb 2016 17:17:04 +0000 (12:17 -0500)]
Some GLSL extended instructions depend on capabilities.
David Neto [Wed, 17 Feb 2016 00:26:13 +0000 (19:26 -0500)]
Add GLSL instructions NMin, NMax, NClamp
These appear first in GLSL.std.450 in 1.0 Rev3
David Neto [Mon, 15 Feb 2016 19:20:01 +0000 (14:20 -0500)]
Test OpImageSparseRead
Also tweak the image operands test with OpImageFetch so the input assembly
more closely matches the expected output. But don't make it a round
trip test since we want to check the assembler's ability to read the
image operand mask with out-of-order mask names.
The OpImageSparseRead assembly test is also a round trip disassembler
test.
Andrew Woloszyn [Wed, 17 Feb 2016 18:00:23 +0000 (13:00 -0500)]
Fixed internal compiler error in gcc-4.9.
This showed up in mips and mips64 builds. A combination of templates
and the error reporting were causing gcc to crash. This splits up the
functionality in a way that now successfully compiles.
David Neto [Wed, 17 Feb 2016 17:39:41 +0000 (12:39 -0500)]
Remove remaining float overflow value tests
Should fix tests on Windows.
David Neto [Mon, 15 Feb 2016 18:50:00 +0000 (13:50 -0500)]
Use syntax tables for SPIR-V 1.0 Rev3
- The SPIR-V spec generator has changed how it represents optional
operands. Now it tracks a separate boolean flag indicating optionality.
However, SPIRV-Tools still wants to represent both operand class
and optionality in the same enums space (SPV_OPERAND_TYPE_*).
So there's extra work in the patch.
- In the spec generator, OperandImage is now OperandImageOperands.
This affects enum translation in opcode.cpp.
- In the spec generator, image operands are explicitly followed by
Id, and VariableIds. However, SPIRV-Tools uses the bits set
in the image operand bitmask to control the number and meaning
of the Ids that follow. So in writing the opcode.inc syntax
table, drop all operands after OperandImageOperands.
- Some enums are now more explicitly represented in the generated
opcode.inc:
- AccessQualifier (e.g. on OpTypeImage), in both required and
optional flavours.
- MemoryAccess (e.g. on loads and stores)
- Add SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER
- Add tests for the optional AccessQualifier operand on OpTypeImage.
- Update the AccessQualifier test for OpTypeImage so it's a round
trip test through the disassembler as well.
David Neto [Sun, 14 Feb 2016 18:55:50 +0000 (13:55 -0500)]
Update capabilities for 1.0 Rev3
David Neto [Tue, 16 Feb 2016 17:13:51 +0000 (12:13 -0500)]
Don't promise particular values when float parsing fails.
This should address problems on Windows:
https://github.com/KhronosGroup/SPIRV-Tools/issues/104
David Neto [Mon, 15 Feb 2016 14:36:20 +0000 (09:36 -0500)]
Configure gmock locally only if not already configured.
Allows an enclosing project to have already configured gmock, even
if the developer has placed the googletest sources under this
project's external/googletest directory.
Describe how to enable the tests in the two essential scenarios:
where SPIR-V Tools is standalone, or where SPIR-V Tools is configured
as a part of a larger project.
David Neto [Sun, 14 Feb 2016 18:42:17 +0000 (13:42 -0500)]
Use SPIR-V headers for 1.0 Rev3
Refresh from the SPIR-V registry.
David Neto [Sat, 6 Feb 2016 18:48:05 +0000 (13:48 -0500)]
Parse overflow for fp16 like for 32- and 64-bit
In that case, set the stream fail bit, and set the maximum normal
value or lowest normal value, depending on the sign of the original
value.
David Neto [Sat, 6 Feb 2016 18:48:05 +0000 (13:48 -0500)]
Float literal parsing fixes
- For 32- and 64-bit floats, overflow is a parse error
This works around a difference between Xcode's istringstream
and other platforms. Xcode's runtime library will happlily
"round up" overflow values to infinity. We want to make it fail.
- When parsing a float fails due to bad syntax, follow C++11
behaviour for operator>> and set the value to zero.
- When parsing a 32-bit or 64-bit float overflows, follow C++11
behaviour for operator>> and set the value to the nearest
normal value: either max or lowest finite value for the type.
- Add FloatProxy<T>::max() and ::lowest()
- Make 16-bit overflow behaviour more consistent: we always get a
16-bit infinity of the right sign, whether the original string
is a normal value for 32-bit or an overflow value for 32-bit.
That matches our earlier intent.
Added TODO's to make 16-bit overflow always an error, just like
for 32-bit and 64-bit.
- Simplify normal parsing of Float16 values by delegating to
normal parsing of 32-bit floats.
David Neto [Wed, 10 Feb 2016 16:46:05 +0000 (11:46 -0500)]
Reject float literals with two leading signs
E.g. --1 should be rejected.
David Neto [Mon, 8 Feb 2016 19:33:41 +0000 (14:33 -0500)]
More parsing tests for literals with leading minus
Also checks some hex literal cases.
This addresses part of
https://github.com/KhronosGroup/SPIRV-Tools/issues/45
by removing the parseNumber case for "-0" on unsigned
integers. We don't care about that platform difference
at the level of std::istringstream, since we reject it
at a higher parsing level.
Dejan Mircevski [Wed, 3 Feb 2016 22:16:27 +0000 (17:16 -0500)]
Make IsTypeNullable a transitive check.
Dejan Mircevski [Wed, 3 Feb 2016 17:34:52 +0000 (12:34 -0500)]
Eliminate parameter-order check from ID-validation.
Dejan Mircevski [Wed, 3 Feb 2016 15:26:59 +0000 (10:26 -0500)]
Allow Op[No]Line between OpFunctionParameters.
Also ensure we don't get thrown off by too many parameters.
Dejan Mircevski [Tue, 2 Feb 2016 19:41:35 +0000 (14:41 -0500)]
Enable ctest.
David Neto [Tue, 2 Feb 2016 17:12:48 +0000 (12:12 -0500)]
Validation of mask operand capabilities is more data driven
Use spvOperandIsConcreteMask to determine if an operand is
a bitmask. Check its individual bits in a generic way.
David Neto [Tue, 2 Feb 2016 17:05:34 +0000 (12:05 -0500)]
Add spvOperandIsConcreteMask
Dejan Mircevski [Sun, 31 Jan 2016 04:32:09 +0000 (23:32 -0500)]
Use AssemblyGrammar for capability validation.
Also:
- ForEach() for spv_capability_mask_t.
- Add capability min/max constants.
- Move max definition from validate_types.cpp to spirv_definition.h.
Dejan Mircevski [Fri, 29 Jan 2016 21:49:40 +0000 (16:49 -0500)]
Forbid Generic variables.
qining [Fri, 29 Jan 2016 17:09:34 +0000 (12:09 -0500)]
Fix validator mem overflow when tracking capabilities
Dejan Mircevski [Fri, 29 Jan 2016 03:20:28 +0000 (22:20 -0500)]
Fix in-function storage class validation.
Move tests into a fixture that properly turns on the relevant passes.
Dejan Mircevski [Thu, 28 Jan 2016 18:18:00 +0000 (13:18 -0500)]
Initialize vector<string>s on first use, not statically.
Dejan Mircevski [Fri, 22 Jan 2016 21:52:40 +0000 (16:52 -0500)]
Fix validation of return value.
Dejan Mircevski [Fri, 22 Jan 2016 19:27:00 +0000 (14:27 -0500)]
Remove spvOpcodeIsObject().
Also
- Add type_id to spv_id_info_t.
- Use spv_id_info_t::type_id instead of words[1].
Triggered some asserts on tests, where the code incorrectly assumed
words[1] had a type. Remove the asserts and handle gracefully.
- Add tests for OpStore of a label, a void, and a function.
Umar Arshad [Sat, 23 Jan 2016 19:14:32 +0000 (14:14 -0500)]
Initial capability implementation and unit tests
* Register capabilility and checks
* Add validate storage class capabilities checks and tests
* Instruction pass refactor
- More generic form of capability checking by checking operands
instead of instructions
* Execution Model capabilities checks
* Decorate BuiltIn capability checks
* Addressing Model capability checks
* Memory Model capability checks
* Execution Mode capability checks
* Dim capability checks
* SamplerAddressingMode capability checks
Lei Zhang [Tue, 26 Jan 2016 23:04:55 +0000 (18:04 -0500)]
Qualify CMake function names with "spvtools" to avoid conflictions.
If a third-party project defines a CMake function with the same
name, by importing that project's CMake configuration, we may end
up overwriting our own copy. Qualify all defined functions to
reduce that probability.
Dejan Mircevski [Thu, 21 Jan 2016 20:55:43 +0000 (15:55 -0500)]
Fix spvOpcodeIsScalarType() to include Boolean.
Remove redundant validations of OpConstant and OpConstantComposite.
Binary parser already performs these checks, so the validations can
never be triggered.
Enable bad-constant tests.
Dejan Mircevski [Thu, 21 Jan 2016 14:03:58 +0000 (09:03 -0500)]
Don't fail validation in unimplemented cases.
Dejan Mircevski [Thu, 21 Jan 2016 14:00:15 +0000 (09:00 -0500)]
Fix OpLoad pointee type validation.
David Neto [Mon, 18 Jan 2016 20:29:15 +0000 (15:29 -0500)]
Add disassembler option to show byte offset
The option is disabled by default.
The offset is printed in hex, as a comment after each instruction.
Dejan Mircevski [Fri, 15 Jan 2016 16:25:11 +0000 (11:25 -0500)]
Track uses and defs during parsing.
Replace two other, imperfect mechanisms for use-def tracking.
Use ValidationState_t::entry_points to track entry points.
Concentrate undefined-ID diagnostics in a single place.
Move validate_types.h content into validate.h due to increased
inter-dependency.
Track uses of all IDs: TYPE_ID, SCOPE_ID, ...
Also update some blurbs.
Fix entry-point accumulation and move it outside ProcessIds().
Remove validate_types.h from CMakeLists.txt.
Blurb for spvIsIdType.
Remove redundant diagnostics for undefined IDs.
Join "can not" and reformat.
Andrew Woloszyn [Tue, 19 Jan 2016 21:13:45 +0000 (16:13 -0500)]
Since g++-4.9 has an ICE occasionally in travis add a retry.
Try to re-run the build with ninja -j 1 if the build fails,
this should reduce the number of build failures we see.
Umar Arshad [Mon, 18 Jan 2016 18:41:52 +0000 (13:41 -0500)]
Fix missing OpNoLine layout checks
David Neto [Fri, 15 Jan 2016 15:43:39 +0000 (10:43 -0500)]
Disable warnings C4503 on MSVC for test code
C4503 is "decorated name length exceeded", triggered
by some heavily templated types.
Umar Arshad [Thu, 14 Jan 2016 04:25:11 +0000 (23:25 -0500)]
Validation refactor
* Organize passes into seperate files
* Remove module layout logic from Cfg pass
* Remove module layout logic from Functions class
* Refactor ModuleLayoutPass for readability
* Adapt consistent naming of layout sections (Stage/Section -> Section)
Lei Zhang [Thu, 7 Jan 2016 04:55:16 +0000 (23:55 -0500)]
Add configuration for Travis CI.
Umar Arshad [Thu, 14 Jan 2016 14:48:29 +0000 (09:48 -0500)]
Add missing branch instructions in SSA tests
Umar Arshad [Sat, 9 Jan 2016 22:25:36 +0000 (17:25 -0500)]
Remove static vector from GetModuleOrder
Andrew Woloszyn [Wed, 13 Jan 2016 15:44:05 +0000 (10:44 -0500)]
Fixed warning in VS2013 build.
Signed/Unsigned mismatch in progressToNextLayoutStageOrder().
Norbert Nopper [Wed, 13 Jan 2016 09:35:44 +0000 (10:35 +0100)]
Fix, that spirv-tools did not build, as two casts are not present.
Dejan Mircevski [Wed, 13 Jan 2016 14:52:23 +0000 (09:52 -0500)]
Fix build by renaming ValidationState_t constructor argument.
The `diag` argument shadows the `diag` method, so the strict build fails.
Umar Arshad [Wed, 16 Dec 2015 02:44:21 +0000 (21:44 -0500)]
Function and block layout checks. very basic CFG.
This adds function and block layout checks to the validator. Very
basic CFG code has been added to make sure labels and branches
are correctly ordered.
Also:
* MemoryModel and Variable instruction checks/tests
* Use spvCheckReturn instead of CHECK_RESULT
* Fix invalid SSA tests
* Created libspirv::spvResultToString in diagnostic.h
* Documented various functions and classes
* Fixed error messages
* Fixed using declaration for FunctionDecl enum class
Andrew Woloszyn [Tue, 12 Jan 2016 19:47:24 +0000 (14:47 -0500)]
Fixed use-after-free in isStartOfNewInst() tests.
Andrew Woloszyn [Mon, 11 Jan 2016 21:22:34 +0000 (16:22 -0500)]
Minor fixes to remove warnings in VS2013.
Also fixes VS2015 build due to missing #include <iterator>
David Neto [Mon, 11 Jan 2016 17:28:19 +0000 (12:28 -0500)]
spvDiagnosticDestroy is safe to call on nullptr
Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/62
Andrew Woloszyn [Mon, 11 Jan 2016 18:54:30 +0000 (13:54 -0500)]
Fix endian-ness conversion in the binary parser.
When we were swapping endian-ness in the binary parser, we would
write outside of the bounds of our vector.
Andrew Woloszyn [Mon, 11 Jan 2016 15:54:20 +0000 (10:54 -0500)]
Made compilation with gcc and clang more strict.
Added additional compilation flags to gcc and clang builds.
Adds -Wall -Wextra -Wno-long-long -Wshadow -Wundef -Wconversion
-WNo-sign-conversion and -Wno-missing-field-initializers
where appropriate.
Does not add -Wundef to tests, because GTEST tests undefined
macros all over the place.
Andrew Woloszyn [Fri, 8 Jan 2016 14:54:42 +0000 (09:54 -0500)]
Support 16-bit float in assembler and disassembler
This adds half-precision constants to spirv-tools.
16-bit floats are always disassembled into hex-float format,
but can be assembled from floating point or hex-float inputs.
Dejan Mircevski [Thu, 7 Jan 2016 18:44:22 +0000 (13:44 -0500)]
Extend copyright to 2016.
Dejan Mircevski [Thu, 7 Jan 2016 16:00:38 +0000 (11:00 -0500)]
Undefine a macro after use.
David Neto [Wed, 6 Jan 2016 19:43:55 +0000 (14:43 -0500)]
Fix shadowing warnings reported by GCC
David Neto [Wed, 6 Jan 2016 18:08:39 +0000 (13:08 -0500)]
Fix conversion warnings reported by GCC.
David Neto [Tue, 5 Jan 2016 19:57:58 +0000 (14:57 -0500)]
Explicitly convert to narrower type.
Fixes a strict Clang warning.
David Neto [Tue, 5 Jan 2016 19:56:02 +0000 (14:56 -0500)]
Avoid variable shadowing